如何使用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。
答案 0 :(得分:49)
与使用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
希望有所帮助。
答案 1 :(得分:6)
不需要使用json
模块来解析响应对象。
class MySpider(BaseSpider):
...
def parse(self, response):
jsonresponse = response.json()
item = MyItem()
item["firstName"] = jsonresponse.get("firstName", "")
return item
答案 2 :(得分:0)
JSON未加载的可能原因是它之前和之后都有单引号。试试这个:
json.loads(response.body_as_unicode().replace("'", '"'))