使用Scrapy从动态JSON响应中提取

时间:2016-07-11 15:39:17

标签: python json web-scraping scrapy web-crawler

我想提取“有用的”字样。来自JSON输出的值如下所示。

point P

问题是typedef值低于{ "result": { "code": 100, "message": "Command Successful" }, "domains": { "yolotaxpayers.com": { "avail": false, "tld": "com", "price": "49.95", "premium": false, "backorder": true } } } ,我无法弄清楚如何获取域名。

你的蜘蛛在下面。第一部分工作正常,但不是第二部分。

['avail']

提前感谢您的回复。

3 个答案:

答案 0 :(得分:1)

目前,它尝试通过"('%s.com' % line)"键获取值。

您需要正确执行字符串格式设置:

domain_name = "%s.com" % line.strip()
item["avail"] = jsonresponse["domains"][domain_name]["avail"]

答案 1 :(得分:0)

假设您只期望每个回复一个结果:

domain_name = list(jsonresponse['domains'].keys())[0]
item["avail"] = jsonresponse["domains"][domain_name]["avail"]

即使文件“test.txt”中的域与结果中的域不匹配,这也会起作用。

答案 2 :(得分:0)

要从json响应中获取域名,您可以使用列表推导,例如:

domain_name = [x for x in jsonresponse.values()[0] .keys()]

要获得“有效”值,请使用相同的方法,例如:

avail = [x [“avail”] for x in jsonresponse.values()[0] .values()if“avail”in x]

以字符串格式获取值,您应该通过索引0调用它,例如:

domain_name [0] avail [0] ,因为列表理解结果存储在列表类型变量中。

More info on list comprehension