2013-08-11 9 views
23

Scrapyを使用してJSONを返すWebリクエストをスクラップするにはどうすればよいですか?たとえば、JSONは次のようになります。私は、特定の項目(上記で例えばnamefax)をこすりおよびCSVに保存するために探していることになるJSONレスポンスをScrapingする

{ 
    "firstName": "John", 
    "lastName": "Smith", 
    "age": 25, 
    "address": { 
     "streetAddress": "21 2nd Street", 
     "city": "New York", 
     "state": "NY", 
     "postalCode": "10021" 
    }, 
    "phoneNumber": [ 
     { 
      "type": "home", 
      "number": "212 555-1234" 
     }, 
     { 
      "type": "fax", 
      "number": "646 555-4567" 
     } 
    ] 
} 

答えて

39

html応答にScrapyのHtmlXPathSelectorを使用した場合と同じです。唯一の違いは、あなたが応答を解析するためにjsonモジュールを使用する必要があるということです。

class MySpider(BaseSpider): 
    ... 


    def parse(self, response): 
     jsonresponse = json.loads(response.body_as_unicode()) 

     item = MyItem() 
     item["firstName"] = jsonresponse["firstName"]    

     return item 

お役に立てば幸いです。

+5

:これを試してみてください。 –

+1

皆さん、今、あなたはjsonレスポンスを解析しました。 jsonに潜在的に存在する各リンクをどのように追跡しますか? – Cmag

+3

@Cmagあなたは 'Request'を返すか' yield'する必要があります。詳細はこちら[here](http://doc.scrapy.org/en/latest/topics/request-response.html#passing-追加のデータからコールバックへの関数)。 – alecxe

0

JSONがロードされていない可能性があるのは、前と後に一重引用符があることです。 ``負荷としてstr`または `unicode`オブジェクトではなく、scrapy応答を必要としますが、` json.loads(response.body_as_unicodeを())を使用することをお勧めします

json.loads(response.body_as_unicode().replace("'", '"'))