我试图将这个JSON文件从这个URL:id=24413460中解析到我的Python代码中,这是我从这个页面获取的id=24413460(对不起,我还不能发布两个以上的链接)。
当我使用开发人员工具分析数据时,它显示的是带有普通可读字符串的JSON文件的属性,但是当我双击打开该文件时,某些内容似乎是隐藏的?
这是解析该JSON文件的代码:
for x in range (0, 6):
with opener.open('https://shopee.co.id/api/v1/search_items/?by=sales&order=desc&newest='+ str(x*30) +'&limit=30&skip_price_adjust=false&page_type=shop&match_id=24413460') as url:
data = json.loads(url.read().decode())
for produk in data['items']:
pid = produk["itemid"]
new_url = opener.open('https://shopee.co.id/api/v1/item_detail/?item_id='+ str(pid) +'&shop_id=24413460')
new_data = json.loads(new_url.read().decode())
print(new_data['name'])结果是这样的:
MIYAKO COUNTERTOP ????????????????????????????????????我在json还是新来的,所以我不知道该怎么做,任何帮助都会很感激。
发布于 2017-09-28 20:42:51
由于它是在浏览器中加载的,而不是使用普通的curl请求来加载该URL,所以请求的某些内容会触发与服务器不同的响应。
Chrome可以为页面上加载的任何资源提供一个curl命令行:

这将复制包含所有HTTP标头的请求:
curl 'https://shopee.co.id/api/v1/item_detail/?item_id=293667885&shop_id=24413460' -H 'cookie: _ga=GA1.3.2146560403.1506630766; _gid=GA1.3.1501700749.1506630766; _gat=1; csrftoken=yGTme9JnjopdDWv5axfOSoheC4opBno4' -H 'accept-encoding: gzip, deflate, br' -H 'accept-language: en-US,en;q=0.9' -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3226.0 Safari/537.36' -H 'x-api-source: pc' -H 'accept: */*' -H 'referer: https://shopee.co.id/PHILIPS-RICE-COOKER-2L-HD3128-33_sby-Area-Surabaya-i.24413460.293667885' -H 'authority: shopee.co.id' -H 'x-requested-with: XMLHttpRequest' -H 'if-none-match-: 55b03-89dcbb5568d6e9410be036d2f935045d' --compressed
在不更改任何内容的情况下运行它,以验证它是否仍然从服务器产生相同的响应。确实如此。
逐个删除额外的标题,以查看响应是否更改。
小心-H 'accept-encoding: gzip, deflate, br'和--compressed,因为它们一起工作,所以您不想查看终端中的原始gzip字节。
最终发现if-none-match-: 55b03-89dcbb5568d6e9410be036d2f935045d是触发与服务器不同响应的头。得出结论,这可能是API服务器中某种类型的缓存错误。
https://stackoverflow.com/questions/46477325
复制相似问题