Python多线程网页抓取

时间:2016-08-30 21:35:54

标签: python multithreading performance multiprocessing

我有一个简单的web crawler,每秒可以抓取~4个(特定)网站。如果我在两个不同的Python IDE中运行脚本,我可以加倍速度,因为两个程序运行代码每秒约4次爬行。 为什么我的代码运行速度比它可能慢?或者它更快,因为我使用一种愚蠢的方式通过同时使用两个不同的IDE来使我的脚本使用多线程/多处理?

我使用的是Python 3.5.2。

2 个答案:

答案 0 :(得分:0)

对于工作线程池来说,这听起来像是一项伟大的任务。

请参阅:Python: The Multiprocessing Module

答案 1 :(得分:0)

正如评论中所解释的那样,所有这些都与线程有关。

现在您的计划有一个解决方案:

import requests
import threading

class Crawler:
    def __init__(self, url):
        self.url = url
        self.session = requests.Session()

    def crawl(self):
        page = self.session.get(url)
        # Do your crawling here

with open('urls.txt', 'r') as f: # Assuming you use a file with a list of URLs
    for url in f:
        while(threading.active_count() > 20): # Use 20 threads
            time.sleep(0.1)
        c = Crawler(url)
        t = threading.Thread(target = c.crawl())

请注意,threading.active_count()也会计算主线程。

而且,您应该在HTTP请求中使用超时。