web-dev-qa-db-fra.com

Scraping d'une réponse JSON avec Scrapy

Comment utilisez-vous Scrapy pour supprimer les requêtes Web qui renvoient JSON? Par exemple, le JSON ressemblerait à ceci:

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

Je chercherais à gratter des éléments spécifiques (par exemple name et fax dans ce qui précède) et à enregistrer sur csv.

35
Thomas Kingaroy

C'est la même chose que d'utiliser HtmlXPathSelector de Scrapy pour les réponses html. La seule différence est que vous devez utiliser le module json pour analyser la réponse:

class MySpider(BaseSpider):
    ...


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

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

         return item

J'espère que cela pourra aider.

56
alecxe

La raison possible pour laquelle JSON ne se charge pas est qu'il a des guillemets simples avant et après. Essaye ça:

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