2017-05-05 114 views
0

我想从我查询的RESTful API获取JSON响应。我把网址,但我得到的是一个HTML响应,而不是JSON。如果我能够直接获得JSON响应,而不必解析所有的HTML,那将会很好。有没有办法做到这一点?Python Scrapy - 尝试从RESTful API获取JSON响应

注意:当我将URL放入浏览器时,它会以漂亮的可折叠格式为我提供带有JSON数据的HTML网站。当我使用Python请求模块发送GET请求时,它给了我JSON数据。我如何在Scrapy中实现同样的功能?

回答

0

在浏览器中打开JSON文件,右键单击它并选择“检查”。看看哪些标签包含它;它可以直接在<body>或其他标签中。

我们假设它在<script>标记中;这里是代码。 (这将有助于多,如果你寄给我们的样品页。)

import ast 

# Scrapy code here 

text = response.xpath('//script/text()').extract_first() 
text = text.strip() 
text = ast.literal_eval(text) 

value = text.get("key") 

1-提取<script>标签(或任何标记括起来)之间的JSON的一部分。

2-使用钢带去除多余的空间。

3-使用ast.literal_eval将unicode转换为字典。

4-使用get(key)提取您想要从字典中提取的内容。

注意:您可以将几个步骤合并为一个,但为了解释目的我将它们分开。

这里我使用了常规字典get(),但是如果要使用json库,则必须先导入它,然后使用dumps()函数从字典创建一个JSON格式的字符串,并从此处继续。