python中的Selenium和多处理

时间:2013-01-17 12:33:11

标签: python django selenium multiprocessing

在我的django应用程序中,我使用selenium来抓取和解析一些html页面。我尝试引入多进程来提高性能。这是我的代码:

import os
from selenium import webdriver
from multiprocessing import Pool

os.environ["DISPLAY"]=":56017"

def render_js(url):
    driver = webdriver.Firefox()
    driver.set_page_load_timeout(300)
    driver.get(url)
    text = driver.page_source
    driver.quit()
    return text

def parsing(url):
    text = render_js(url)
    ... parsing the text ....
    ... write in db.... 


url_list = ['www.google.com','www.python.com','www.microsoft.com']
pool = Pool(processes=2)
pool.map_async(parsing, url_list)
pool.close()
pool.join()

当两个进程同时协同工作并使用selenium时出现此错误:第一个进程使用'www.google.it'启动firefox并返回正确的文本,第二个进程使用url'www.python.com'返回www.google.it的文本,而不是www.python.com的文本。你能告诉我我哪里错了吗?

1 个答案:

答案 0 :(得分:1)

from selenium import webdriver
from multiprocessing import Pool

def parsing(url):
    driver = webdriver.Chrome()
    driver.set_page_load_timeout(300)
    driver.get(url)
    text = driver.page_source
    driver.close()
    return text

url_list = ['http://www.google.com', 'http://www.python.com']
pool = Pool(processes=4)
ret = pool.map(parsing, url_list)
for text in ret:
    print text[:30]

我尝试运行你的代码,Selenium抱怨糟糕的网址。向其添加http://使其有效。