Python очистка запроса AJAX Post

#python #ajax #post #web-scraping #python-requests

#python #ajax #Публикация #веб-очистка #python-запросы

Вопрос:

 import requests
import json
import csv
import pandas as pd 
import time
from bs4 import BeautifulSoup
from requests import Session

url = 'https://www.agathaparis.com/ajax.V1.php/en_US/Rbs/Storelocator/Store/'

payload={"websiteId":603593,"sectionId":603593,"pageId":868982,"data":{"currentStoreId":0,"distanceUnit":"kilometers","distance":"50kilometers","coordinates":{"latitude":48.856614,"longitude":2.3522219},"commercialSign":0},"dataSets":"coordinates,address,card,allow","URLFormats":"canonical,contextual","visualFormats":"original,listItem","pagination":"0,50","referer":"https://www.agathaparis.com/our-stores.html"}

s=requests.Session()

s.get('https://www.agathaparis.com/our-stores.html')

headers={
    'Content-Type': 'application/json',
    'Accept': 'application/json, text/plain, */*',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'en-gb',
    'Host': 'www.agathaparis.com',
    'Origin': 'https://www.agathaparis.com',
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.1 Safari/605.1.15',
    'Connection': 'keep-alive',
    'Referer': 'https://www.agathaparis.com/our-stores.html',
    'Content-Length': '407',
    'Cookie': '_fbp=fb.1.1607609084947.2075070555; _ga=GA1.2.964068958.1607609084; _gid=GA1.2.1470390017.1607868080; _gat_UA-33249847-1=1; rbsWebsiteTrackerHasConsent=true; rbsWebsiteTrackerHasConsentGdpr={"technical":true,"analytics":true,"advertising":true}; PHPSESSID=n4uf5tfuf96k141vemo5s9g99g',

}

resp = s.post(url,data=payload,headers=headers)
 

Я пытаюсь извлечь список магазинов с помощью этого post-запроса. Я не понимаю, чего мне не хватает. Заранее спасибо за вашу помощь

Ответ №1:

Ваша основная ошибка заключается в том, что вы публикуете неправильно Content-Type . Вам нужно опубликовать JSON вместо application/x-www-form-urlencoded :

 headers={
    'Content-Type': 'application/json',
    'Accept': 'application/json, text/plain, */*',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'en-gb',
    'Host': 'www.agathaparis.com',
    'Origin': 'https://www.agathaparis.com',
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.1 Safari/605.1.15',
    # 'Connection': 'keep-alive',
    'Referer': 'https://www.agathaparis.com/our-stores.html',
    'x-http-method-override': 'GET',
    # 'Content-Length': '407',
    # 'Cookie': '_fbp=fb.1.1607609084947.2075070555; _ga=GA1.2.964068958.1607609084; _gid=GA1.2.1470390017.1607868080; _gat_UA-33249847-1=1; rbsWebsiteTrackerHasConsent=true; rbsWebsiteTrackerHasConsentGdpr={"technical":true,"analytics":true,"advertising":true}; PHPSESSID=n4uf5tfuf96k141vemo5s9g99g',

}

resp = s.post(url, json=payload, headers=headers)
 

Комментарии:

1. Большое спасибо! ты качаешься :). Как вы узнали, что вам нужно добавить ‘x-http-method-override’: ‘GET’ пожалуйста? когда нам нужно поместить json=payload вместо data=payload? Большое спасибо за вашу помощь