簡體   English   中英

使用Selenium和Multiprocessing進行Python Web抓取

[英]Python web scraper by using Selenium and Multiprocessing

我有以下功能。它以鏈接作為參數,並在最后給出我需要的數據(base_list)

def extract_BS(link):

    base_list = []

    try:

        browser = webdriver.Firefox()
        browser.get(link)                   
        print('Processing..' + link)

        respData = browser.page_source
        soup = bs.BeautifulSoup(respData, 'html.parser')
        browser.quit()
        shipping_options = soup.find("div", class_ = "modal_shipping_con").find_all("input", class_="inputChangePrice")
        base_list.append(shipping_options)

    except Exception as e:
        print(urls)
        print('Exception:',e)
        pass

    return base_list

但是,我的網址列表大約為1000,因此單獨進行處理會花費太長時間。 我發現了這個有關多處理的博客 ,我正在嘗試對其進行調整

我使用多線程的其他代碼如下

with Pool(4) as p:
    records = p.map(extract_BS,urls)

p.terminate()
p.join()

但是,當我運行它時,出現以下錯誤。

MaybeEncodingError: Error sending result:
Reason: 'RecursionError('maximum recursion depth exceeded in       comparison',)'

當我運行腳本時,會彈出4個窗口,而網絡爬蟲會執行此操作,但問題似乎出在“ records = p.map(extract_BS,urls)”。 我的函數輸出一個列表,我想將其存儲在“結果”中,但是由於某種原因,它不起作用。

任何建議/幫助/觀察非常感謝,謝謝

您需要放置

if __name__ == "__main__":

之前使用Pool(4)作為p來防止在每個池中創建一個導致遞歸錯誤的池。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM