• 数据采集: 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直接使用
  • 相关阅读:
    web安全性测试用例
    国内可用的网络时间服务器
    selenium需要的浏览器驱动程序下载
    杂齐杂八
    检查是否网络端口占用问题
    python入到到实战--第十章----文件
    python入到到实战--第九章
    python入到到实战--第八章
    python入到到实战--第七章
    python入到到实战--第六章
  • 原文地址:https://www.cnblogs.com/zlone/p/11108382.html
Copyright © 2020-2023  润新知