如何从给定的代理池设置IP代理?

时间:2019-07-02 03:09:41

标签: python scrapy

已为我提供了代理池链接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(而且它们变化很快),所以我不能这样做。

2 个答案:

答案 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),并从中学习。