中间件的使用
- 目标
1.应用scrapy中使用间件使用随机UA的方法
2.应用scrapy中使用代理ip的的方法
3.应用scrapy.与selenium配合使用
1.scrapyl中间件的分类和作用
1.1 scrapy中间件的分类
根据scrapyi运行流程中所在位置不同分为:
1.下载中间件
2.爬虫中间件
1.2 scrapy中间的作用:预处理request和response对象
1.对header以及cookie进行更换和处理
2.使用代理ip等
3.对请求进行定制化操作,
但在scrapy默认的情况下两种中间件都在middlewares.py一个文件中
爬虫中间件使用方法和下载中间件相同,且功能重复,通常使用下载中间件
2.下载中间件的使用方法:
接下来我们对腾讯招聘爬虫进行修改完善,通过下载中间件来学习如何使用中间件编写一个 Downloader Middlewares和我们编写一个pipeline一样,定义一个类,然后在setting中开启
1.在middlerware.py中定义中间件类
2.在中间件类中,重写处理清求或者响应的方法
3.在settings文件中开启中间件的使用
Downloader Middlewares默认的方法:
process_request(self,request,spider):
1.当每个requesti通过下载中间件时,该方法被调用。
2.返回None值:没有return也是返回None,该request对象传递给下载器,或通过引擎传递给其他权重低的process,_request方法
3.返回Response对象:不再请求,把response返回给引繁
4.返回Request对象:把request对象通过引擎交给调度器,此时将不通过其他权重低的process_request方法
protess_response(self,request,response,spider):
1.当下载器完成http请求,传递响应给引擎的时候调用
2.返回Resposne:通过引擎交给爬虫处理或交给权重更低的其他下载中间件的process_response方法
3.返回Request对象:通过引擎交给调取器继续请求,此时将不通过其他权重低的process_request方法
在settings.py中配置开启中间件,权重值越小越优先执行
3.定义实现随机User-Agent的下载中间件
3.1 实战:爬取豆瓣Top250电影信息
- 网页分析
- 代码
记得在settings.py设置User-Agent和ROBOTSTXT_OBEY,否则会报403错误
# items.py
# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html
import scrapy
class DoubanItem(scrapy.Item):
# define the fields for your item here like:
name = scrapy.Field()
info = scrapy.Field()
score = scrapy.Field()
desc = scrapy.Field()
pass
import scrapy
from douban.items import DoubanItem
class MovieSpider(scrapy.Spider):
name = 'movie'
allowed_domains = ['douban.com']
start_urls = ['https://movie.douban.com/top250']
def parse(self, response):
node_list = response.xpath('//div[@class="info"]')
# print(len(node_list))
for node in node_list:
item = DoubanItem()
item['name'] = node.xpath('./div[1]/a/span[1]/text()').get()
item['info'] = node.xpath('./div[@class="bd"]/p[1]/text()')