尽管谷歌浏览器收到响应,但 403 禁止通过 Python 进行 requests.post

我对网络抓取很陌生。我正在尝试通过对请求进行逆向工程并抓取数据来获取产品的 Flipkart 卖家的数据。我正在尝试的 URL 是:https : //www.flipkart.com/sellers?pid=HSAFFJWT2WUYHHHX,其中包含特定产品的卖家列表。


当我在 Google chrome 中打开网络选项卡时,我可以看到它向:https : //www.flipkart.com/api/3/page/dynamic/product-sellers发出 POST 请求,请求负载为: {"requestContext":{"productId":"HSAFFJWT2WUYHHHX"},"locationContext":{"pincode":"110092"}}


我正在我的代码中复制浏览器已发送的请求标头和有效负载,但我收到的是 403 Forbidden 消息,而不是有效的 JSON 数据。


或者,我已经成功地使用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)


但是我收到了 403 Forbidden。即使该页面不需要用户登录。


也许有一些 api 期望我没有提供的安全令牌,这就是它抛出 403 Forbidden 的原因。


谁能帮我弄清楚我缺少什么才能获得 Json?


慕尼黑的夜晚无繁华
浏览 353回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python