Получить POST-запрос json данных с помощью Scrapy (Python3) - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь почистить агентства с этого сайта: https://www.generali.it/. В основном меня интересуют данные о широте и долготе каждого агентства во всей Италии.

Набрав почтовый индекс (например, 00144) и просмотрев Firefox Инструменты разработчика, на вкладке Сеть я заметил, что Запрос POST отправляется, и ответ содержит все данные json для агентств, которые появляются (64 записи после примера).

Я новичок в скрапе и, когда я прошу паука сканировать URL запроса, я получаю 400 ответ и никаких данных. Кто-нибудь может указать: что я делаю не так? Как мой код может работать? Laslty, будет ли код получать только данные для почтового индекса, который я набрал, или он получит все данные для всех агентств в Италии?

Спасибо заранее.

Мой код следующий:

import scrapy
import json

class scrapyHeaderSpider(scrapy.Spider):
    name = 'scrapy_genRCA_header'


    def start_requests(self):
        url = "https://www.generali.it/api/AgenzieApi/RicercaAgenzieByPosizione?bustCache=1580717480992"

        headers =  {
            'Host': 'www.generali.it',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36',
            'Accept': 'application/json, text/plain, */*',
            'Accept-Encoding': 'gzip, deflate, br',
            'Accept-Language': 'it-IT,it;q=0.8,en-US;q=0.5,en;q=0.3',
            'content-type': 'application/json',
            'Content-Length': '237',
            'Origin': 'https://www.generali.it',
            'Connection': 'keep-alive',
            'Cookie': 'x4h.client=onvc38bfgqvuir2r3tboit0rp8c5d34865-8d05-469e-b6d7-79105baa131d; _ga=GA1.2.613653564.1570792093; _fbp=fb.1.1579266548280.486142261; GTM_POLICY_ACCEPTED=true; _gcl_au=1.1.1802169492.1579884450; sig.client.dev=mlxdyywz7yr0xgygizx0ir0g7zec838c09-f2b8-4814-991f-248ab363b295; GeneraliIT_SC_ANALYTICS_GLOBAL_COOKIE=SI-[30/10/2018]; SC_ANALYTICS_GLOBAL_COOKIE=80637bc66c5a433eb9a5945b256a4d7e|True; ASP.NET_SessionId=dmerdxo1jtioedkayg3de5us; _gid=GA1.2.668564119.1580665415; _dc_gtm_UA-26456056-1=1; _dc_gtm_UA-26456056-8=1; _gat_UA-26456056-1=1; _gat_UA-26456056-8=1',
            'Cache-Control': 'no-cache',
            'Pragma': 'no-cache',
            'Referer': 'https://www.generali.it/'
        }

        yield scrapy.http.Request(url, headers=headers, method='POST')

    def parse(self, response):
        parsedJson = json.loads(response.body)

Ошибка следующая:

2020-02-03 09:33:56 [scrapy.core.engine] DEBUG: Crawled (400) <POST https://www.generali.it/api/AgenzieApi/RicercaAgenzieByPosizione?bustCache=1580717480992> (referer: https://www.generali.it/)
2020-02-03 09:33:56 [scrapy.spidermiddlewares.httperror] INFO: Ignoring response <400 https://www.generali.it/api/AgenzieApi/RicercaAgenzieByPosizione?bustCache=1580717480992>: HTTP status code is not handled or not allowed
2020-02-03 09:33:56 [scrapy.core.engine] INFO: Closing spider (finished)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...