首页 > 其他分享 >Scrapy(三) - Spider Middlerware 使用

Scrapy(三) - Spider Middlerware 使用

时间:2022-12-16 21:44:59浏览次数:40  
标签:process url Middlerware Spider spider start Scrapy requests response

目录

process_start_requests

spider:

import scrapy
from scrapy import Request

from scrapyspidermiddlerwaredemo.items import DemoItem


class HttpbinSpider(scrapy.Spider):
    name = 'httpbin'
    allowed_domains = ['www.httpbin.org']
    start_url = 'https://www.httpbin.org/get'


    def start_requests(self):
        for i in range(5):
            url = f'{self.start_url}?query={i}'
            yield Request(url, callback=self.parse)

    def parse(self, response):
        print(response.text)

process_start_requests: 请求spider的初始请求

class CustomizeMiddlerware(object):
    def process_start_requests(self, start_requests, spider):
        '''
        处理start_url
        :param start_requests:
        :param spider:
        :return:
        '''
        for request in start_requests:
            url = request.url
            url += '&name=tom'
            request = request.replace(url=url)
            yield request

输出结果:可以看到请求的url 已被修改

process_spider_input

HttpbinSpider - parse() 方法:

    def parse(self, response):
        print(f'response status:{response.status}')
        print(response.text)

CustomizeMiddlerware - process_start_requests

class CustomizeMiddlerware(object):
    def process_start_requests(self, start_requests, spider):
        '''
        处理spider 开始时的request
        :param start_requests:
        :param spider:
        :return:
        '''
        for request in start_requests:
            url = request.url
            url += '&name=tom'
            request = request.replace(url=url)
            yield request

    def process_spider_input(self, response, spider):
        '''
        处理 Response,修改响应码
        :return:
        '''
        response.status = 201

输出结果:可以看到响应状态码已被修改

process_spider_output

parse:

    def parse(self, response):
        print(f'response status:{response.status}')
        item = DemoItem(**response.json())
        yield item

CustomizeMiddlerware - process_spider_output:

class CustomizeMiddlerware(object):
    def process_spider_output(self, response, result, spider):
        '''
        处理Item对象
        :param response:
        :param result:
        :param spider:
        :return:
        '''
        for i in result:
            if isinstance(i, DemoItem):
                i['origin'] = None
                yield i

输出结果:

标签:process,url,Middlerware,Spider,spider,start,Scrapy,requests,response
From: https://www.cnblogs.com/czzz/p/16988344.html

相关文章

  • scrapy 常用代码
    Spiderspider中setting配置的获取self.settings.get('QLPQMS')#不能__init__中获取setting配置,setting配置要大写字母请求与响应之间通过meta传参yieldscrapy.ht......
  • 简述安装scrapy的方法
    今天照着别个的方法安装了下scrapy,把主要步骤记录在这里,方便日后再次安装!1.首先保证已经安装python2.X,我安装的是2.72.easy_install工具安装:下载:http://pypi.python.org/pac......
  • HTML Agility Pack 搭配 ScrapySharp,彻底解除Html解析的痛苦
    自从Web应用程序自1993年W3C设立以来就开始发展,而且HTML也历经了数个版本的演化(1.0–2.0–3.0–3.2–4.0–4.01),现在也已经成为Web网页或应用程序的最基础......
  • Scrapy(二) Downloader Middleware 的使用
    实战修改请求的User-Agent有两种方法:方法一:直接在settings.py中加入USER_AGENT的配置,如USER_AGENT='scrapyhttpbindemo(+http://www.yourdomain.com)'方法二:......
  • SEO知识:最新的百度蜘蛛baiduSpider IP大全(持续更新......)
    1.百度UA标记:移动UA:Mozilla/5.0(Linux;u;Android4.2.2;zh-cn;)AppleWebKit/534.46(KHTML,likeGecko)Version/5.1MobileSafari/10600.6.3(compatible;Baiduspide......
  • Scrapy入门使用
    1.scrapy入门使用学习目标:掌握scrapy的安装应用创建scrapy的项目应用创建scrapy爬虫应用运行scrapy爬虫应用scrapy定位以及提取数据或属性值的方法掌握respo......
  • pyspider爬虫
    安装https://www.bilibili.com/video/BV1vW411T7qD/?spm_id_from=333.337.search-card.all.clickpyspiderphantomjs解决启动pyspider时的cannotimportname'Curl**......
  • Scrapy 模块
    Scrapy模块目录Scrapy模块1Scrapy简介1.1安装1.2Scrapy全局命令1.3Scrapy项目命令2Scrapy操作2.1创建项目操作2.2配置项目文件1.4数据解析1.5持久化存储3......
  • scrapy补充与Flask快速使用
    加代理,cookie,header,加入selenium加代理1.在爬虫中间件中(middlewares.py)classCnblogsDownloaderMiddleware:defget_proxy(self):importrequests......
  • 【爬虫】加代理,cookie,header,selenium去重,scrapy-redis实现分布式爬虫
    目录1.加代理,cookie,header,加入selenium1.1加代理1.2加cookie,修改请求头,随机生成UserAgent1.3集成selenium2.去重规则源码分析(布隆过滤器)3.scrapy-redis实现分布式爬......