Соскребание с фреймов, POST-запрос не работает в Python - PullRequest
0 голосов
/ 27 июня 2019

Я работаю над проектом по сбору цен из каталога запчастей.Поскольку он использует фреймы, я использовал инструменты разработчика Chrome, чтобы посмотреть, что отправляется на сервер.

Я нашел запрос, который захватывает данные, но я не могу заставить его работать в python.Я также попытался сделать запрос с помощью Postman, скопировав данные cURL, но он также не работает.

Вот код, который я использую:

headers = {
    "Accept": "application/json, text/plain, */*",
    "Accept-Encoding": "gzip, deflate, br",
    "Accept-Language": "en-US,en;q=0.9",
    "Cache-control": "no-cache,no-store",
    "Connection": "keep-alive",
    "Content-Length": "205",
    "Content-Type": "application/json",
    "Cookie": "COOKIE HERE",
    "Expires": "0",
    "Host": "partscatalog.deere.com",
    "Origin": "https://partscatalog.deere.com",
    "Pragma": "no-cache",
    "Referer": "https://partscatalog.deere.com/jdrc/navigation/equipment/69779",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
    "X-TS-AJAX-Request": "true"
}

payload = {'{"eq":"69779","fr":{"businessRegion":1061,"filtersEnabled":"true","encodedFilters":null,"filteringLevel":null,"currentPin":null,"equipmentRefId":"69779"},"sp":"","br":"1061","locale":"en-US","vm":"p","ln":1}'}

r = requests.post("https://partscatalog.deere.com/jdrc-services/v1/navigation/p/getChildren", headers=headers, data=payload)
print(r.content)

Заранее спасибо

1 Ответ

1 голос
/ 27 июня 2019

У вас есть несколько проблем с вашим кодом, во-первых, я бы порекомендовал вам заменить заголовок следующим:

headers = {
    "Accept": "application/json, text/plain, */*",
    "Content-Type": "application/json",
    "Cookie": "COOKIE HERE",
    "Referer": "https://partscatalog.deere.com/jdrc/navigation/equipment/69779",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
    "X-TS-AJAX-Request": "true"
}

Тогда я бы также порекомендовал заменить это:

r = requests.post("https://partscatalog.deere.com/jdrc-services/v1/navigation/p/getChildren", headers=headers, data=payload)

с:

r = requests.post("https://partscatalog.deere.com/jdrc-services/v1/navigation/p/getChildren", headers=headers, json=payload)

надеюсь, что это работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...