簡體   English   中英

Scrapy使用指定的網卡python 3發送請求

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM