【发布时间】:2019-06-11 00:20:38
【问题描述】:
我对网络抓取非常陌生。我正在尝试通过对请求进行逆向工程并抓取数据来获取产品的 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。 我已经尝试从我的代码和 Postman 发出发布请求,但没有成功。
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 Forbidden。即使该页面不需要用户登录。
也许 API 期望我没有给出一些安全令牌,这就是它抛出 403 Forbidden 的原因。
谁能帮我弄清楚我缺少什么来获取 Json?
谢谢!
【问题讨论】:
标签: python web-scraping beautifulsoup http-headers google-chrome-devtools