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"
}
]
}
特定のアイテム(上記のname
とfax
など)をスクレイピングしてcsvに保存しようとしています。
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
お役に立てば幸いです。
JSONが読み込まれない理由として考えられるのは、前後に単一引用符があるためです。これを試して:
json.loads(response.body_as_unicode().replace("'", '"'))