三木零 发表于 2021-7-17 16:34

scrapy爬虫自定义下载中间件

scrapy的下载中间件我看了教程说:
process_request(self, request, spider)方法返回一个response对象就不会去调用其他下载中间件的组件
可是这个方法都没有response参数我怎么返回一个response对象
找了好久也没有找到答案

但是返回一个None或者不会返回则会去调用process_response(self, request, response, spider)方法
这是源代码:
class IPProxyDownloaderMiddleware(object):
    IP_PROXY = [

    ]

    def process_request(self, request, spider):
      print("调用了请求中间件")
      print(request)
      for i in default_settings.DOWNLOADER_MIDDLEWARES:
            print(i)
      return None

    def process_response(self, request, response, spider):
      print("调用了响应中间件")
      print(response.text)
      return response
运行结果是这样的:
--------------------------------------------------------------------
爬虫开启
调用了请求中间件
<GET http://www.xinfadi.com.cn/marketanalysis/0/list/1037.shtml>
调用了系统的中间件
调用了响应中间件
正在写入第1037页数据
--------------------------------------------------------------------
我怎么让他不去调用系统的中间件呢,或者说这个request方法是满足了什么条件才会去运行当前中间件的response方法
求解{:1_893:}

QingYi. 发表于 2021-7-17 16:49

https://doc.scrapy.org/en/latest/intro/tutorial.html
送你一本秘籍

三木零 发表于 2021-7-17 17:07

QingYi. 发表于 2021-7-17 16:49
https://doc.scrapy.org/en/latest/intro/tutorial.html
送你一本秘籍

我看了有一会了,实在是理解不了明明process_request方法没有这个response参数,他怎么返回一个response对象{:1_924:}

QingYi. 发表于 2021-7-17 17:25

三木零 发表于 2021-7-17 17:07
我看了有一会了,实在是理解不了明明process_request方法没有这个response参数,他怎么返回一个response ...

你吃完苹果是不是会把果核吐出来?处理完请求是不是会把对应的处理完的resp给你?

kk159 发表于 2021-7-17 17:28

重写一下MIDDLEWARES

kk159 发表于 2021-7-17 17:31

QingYi. 发表于 2021-7-17 17:25
你吃完苹果是不是会把果核吐出来?处理完请求是不是会把对应的处理完的resp给你?

我就是不吐,未尝不可;www

三木零 发表于 2021-7-17 20:16

QingYi. 发表于 2021-7-17 17:25
你吃完苹果是不是会把果核吐出来?处理完请求是不是会把对应的处理完的resp给你?

这个倒是知道,就是他文档的那句返回一个response响应就会去处理下一个url请求,他那个返回response响应是指process_response返回的还是,process_request返回的

CCQc 发表于 2021-7-17 21:59

52爬虫,感谢分享

Talrity 发表于 2021-7-17 22:29

感谢分享,爬虫自定义下载
页: [1]
查看完整版本: scrapy爬虫自定义下载中间件