В настоящее время я сканирую веб-сайт, который запрещает использование IP-адресов, если он запросил слишком много страниц за короткий промежуток времени.Когда это происходит, это дает 403 status code
в ответе.Если IP-адрес не обновляется, сканер не выполнит все следующие запросы.
Поэтому я добавил HTTP-прокси, это концентратор, на котором размещены сотни IP-адресов, и назначается случайный один для каждого TCP-соединения.
>>> import requests
>>> proxies = {"https": "https://user:pass@proxyservice.com"}
>>> s = requests.Session()
>>>
>>> print("\n persisted connection:")
>>> for i in range(3):
>>> print(s.get("https://ifconfig.co", proxies=proxies).text)
>>>
>>> print("\n new connection every request:")
>>> for i in range(3):
>>> print(requests.get("https://ifconfig.co", proxies=proxies).text)
persisted connection:
123.123.123.123
123.123.123.123
123.123.123.123
new connection every request:
123.111.111.111
123.222.222.222
123.110.110.110
Я работаю со Scrapy в своем проекте, он использует постоянное соединение по умолчанию, что означает, что он будет использовать один и тот же прокси-IP для каждого соединения:
class TestSpider(scrapy.Spider):
name = 'test'
allowed_domains = ['ifconfig.co']
custom_settings = {
"CONCURRENT_REQUESTS": 2
}
def __init__(self):
self.url = "https://ifconfig.co"
self.headers = {"user-agent": "curl"}
self.proxy = "https://user:pass@proxyservice.com"
def start_requests(self):
# We have 2 concurrent requests (persisted connections).
yield Request(url=self.url, headers=self.headers, meta={"proxy": self.proxy}, dont_filter=True)
yield Request(url=self.url, headers=self.headers, meta={"proxy": self.proxy}, dont_filter=True)
def parse(self, response):
self.logger.info(response.text)
yield Request(url=self.url, headers=self.headers, meta={"proxy": self.proxy}, dont_filter=True)
Что дает нам:
2019-06-27 12:13:21 [test] INFO: 181.xx.xx.197
2019-06-27 12:13:21 [test] INFO: 38.xx.xx.199
2019-06-27 12:13:21 [test] INFO: 181.xx.xx.197
2019-06-27 12:13:22 [test] INFO: 38.xx.xx.199
2019-06-27 12:13:22 [test] INFO: 181.xx.xx.197
2019-06-27 12:13:22 [test] INFO: 38.xx.xx.199
2019-06-27 12:13:22 [test] INFO: 181.xx.xx.197
2019-06-27 12:13:23 [test] INFO: 181.xx.xx.197
2019-06-27 12:13:23 [test] INFO: 38.xx.xx.199
2019-06-27 12:13:23 [test] INFO: 181.xx.xx.197
2019-06-27 12:13:24 [test] INFO: 38.xx.xx.199
Как я могу сбросить соединение TCP с прокси-сервером, чтобы я мог получить новый IP-адрес, когда ответ дает 403?