如何获取scrapyrt的POST元数据?

问题描述 投票:0回答:2

在scrapyrt的POST文档中,我们可以传递这样的JSON请求,但是如何访问start_requests中的类别和项目等元数据?

{
     "request": {
         "meta": {
            "category": "some category",
            "item": {
                "discovery_item_id": "999"
            }
        },
        , "start_requests": true
    },
    "spider_name": "target.com_products"
}

参考:https://scrapyrt.readthedocs.io/en/latest/api.html#id1

python scrapy web-crawler
2个回答
4
投票

scrapyRT 中有一个未合并的 PR,添加了在 POST 请求中传递额外参数的支持。

1)修补 scrapyrt 文件夹中的 resources.py 文件。 就我而言是 /usr/local/lib/python3.5/dist-packages/scrapyrt/resources.py

替换为以下代码:https://github.com/gdelfresno/scrapyrt/commit/ee3be051ea647358a6bb297632d1ea277a6c02f8

2)现在你的蜘蛛可以通过 self.param1 访问新参数

ScrapyRT 卷曲示例:

curl -XPOST -d '{
"spider_name":"quotes",
"start_requests": true,
"param1":"ok"}' "http://localhost:9080/crawl.json"

在你的蜘蛛中

def parse(self, response):
    print(self.param1)

问候


0
投票

要在使用 scrapyrt 的 POST 方法时访问 start_requests 方法中的类别等数据,可以使用“crawl_args”属性,如下所示:

import requests

body = {
    "spider_name": "spider_name",
    "start_requests": True,
    "crawl_args": {
        "category": "some category",
    }
}
data = requests.post("http://localhost:9080/crawl.json", json=body)

现在访问蜘蛛中的“类别”键,

class MySpider(scrapy.Spider):
    name = "spider_name"
    allowed_domains = ["*"]

    def start_requests(self):
        print(self.category)
        yield scrapy.Request(url=f"ww.example.com?cat={self.category}", callback=self.parse)
© www.soinside.com 2019 - 2024. All rights reserved.