Я очень плохо знаком с веб-скребком. Я пытаюсь получить данные продавцов флипкарт для продукта путем обратного инжиниринга запросов и очистки данных.
URL, который я пробую: https://www.flipkart.com/sellers?pid=HSAFFJWT2WUYHHHX,, который содержит список продавцов для определенного продукта.
Когда я открываю вкладку сети в Google Chrome, я вижу, что она делает POST-запрос к: https://www.flipkart.com/api/3/page/dynamic/product-sellers с полезной нагрузкой запроса как:
{"requestContext":{"productId":"HSAFFJWT2WUYHHHX"},"locationContext":{"pincode":"110092"}}
Я копирую заголовки запроса и полезные данные, отправленные браузером, в моем коде, но вместо действительных данных JSON я получаю сообщение 403 Запрещено.
С другой стороны, я успешно использовал Selenium , чтобы открыть эту страницу (https://www.flipkart.com/sellers?pid=HSAFFJWT2WUYHHHX), а затем проанализировать данные продавцов, используя Beautiful Soup . Однако селен очень очень медленно. Вот почему я пытаюсь получить json напрямую, который динамически заполняет данные продавцов на этой странице.
Я пытался сделать запрос на отправку из моего кода, а также почтальона, но безуспешно.
import requests
import json
headers = {
'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'en-US,en;q=0.9',
'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
'Connection': 'keep-alive',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
'Referer' : 'https://www.flipkart.com/sellers?pid=HSAFFJWT2WUYHHHX',
'Content-Type': 'application/json',
'Origin': 'https://www.flipkart.com',
'Host': 'www.flipkart.com',
'Pragma': 'no-cache'
}
url = "https://www.flipkart.com/api/3/page/dynamic/product-sellers"
payLoad = {"requestContext":{"productId":"HSAFFJWT2WUYHHHX"},"locationContext":{"pincode":"001195"}}
response = requests.post(url,headers = headers,data = json.dumps(payLoad))
print(response.status_code,response.reason)
print(response.text)
print(response.request.headers)
Я ожидаю получить Json, подобный этому, программно:
Но я получаю 403 Запрещено. Несмотря на то, что для входа на страницу пользователь не требуется.
Возможно, есть какой-то жетон безопасности, который API ожидает, что я не дал, поэтому его бросок 403 Запрещен.
Может кто-нибудь помочь мне выяснить, что мне не хватает, чтобы получить Json?
Спасибо!