4

Scrapy を使用して Web サイトをクロールしています。一部のページでは AJAX を使用しているため、実際のデータを取得するために AJAX リクエストを取得しました。ここまでは順調ですね。これらの AJAX 要求の出力は JSON 出力です。ここで JSON を解析したいと思いますが、Scrapy は HtmlXPathSelector を提供するだけです。JSON 出力を HTML に正常に変換し、HtmlXPathSelector で解析できた人はいますか?

事前にどうもありがとうございました

4

2 に答える 2

5
import json

response = json.loads(jsonResponse)

上記のコードは、受け取った json をデコードします。その後、任意の方法で処理できるはずです。

jsonResponse( ajax リクエストから取得した json に置き換えます)

于 2013-04-09T19:20:21.757 に答える
0

少し複雑ですが、それでも機能します。

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 を 1 か所 (config-files) に維持しているためです。

于 2014-10-31T07:26:57.727 に答える