Raspando una respuesta JSON con Scrapy

¿Cómo utiliza Scrapy para raspar las solicitudes web que devuelven JSON? Por ejemplo, el JSON se vería así:

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

Estaría buscando raspar elementos específicos (por ejemplo, name y fax en lo anterior) y guardar en csv.

Es lo mismo que usar HtmlXPathSelector de HtmlXPathSelector para las respuestas html. La única diferencia es que debes usar el módulo json para analizar la respuesta:

 class MySpider(BaseSpider): ... def parse(self, response): jsonresponse = json.loads(response.body_as_unicode()) item = MyItem() item["firstName"] = jsonresponse["firstName"] return item 

Espero que ayude.

La posible razón por la que JSON no se está cargando es que tiene comillas simples antes y después. Prueba esto:

 json.loads(response.body_as_unicode().replace("'", '"'))