Прокси Я бы получил компанию, которая предлагает ротатор, так что вам не придется возиться с этим, однако вы можете написать специальное промежуточное ПО, я покажу вам, как.Что вы хотите сделать, это отредактировать метод запроса процесса.Это можно сделать как для смены прокси-сервера, так и для изменения пользовательского агента.
UserAgents Вы можете использовать промежуточное ПО для произвольного пользовательского агента Scrapy https://github.com/cleocn/scrapy-random-useragent, или так можноизмените все, что вы хотите об объекте запроса, используя промежуточное программное обеспечение, включая прокси или любые другие заголовки.
# middlewares.py
user_agents = ['agent1', 'agent2', 'agent3', 'agent4']
proxies = ['ip1:port1', 'ip2:port2', 'ip3:port3', 'ip4:port4'
# either have your user agents in a file or something this assumes you are able to get them into a list.
class MyMiddleware(object):
@classmethod
def from_crawler(cls, crawler):
# This method is used by Scrapy to create your spiders.
s = cls()
crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
return s
def process_request(self, request, spider):
# Called for each request that goes through the downloader
# middleware.
# Must either:
# - return None: continue processing this request
# - or return a Response object
# - or return a Request object
# - or raise IgnoreRequest: process_exception() methods of
# installed downloader middleware will be called
request.headers['User-Agent'] = random.choice(user_agents) # !! These 2 lines
request.meta['proxy'] = random.choice(proxies) # !! These 2 lines
return None
def process_response(self, request, response, spider):
# Called with the response returned from the downloader.
# Must either;
# - return a Response object
# - return a Request object
# - or raise IgnoreRequest
return response
def process_exception(self, request, exception, spider):
# Called when a download handler or a process_request()
# (from other downloader middleware) raises an exception.
# Must either:
# - return None: continue processing this exception
# - return a Response object: stops process_exception() chain
# - return a Request object: stops process_exception() chain
pass
def spider_opened(self, spider):
spider.logger.info('Spider opened: %s' % spider.name)
# settings.py
DOWNLOADER_MIDDLEWARES = {
'project.middlewares.MyMiddleware': 543,
}
Ссылки: https://docs.scrapy.org/en/latest/topics/request-response.html