Я пытаюсь почистить агентства с этого сайта: 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)