簡體   English   中英

如何在Python中使用線程分析多個網頁?

[英]How can I use threading to parse multiple webpages in Python?

在大多數情況下,我必須抓取的網頁數量都在100以下,因此使用for循環可以在合理的時間內解析它們。 但是現在我必須解析1000多個網頁。

在尋找一種實現方法時,我發現線程化可能會有所幫助。 我已經看過並閱讀了一些教程,我相信我已經理解了一般的邏輯。

我知道如果我有100個網頁,則可以創建100個線程。 不建議使用此方法,尤其是對於大量網頁而言。 我還沒有真正弄清楚的是例如如何創建5個線程,每個線程有200個網頁。

以下是使用線程和Selenium的簡單代碼示例:

import threading
from selenium import webdriver

def parse_page(page_url):
   driver = webdriver.PhantomJS()
   driver.get(url)
   text = driver.page_source
   ..........
   return parsed_items

def threader():
   worker = q.get()
   parse_page(page_url)
   q.task_one()

urls = [.......]
q = Queue()

for x in range(len(urls)):
    t = threading.Thread(target=threader)
    t.daemon = True
    t.start()

for worker in range(20):
    q.put(worker)

q.join()

上面代碼示例中顯示的另一件事我不清楚,那就是我如何在線程中使用參數。

可能最簡單的方法是使用來自multiprocessing.pool模塊的ThreadPool ,或者如果您使用concurrent.futures模塊的python3 ThreadPoolExecutor

ThreadPool具有(幾乎)與常規Pool相同的api,但是使用線程而不是進程。

例如

def f(i):
    return i * i

from multiprocessing.pool import ThreadPool
pool = ThreadPool(processes=10)
res = pool.map(f, [2, 3, 4, 5])
print(res)
[4, 9, 16, 25]

對於ThreadPoolExecutor請檢查此示例

暫無
暫無

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

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