51

如何使用 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。

4

3 回答 3

80

这与使用 Scrapy 的HtmlXPathSelectorhtml 响应相同。唯一的区别是您应该使用json模块来解析响应:

class MySpider(BaseSpider):
    ...


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

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

         return item

希望有帮助。

于 2013-08-11T14:05:14.903 回答
13

不需要使用json模块来解析响应对象。

class MySpider(BaseSpider):
...


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

     item = MyItem()
     item["firstName"] = jsonresponse.get("firstName", "")           

     return item
于 2021-04-06T21:02:55.700 回答
0

JSON 未加载的可能原因是它前后都有单引号。尝试这个:

json.loads(response.body_as_unicode().replace("'", '"'))
于 2015-02-02T12:59:57.803 回答