大多数时候,我必须抓取的网页数量都在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()
另一件我不清楚的事情是如何在线程中使用参数。在
可能最简单的方法是使用}模块。在
ThreadPool
来自multiprocessing.pool模块,或者如果您使用的是python3 ThreadPoolExecutor来自{ThreadPool
具有(几乎)与常规的Pool相同的api,但使用线程而不是进程。在例如
对于
ThreadPoolExecutor
,请检查example。在相关问题 更多 >
编程相关推荐