硒功能与多处理



我已经编写了基于硒的functin,我希望它同时解析多个网页。我有传递给我想要同时抓取的函数的 url 列表,以节省时间。

我创建了 scraper.py 文件,在其中放置了刮板功能:

def parser_od(url):
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("")

现在我想使用该函数通过multiprocessing库同时从我的 url 中解析多个 url:

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:UsersAdminchromedriver.exe")
from multiprocessing import Pool
with Pool(4) as p:
price = p.map(parser_od, url_list)

但是我收到以下错误:

NameError: name 'driver' is not defined

这很奇怪,因为铬是打开的。

编辑: 我需要在运行此抓取器时打开浏览器,以便在不是每次调用此函数之前打开驱动程序。

只是应该将要处理的 url 列表拆分为 ino 4 相等的部分,并为处理Pool中相等部分的每个进程提供一个driver

def parser_od(urls, thread_index):
driver = webdriver.Chrome(executable_path=r"C:UsersAdminchromedriver.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))))

相关内容

  • 没有找到相关文章

最新更新