首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析JSON返回null和问号

解析JSON返回null和问号
EN

Stack Overflow用户
提问于 2017-09-28 19:56:39
回答 1查看 732关注 0票数 1

我试图将这个JSON文件从这个URL:id=24413460中解析到我的Python代码中,这是我从这个页面获取的id=24413460(对不起,我还不能发布两个以上的链接)。

当我使用开发人员工具分析数据时,它显示的是带有普通可读字符串的JSON文件的属性,但是当我双击打开该文件时,某些内容似乎是隐藏的?

这是解析该JSON文件的代码:

代码语言:javascript
复制
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'])

结果是这样的:

代码语言:javascript
复制
MIYAKO COUNTERTOP ????????????????????????????????????

我在json还是新来的,所以我不知道该怎么做,任何帮助都会很感激。

显示在我的开发工具中的屏幕截图

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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服务器中某种类型的缓存错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46477325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档