2014-01-09 78 views
4

我有一个网站,我想从中提取数据。数据检索非常简单。HTTP POST和Scrapy解析JSON

它使用HTTP POST参数并返回一个JSON对象。所以,我有一个我想要做的查询列表,然后以特定的时间间隔重复更新数据库。 scrapy适合于此还是应该使用别的东西?

我其实不需要关注链接,但我确实需要同时发送多个请求。

回答

6

看起来像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) 

希望这有助于!

+0

我知道如何处理的JSON响应,但不scrapy需要设置start_urls和规则来设置我的回调? – Crypto

0

基于我对这个问题的理解,你只是想以特定的时间间隔从网页抓取/抓取数据。 Scrapy通常用于爬行。

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

+0

我希望它同时获取多个数据点,然后等待一段时间再继续。这就是为什么我认为我会使用scrapy,因为它支持。如果我使用请求模块,那么我必须一次完成一个请求。 – Crypto

+0

你的意思是什么?像线程一样? – Harry

+0

我的意思是异步。 – Crypto