python中的Selenium和多处理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中的Selenium和多处理相关的知识,希望对你有一定的参考价值。
在我的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。你能告诉我哪里错了吗?
答案
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://
使它工作。
以上是关于python中的Selenium和多处理的主要内容,如果未能解决你的问题,请参考以下文章