web-dev-qa-db-ja.com

ScrapyでJSONレスポンスをスクレイピングする

Scrapyを使用して、JSONを返すWebリクエストをスクレイピングするにはどうすればよいですか?たとえば、JSONは次のようになります。

{
    "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"
        }
    ]
}

特定のアイテム(上記のnamefaxなど)をスクレイピングしてcsvに保存しようとしています。

35
Thomas Kingaroy

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

class MySpider(BaseSpider):
    ...


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

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

         return item

お役に立てば幸いです。

56
alecxe

JSONが読み込まれない理由として考えられるのは、前後に単一引用符があるためです。これを試して:

json.loads(response.body_as_unicode().replace("'", '"'))
0
Manoj Sahu