`scrapy redis make_requests_from_url`方法來實現. 以下我會舉例向 中放入一個json格式任務讓爬蟲去抓取 向隊列 放以下任務 輸出結果如下, 可以看到我們在meta中的參數都在, 同時scrapy附加了其它的參數 以上就是一個簡單的樣例, 我們可以利用該方法解決 ...
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直接使用