Scrapy框架-Spider Middleware的使用

spider的运行流程

  • 定义爬取网站的动作
  • 分析爬取下来的网页

爬取循环过程

  • 以初始的URL初始呼哈Request,并设置回调函数
  • 在回调函数内分析返回的网页内容 1
  • 根据返回结果,进行不同处理 2

Downloader Middleware的用法

Downloader Middleware在整个架构中起作用的位置是两个。
1.在Scheduler调度出队列的Request发送给Downloader下载之前
2.在下载后生成的Response发送给Spider之前,也就是可以在生成Response被Spider解析之前对其进行修改

Downloader Middleware的核心方法

  • process_request(request,spider):参数request,spider
  • process_response(request,response,spider):参数request,response,spider
  • process_exception(request,exception,spider)
    只需要实现至少一个方法,就可以定义一个Downloader Middleware

Downloader Middleware实例

新建项目在这里插入图片描述
新建Spider
在这里插入图片描述
修改Spider httpbin.py
在这里插入图片描述

修改请求时的User-Agent可以通过Downloder Middleware实现一个随机User-Agent的设置
在middlewares.py里面添加一个RandomUserAgentMiddleware的类

class RandomUserAgentMiddleware():
    def __init__(self):
        self.user_agents=[
            'Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)',
            'Mozilla/5.0 (windows NT 6.1) AppleWebKit/537.2 (KHTML,like Gecko) Chrome/22.0.1216.0 Safari/537.2',
            'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0.1'
        ]
    def process_request(self,request,spider):
        request.headers['User-Agent']=random.choice(self.user_agents)

Spider Middleware的用法

  • 在Response发送给Spider之前对Response进行处理

  • 在Request发送给Scheduler之前对Request进行处理

  • 在Item发送给Item Pipeline之前对Item进行处理
    核心方法

  • process_spider_input(response,spider):当Response被Spider Middleware处理时 3

  • process_spider_output(response,result,spider):当Spiderchuli Response返回结果时必须返回包含Request或Item对象的可迭代对象 4

  • process_spider_exception(response, exception,spider): 当Spider或Spider Middleware的process_spider_input()方法抛出异常时,必须没么返回None,要么返回一个包含Response或Item对象的可迭代对象5

  • process_start_requests(start_requests,spider):以Spider启动的Request为参数被调用,执行的过程类似于process_spider_output(),他没有相关联的Response,并且必须返回Request 6
    只需要实现其中一个方法就可以定义一个Spider Middleware


  1. 一种返回结果经处理后保存,一种解析得到下一个链接,可以利用此链接构造Request并设置新的回调函数 ↩︎

    1. 返回字典或Item对象,可通过Feed Exports等组件将返回结果存入文件,如果有pipeline就用它处理 2.返回Request,执行后得到response被传递给Request中定义的回调函数,在回调函数中
    ↩︎
  2. 包含两个参数:response,spider ↩︎

  3. 包含三个参数:response,result,spider ↩︎

  4. 包含三个参数:response,exception,spider ↩︎

  5. 包含两个参数:start_requests,是包含Request的可迭代对象。spider ↩︎

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值