[英]Scrapy sends an request using the specified network card python 3
我创建了一个scrapy项目,它运行良好,我希望它可以托管在服务器上以每天运行,并且可以正常运行,但是我的服务器有两个网卡,其中一个专门为scrapy添加,仍然可以正常工作,但是我想仅将一张网卡用于scrapy或python,我可以指定此网卡Python或Scrapy可以使用。
伺服器:Windows 10
的Python:3.6
cra草:1.5
我一直在寻找解决方案,发现此Python使用 Internet上的指定网卡发送了HTTP请求 ,但实际上,我不知道如何使用它。
请帮助我解决此解决方案,例如将Network Card分配给python或将Network card分配给scrapy用于请求网站的套接字或核心库。
我深挖的解决方案,我发现scrapy本身提供的请求元bindaddress
属性来指定地址,通过绑定过程完成。
但是似乎草率的文档没有显示如何使用它,但是我想出了一个下载中间件,该中间件可以修改请求并解决我的问题,因此我将其称为BindAddressMiddleware
。
中间件做什么? 它使用设置
IS_MORE_NETWORK_CARDS = True
,如果为False
则使用特定的网卡,否则不会使用
BIND_ADDRESS = 127.0.0.1
要使用的网卡的IP
在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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.