Я копаю в поисках решения и обнаружил, что сама scrapy предоставляет атрибут мета bindaddress
запросов, чтобы указать адрес, через который выполняется привязка.
Но, похоже, документация scrapy не показываеткак его использовать, но я предложил промежуточное ПО для загрузки, которое модифицирует запрос и решает мою проблему, и я назвал его BindAddressMiddleware
.
Что делает промежуточное ПО? Используются настройки
IS_MORE_NETWORK_CARDS = True
определенная сетевая карта будет использоваться, если False
, тогда она не будет
BIND_ADDRESS = 127.0.0.1
IP-адрес используемой сетевой карты
useзагружаемое промежуточное ПО для проекта scrapy в settings.py
DOWNLOADER_MIDDLEWARES = {
# Bindaddress
'scrapers22.middlewares.BindAddressMiddleware': 400,
}
промежуточное ПО BindAddressMiddleware
class BindAddressMiddleware(object):
def __init__(self, settings):
self.is_bindaddress = settings.get('IS_MORE_NETWORK_CARDS')
if self.is_bindaddress:
self.bindaddress = settings.get('BIND_ADDRESS')
@classmethod
def from_crawler(cls, crawler):
return cls(crawler.settings)
def process_request(self, request, spider):
if self.is_bindaddress:
if self.bindaddress:
request.meta['bindaddress'] = (self.bindaddress, 0)
return None
def spider_opened(self, spider):
spider.logger.info('Using: %s as bindaddress' % self.bindaddress)