2016-09-06 96 views
0

我只想知道如何在網站向我發送json響應而不是html時發送規則?在開始url第一個響應,它給了我一個html響應,但是當我瀏覽頁面時,它給了我json響應。這裏我的規則:Scrapy Json規則SgmlLink提取器

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), 

我的問題是,我怎麼能應用xpath的json響應?

謝謝

+0

你應該使用'scrapy.linkextractors.Linkextractor'因爲'SgmlLinkExtractor'已經被廢棄了有一段時間了。這兩者本質上是相同的。 – Granitosaurus

+0

謝謝你:) – Rocky

回答

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'] 
    # ... 

或者你可以CONVER 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()") 
    # ... 
+0

謝謝,但我正在尋找規則的解決方案,而不是解析階段 – Rocky

+0

@Reymark你不能在json源代碼上使用'restrict_xpath'而不擴展CrawlSpider的工作方式。雖然簡單的方法,但會做手動,如我在我的答案中所述。只需在你的LinkExtractor中有'parse'回調,並檢查頁面是否在開始時是json,如果是這樣,找到json網址,否則繼續正常。 – Granitosaurus