已为我提供了代理池链接http://10.10.5.17:5009/proxy_pool,该链接输出以下内容:
{
"msg": "success",
"list": [
"111.72.193.250:34621",
"114.99.28.7:25995",
"121.234.245.76:35513",
"220.186.155.66:49366",
"117.90.252.72:45037"
],
"data": "114.99.28.7:25995"
}
这些IP每隔几分钟更改一次。我想知道如何在Scrapy中进行设置。
我看过一些教程,展示了如何在settings.py中添加每个IP,然后在middlewares.py中对其进行调用,但是由于我需要从链接中读取IP(而且它们变化很快),所以我不能这样做。
答案 0 :(得分:0)
import json
import random
def start_requests(self):
proxy_request = scrapy.Request(url='http://10.10.5.17:5009/proxy_pool', callback=self.prepare_request)
yield proxy_request
def prepare_request(self, response):
target_url = 'XXX'
proxy_response = json.loads(response.body_as_unicode())
proxy_list = [proxy for proxy in proxy_response['list']]
request = scrapy.Request(url=target_url, meta={'proxy': random.choice(proxy_list)}, callback=self.scrape)
def scrape(self, response):
...
答案 1 :(得分:0)
您必须编写自己的下载器中间件,该中间件负责处理代理列表的初始下载,不时获取新列表以及将当前列表中的随机代理分配给每个请求。
您应该先阅读documentation about downloader middlewares。然后,我建议您找到可以处理代理的现有中间件(例如scrapy-rotating-proxies),并从中学习。