我想使用Scrappy抓取大量網頁。因爲我必須使用代理服務器,並且代理服務器很糟糕,所以在更改IP時浪費了大量時間。我如何使用多線程來加速這一點?抓取大量網頁
(PS:我用HttpProxyMiddleware.py從Redis的數據庫中獲取proxyIP
proxy_config = settings.get("PROXY_CONFIG")
self.r =redis.Redis(host=proxy_config.get('redis_host'),
port=proxy_config.get("redis_port", 6379))
self.ips_key = proxy_config.get('ip_key')
有很多在它的IPS,但他們中的一部分不工作我設置超時時間= 5秒。應,從而改變IPS浪費大量時間的大量操作
因爲scrapy是使用雙絞線,其工作流是
spider.py(生成請求) - > HttpProxyMiddleware.py(添加代理請求,檢查響應看看如果ip正在工作) - > spider.py(parse()process response)
起初,我嘗試使用多線程來加快速度。結果表明所有線程都依賴於同一個定製中間件「HttpProxyMiddleware.py」。據我所知這只是一個類,它不是一個單身人士。我不知道如何實施它。所以我必須創建多個HttpProxyMiddleware,像HttpProxyMiddleware1.py HttpProxyMiddleware2.py ......,並且我還創建了mutilple spider.py作爲spider1.py,spider2.py ......每個蜘蛛使用一個HttpProxyMiddleware相應地。它的工作。但看起來很糟糕。我問谷歌的幫助,我得到的答案是,利用反應器(扭曲),我用它:
from twisted.internet import reactor
reactor.suggestThreadPoolSize(30)
,但它不能正常工作。也許我的用法是錯誤的。所以我的問題是如何使用reactor或多線程方法來加速這一點?
HttpProxyMiddleware.py extends scrapy's downloadmiddleware
class HttpProxyMiddleware(object):{
def process_request(self, request, spider):
#add proxy to request
def process_response(self, request, response, spider):
#check response to decide to change ips or not
}
最後,我是這裏的新手,如果我對問題的描述不清楚,請指出。我會立即糾正它。謝謝,我感謝每一個幫助。
這太寬泛了。這裏你確切的問題是什麼?在這個範圍內有很多答案可以被認爲是有效的時候,你似乎要求採取一種通常的做法。 –
感謝您的建議,我會改正它 – user6847893