scrapy爬虫案例_Scrapy爬虫框架入门(下) Middlewares

本篇文章将还是延续Scrapy爬虫入门篇,案例讲解还是用的之前编写好的测试数据代码。可以翻阅之前文章,也可以后台回复"慕课网爬虫"取测试代码。

言归正传,本次讲解Scrapy两大中间件(download中间件、spider中间件)。大致意思是对请求爬虫前后动作、得到爬虫数据前后进行特殊化处理。

3c347c16394e99929d01065dba6e4e86.png


1、下载器中间件(Downloader Middleware)

下载器中间件是介于Scrapy的request/response处理的钩子框架。是用于全局修改Scrapy request和response的一个轻量、底层的系统。

先来看看它能做什么:

  • 先来看看他们能做什么:

  • 自定义user-agent

  • 设置HTTP代理

  • 处理重定向

  • 设置cookies

  • 失败重试

  • ...

讲案例前先讲解几个下载器的组件方法:

process_request(request, spider)方法会在请求资源之前执行。process_response(request, response, spider)方法会在资源请求完成后执行process_exception(request, exception, spider)当下载处理器或者process_request()抛出异常会调用方法
案例1:自定义User-Agent

网上收集了多个不同引擎的浏览器版本号.

db34bd61a9206335d69d2c328b0f6d99.png

middlewares.py

激活中间件:

DOWNLOADER_MIDDLEWARES = {  'imooc_spider.middlewares.my_useragent': 300,}

setting.py

结果:

# 爬虫类打印headersprint(response.request.headers)# 结果"{b'User-Agent': [b'Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5'], b'Accept': [b'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'], b'Accept-Language': [b'en'], b'Accept-Encoding': [b'gzip, deflate']}"
案例2:设置代理

准备一个可以测试检测访问IP的网站(https://tool.lu/ip/)

3f531560ab22cf082e99f99a9d4230b9.png

https://tool.lu/ip/

编写测试代理的爬虫(spider).

ae8a449ee52e8ac0a7088fc6de2df392.png

test_proxy.py

编写代理中间件代码:

e7adaf9bce610fc0f632d1aba848f942.png

middlewares.py

激活中间件:

DOWNLOADER_MIDDLEWARES = {   'imooc_spider.middlewares.makeUserAgent': 301,   'imooc_spider.middlewares.makeProxy': 300,}

setting.py

结果:

aefc30155c629caaf9cdf6273a4f4c3b.png

2、爬虫中间件(Spider Middleware)

组件方法:

process_spider_input(response, spider)当response通过spider中间件时,该方法被调用process_start_requests(start_requests, spider)当运行到start_requests()的时候,方法被调用process_spider_out(response, result, spider)当运行到yield scrapy.Request()或者yield item的时候,方法被调用process_spider_exception(response, exception, spider)当爬虫本身的代码出现了Exception的时候,方法被调用。

调试:

ed81fa63cf609864ca2d583d68389bc8.png

middlewares.py

SPIDER_MIDDLEWARES = {   'imooc_spider.middlewares.imoocSpiderMiddleware': 300,}

setting.py

结果在分析页面结构前被打印出来,这时候可以做一些异常检测、日志记录等功能。

58b1d70a1e723a0af1e597f940a8d035.png

结语:

Scrapy框架入门讲解已完结。欢迎到本讲解教程上的github一起交流学习。

源码后台回复关键字「慕课网爬虫

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页