请求未通过中间件代理

问题描述 投票:1回答:2

我已经在scrapy中编写了一个脚本,以便通过自定义中间件传递请求,以便代理该请求。但是,该脚本似乎没有任何中间件的影响。当我打印response.meta时,我得到{'download_timeout': 180.0, 'download_slot': 'httpbin.org', 'download_latency': 0.9680554866790771},这清楚地表明我的请求没有通过自定义中间件。我用CrawlerProcess来运行脚本。

spider包含:

import scrapy
from scrapy.crawler import CrawlerProcess

class ProxySpider(scrapy.Spider):
    name = "proxiedscript"
    start_urls = ["https://httpbin.org/ip"]

    def parse(self,response):
        print(response.meta)
        print(response.text)

if __name__ == "__main__":
    c = CrawlerProcess({'USER_AGENT':'Mozilla/5.0'})
    c.crawl(ProxySpider)
    c.start()

middleware包含:

class ProxiesMiddleware(object):
    def process_request(self, request, spider):
        request.meta['proxy'] = 'http://206.189.25.70:3128'
        return request

改变我在settings.py做的:

DOWNLOADER_MIDDLEWARES = {
    'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 110,
    'proxyspider.middleware.ProxiesMiddleware': 100,
}

下图显示了项目层次结构:enter image description here

我应该通过中间件做出哪些可能的变更代理请求?

python python-3.x web-scraping scrapy
2个回答
1
投票

您需要检查此行的日志输出:[scrapy.middleware] INFO: Enabled downloader middlewares:以获取活动的下载中间件列表。如果中间件处于活动状态,则应该在列表中。

据我记得,现在已弃用scrapy.contrib模块。 Scrapy: No module named 'scrapy.contrib'

您的自定义中间件代码几乎可以使用scrapy命令行工具了 scrapy crawl proxiedscript

Hovewer如果需要将scrapy应用程序作为脚本启动,您的爬虫程序首先需要read_projects_settings。 或者将DOWNLOADER_MIDDLEWARES设置定义为CrawlerProcess的参数:

c = CrawlerProcess({
    'USER_AGENT':'Mozilla/5.0',
    'DOWNLOADER_MIDDLEWARES':{
        #'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 110,#deprecated in scrapy 1.6
        'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware':110, #enabled by default
        'proxyspider.middleware.ProxiesMiddleware': 100, 
                              },
    })

1
投票

或许返回None而不是Request?返回Request可防止任何其他下载程序中间件运行。

https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#scrapy.downloadermiddlewares.DownloaderMiddleware.process_request

© www.soinside.com 2019 - 2024. All rights reserved.