Scrapy | 通过爬取豆瓣Top250电影信息来学习在中间件中应用随机请求头和代理ip

  • 目标

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()')
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胜天半月子

打不打商的无所谓,能帮到你就好

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值