zoukankan      html  css  js  c++  java
  • 数据采集: scrapy-redis初始带参数请求

    scrapy-redis官方demo中只有默认的get请求, 但是我们面对的网站多种多样, 有时候起始url就是post请求, 或者业务需要在get请求中加入很多后期要用到的参数, 此时可以重写make_requests_from_url方法来实现.

    以下我会举例向<spider>:start_urls中放入一个json格式任务让爬虫去抓取

    # -*- coding: utf-8 -*-
    
    import json
    import scrapy
    from scrapy_redis.spiders import RedisSpider
    
    
    class MysiteSpider(RedisSpider):
        name = 'mysite'
    
        def make_requests_from_url(self, data: str):
            '''
            data就是放入 mysite:start_urls 中的任务
            :param data: 
            :return: 
            '''
            req_data = json.loads(data)
            url = req_data['url']
            
            # 此处也可以改为post请求
            return scrapy.Request(
                url,
                meta={'req_data': req_data}
            )
    
        def parse(self, response):
            print(response.text)
            print(response.meta)
    
    

    向队列mysite:start_urls放以下任务

    lpush mysite:start_urls '{"url": "http://httpbin.org/ip", "test_key": 123456}'
    

    输出结果如下, 可以看到我们在meta中的参数都在, 同时scrapy附加了其它的参数

    {'req_data': {'url': 'http://httpbin.org/ip', 'test_key': 123456}, 'download_timeout': 180.0, 'download_slot': 'httpbin.org', 'download_latency': 0.3165419101715088}
    

    以上就是一个简单的样例, 我们可以利用该方法解决很多问题, 比如

    • 初始post请求中需要携带参数
    • 初始请求中需要带cookie
    • 带业务字段供pipeline直接使用
  • 相关阅读:
    11月12号实验课
    10月29日实验
    10.15实验课作业
    Idea的使用和设置
    常用的Linux命令
    KAFKA总结
    SpringBoot+Maven+MyBaties+Mysql快速搭建一个项目
    Spring 常见面试
    Windows下安装ZK kafka Mysql dubbo redis
    MySQL常见的面试题
  • 原文地址:https://www.cnblogs.com/zlone/p/11108382.html
Copyright © 2011-2022 走看看