我正在使用Scrapy爬取一个网站。一些页面使用AJAX,所以我获取了AJAX请求来获取实际数据。到目前为止还不错。这些AJAX请求的输出是JSON格式。现在我想解析JSON,但是Scrapy只提供HtmlXPathSelector。是否有人成功地将JSON输出转换为HTML,并能够使用HtmlXPathSelector进行解析?
非常感谢您的帮助。
import json
response = json.loads(jsonResponse)
上述代码将解码您收到的JSON。之后,您应该能够以任何想要的方式处理它。
(将jsonResponse
替换为从ajax请求获取的JSON)
稍微有点复杂,但仍然有效。
如果你对在JSON输出上使用xpath感兴趣...
免责声明:可能不是最佳解决方案。如果有人改进了这种方法,请+1。
安装dicttoxml包(建议使用pip)
-使用scrapy的传统Request模块下载输出
在爬虫中:
from scrapy.selector import XmlXPathSelector
import lxml.etree as etree
request = Request(link, callback=self.parse_resp)
yield request
def parse_resp(self,response):
json=response.body
#Now load the contents using python's JSON module
json_dict = json.loads(json)
#transform the contents into xml using dicttoxml
xml = dicttoxml.dicttoxml(json_dict)
xml = etree.fromstring(xml)
#Apply scrapy's XmlXPathSelector module,and start using xpaths
xml = XmlXPathSelector(text=xml)
data = xml.select(".//*[@id='count']/text()").extract()
return data
我这样做是因为,我将所有蜘蛛的XPath都维护在一个地方(配置文件)。