數據採集: scrapy-redis初始帶參數請求

scrapy-redis官方demo中只有默認的get請求, 可是咱們面對的網站多種多樣, 有時候起始url就是post請求, 或者業務須要在get請求中加入不少後期要用到的參數, 此時能夠重寫make_requests_from_url方法來實現.python

如下我會舉例向<spider>:start_urls中放入一個json格式任務讓爬蟲去抓取redis

# -*- 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放如下任務json

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

輸出結果以下, 能夠看到咱們在meta中的參數都在, 同時scrapy附加了其它的參數cookie

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

以上就是一個簡單的樣例, 咱們能夠利用該方法解決不少問題, 好比scrapy

  • 初始post請求中須要攜帶參數
  • 初始請求中須要帶cookie
  • 帶業務字段供pipeline直接使用

相關文章
相關標籤/搜索