我想从我查询的RESTful API获取JSON响应。我把网址,但我得到的是一个HTML响应,而不是JSON。如果我能够直接获得JSON响应,而不必解析所有的HTML,那将会很好。有没有办法做到这一点?Python Scrapy - 尝试从RESTful API获取JSON响应
注意:当我将URL放入浏览器时,它会以漂亮的可折叠格式为我提供带有JSON数据的HTML网站。当我使用Python请求模块发送GET请求时,它给了我JSON数据。我如何在Scrapy中实现同样的功能?
我想从我查询的RESTful API获取JSON响应。我把网址,但我得到的是一个HTML响应,而不是JSON。如果我能够直接获得JSON响应,而不必解析所有的HTML,那将会很好。有没有办法做到这一点?Python Scrapy - 尝试从RESTful API获取JSON响应
注意:当我将URL放入浏览器时,它会以漂亮的可折叠格式为我提供带有JSON数据的HTML网站。当我使用Python请求模块发送GET请求时,它给了我JSON数据。我如何在Scrapy中实现同样的功能?
在浏览器中打开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格式的字符串,并从此处继续。