數據采集: 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直接使用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM