使用Scrapy解析JSON和HTTP POST请求

4

我有一个网站,想要从中提取数据。数据检索非常简单。

它使用HTTP POST获取参数并返回JSON对象。因此,我有一系列查询要执行,然后在特定时间间隔内重复执行以更新数据库。Scrapy适合这种需求吗?还是应该使用其他工具?

实际上,我不需要遵循链接,但我确实需要同时发送多个请求。

3个回答

8
POST请求是什么样子的?有很多变化,例如简单的查询参数(?a=1&b=2),类似表单的负载(主体包含a=1&b=2),或任何其他类型的负载(主体包含某种格式的字符串,如json或xml)。
在scrapy中,制作POST请求非常简单,请参见:http://doc.scrapy.org/en/latest/topics/request-response.html#request-usage-examples 例如,您可能需要像这样的内容:
    # Warning: take care of the undefined variables and modules!

    def start_requests(self):
        payload = {"a": 1, "b": 2}
        yield Request(url, self.parse_data, method="POST", body=urllib.urlencode(payload))

    def parse_data(self, response):
        # do stuff with data...
        data = json.loads(response.body)

0

对于处理请求和获取响应,Scrapy已经足够了。而要解析JSON,只需使用标准库中的json模块:

import json

data = ...
json_data = json.loads(data)

希望这能帮到你!


我知道如何处理JSON响应,但是Scrapy需要设置start_urls和rules以便设置我的回调函数吗? - Crypto

0

根据我对问题的理解,您只是想在特定时间间隔内从网页中提取/抓取数据。Scrapy通常用于爬行。

如果您只想进行http post请求,可以考虑使用python requests库。


我希望它可以同时获取多个数据点,然后在继续之前等待一定的时间间隔。这就是为什么我想使用scrapy,因为它支持这种操作。如果我使用requests模块,那么我将不得不一个一个地处理它们。 - Crypto
我指的是异步执行。 - Crypto
我在思考是否可以从CrawlSpider类中设置Requests。 - Crypto
我还不确定为什么你需要使用 scrapy。它用于爬取网络图并抓取内容,但你似乎没有这样做。可以使用 grequests 库进行异步请求。也可以查看 这个 问题。 - Harry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接