我写了基于硒的functin,我希望它能同时解析多个网页。我有同时要传递给要抓取的函数的网址列表,以节省时间。
我创建了scraper.py文件,在其中放置了scraper函数:
multiprocessing
现在,我想使用该函数使用from scraper import *
url_list=['https://www.otodom.pl/oferta/2-duze-pokoje-we-wrzeszczu-do-zamieszania-ID42f6s',
'https://www.otodom.pl/oferta/mieszkanie-na-zamknietym-osiedlu-z-ogrodkiem-ID40ZxM',
'https://www.otodom.pl/oferta/zaciszna-nowe-mieszkanie-3-pokoje-0-ID41UaX',
'https://www.otodom.pl/oferta/dwupoziomowe-dewel-mieszkanie-101-m2-lebork-i-p-ID3JEcQ']
driver = webdriver.Chrome(executable_path=r"C:\Users\Admin\chromedriver.exe")
from multiprocessing import Pool
with Pool(4) as p:
price = p.map(parser_od, url_list)
库同时解析来自我的网址的多个网址:
NameError: name 'driver' is not defined
但是出现以下错误:
{{1}}
这很奇怪,因为打开了铬。
编辑: 在运行此抓取工具时,我需要打开浏览器,以便在并非每次调用此函数之前就打开驱动程序。
答案 0 :(得分:0)
可能只应该将要处理的url列表分成4个相等部分,并为每个处理driver
中相等部分之一的进程分配一个Pool
。
def parser_od(urls, thread_index):
driver = webdriver.Chrome(executable_path=r"C:\Users\Admin\chromedriver.exe")
prices = []
for i in range(len(urls)):
url = urls[i]
if i % 4 == thread_index:
price=[]
url_of = url
driver.get(url_of)
try:
price.append(browser.find_element_by_xpath("//*[@id='root']/article/header/div[2]/div[1]/div[2]").text.replace(" ","").replace("zł","").replace(",","."))
except NoSuchElementException:
price.append("")
prices.append(price)
return prices
from multiprocessing import Pool
with Pool(4) as p:
price = p.map(lambda x: parser_od(x, url_list), list(range(len(url_list))))