Scrapy Json Rule SgmlLink Extractor

时间:2016-09-06 03:46:22

标签: python json scrapy web-crawler sgml

我只是想知道当网站向我发送json响应而不是html时如何制定规则?在开始url第一个响应时,它给了我一个html响应,但是当我浏览页面时,它给了我json响应。我的规则在这里:

 Rule(SgmlLinkExtractor(restrict_xpaths=('//div[@class="GridTimeline-items"]'), tags=('div'),
                                   attrs=('data-min-position'), allow=(r''), process_value=my_process_value_friends),
                                    callback='parse_friends', follow=True),

我的问题是,如何在json响应中应用xpath?

谢谢,

1 个答案:

答案 0 :(得分:0)

您无法使用xpath或css选择器解析json。然而,您可以将json转换为python字典:

import json
def parse(self, response):
    data = json.loads(response.body)
    # then just parse it, e.g.
    item = dict()
    item['name'] = data['name']
    # ...

或者你可以将json转换为xml,然后用scrapy选择器解析它。有很多软件包可以做到这一点但我会在我的示例中突出显示dicttoxml

import json
from dicttoxml import dicttoxml
from scrapy import Selector
def parse(self, response):
    data = json.loads(response.body)
    data_xml = dicttoxml(data)
    sel = Selector(root=data_xml)
    # then parse it
    item = dict()
    item['name'] = sel.xpath("//name/text()")
    # ...