我已经用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,
}
要通过中间件发出代理请求,我应该做哪些可能的更改?
您需要检查以下行的日志输出:
[scrapy.middleware] INFO: Enabled downloader middlewares:
以查看活动下载程序中间件的列表。如果中间件处于活动状态,那么它应该在列表中。你知道吗据我所知,
scrapy.contrib
模块的用法现在已被弃用。 Scrapy: No module named 'scrapy.contrib'带有定制中间件的代码几乎可以使用scrapy命令行工具
scrapy crawl proxiedscript
。你知道吗Hovewer如果需要以脚本形式启动scrapy应用程序,则爬虫程序进程需要首先^{} 。
或将
DOWNLOADER_MIDDLEWARES
设置定义为CrawlerProcess
的参数:可能返回
None
而不是Request
?返回Request
将阻止任何其他下载程序中间件运行。你知道吗https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#scrapy.downloadermiddlewares.DownloaderMiddleware.process_request
相关问题 更多 >
编程相关推荐