具有多处理功能的硒功能

时间:2019-09-03 11:00:15

标签: python selenium multiprocessing

我写了基于硒的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}}

这很奇怪,因为打开了铬。

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

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))))