鱼C论坛

 找回密码
 立即注册
查看: 2009|回复: 10

[已解决]怎么快速知道requests.get后返内容的格式

[复制链接]
发表于 2020-8-29 23:38:29 | 显示全部楼层 |阅读模式
20鱼币
怎么快速知道requests.get后返内容的格式到底是json还html格式?
最佳答案
2020-8-29 23:38:30
丨游戏灬需要 发表于 2020-9-2 12:40
这个答案不太完美啊.
例如这个网址url ='https://club.jd.com/comment/productPageComments.action?call ...

用正则方便,我就是用的正则
import re
import requests
res = requests.get('https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100009082466&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&rid=0&fold=1')  # headers懒得弄
dict1 = re.find(r'{.+}')[0]
dict1 = dict1.json()

最佳答案

查看完整内容

用正则方便,我就是用的正则
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-29 23:38:30 | 显示全部楼层    本楼为最佳答案   
丨游戏灬需要 发表于 2020-9-2 12:40
这个答案不太完美啊.
例如这个网址url ='https://club.jd.com/comment/productPageComments.action?call ...

用正则方便,我就是用的正则
import re
import requests
res = requests.get('https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100009082466&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&rid=0&fold=1')  # headers懒得弄
dict1 = re.find(r'{.+}')[0]
dict1 = dict1.json()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-29 23:55:23 | 显示全部楼层
本帖最后由 newu 于 2020-8-29 23:58 编辑

https://requests.readthedocs.io/ ... uickstart.html#json


可以看看requests库里面对json函数的说明。

那么如果get请求返回的是一个JSON格式的内容的话,那么它使用 r.json() 解码是不会抛ValueError的异常的。

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
丨游戏灬需要 + 5 + 5 + 3 3q.也是有用的一些知识

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-30 10:32:55 | 显示全部楼层
本帖最后由 kogawananari 于 2020-8-30 10:59 编辑
res = requests.post(url, data=req)
if res.headers['Content-Type'] == 'application/json;charset=UTF-8':
    return res.json()
elif res.headers['Content-Type'] == 'text/html; charset=utf-8':
    pass


get 和 post都适用
不嫌麻烦再用一下正则 因为指不定是什么charset
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-1 12:20:45 | 显示全部楼层
{内容}  像这样的就是json   其它的,,那种网页标签的就是xml
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-9-2 12:40:30 | 显示全部楼层
newu 发表于 2020-8-29 23:55
https://requests.readthedocs.io/zh_CN/latest/user/quickstart.html#json

这个答案不太完美啊.
例如这个网址url ='https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100009082466&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&rid=0&fold=1'
(它是京东的商品评论区数据)
它是一个json ,但它还需要处理去掉前后缀才能respon.json()转换成字典.

所有有没有大家所统一的解决方法?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-2 14:07:15 | 显示全部楼层
本帖最后由 鱼cpython学习者 于 2020-9-2 14:08 编辑

用正则最方便了
import re
import requests
res = requests.get(url = url, headers = headers)    # url和headers自己弄
content = re.find_all(r'{.+}', res.text)[0]
dict = content.json()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-2 14:08:34 | 显示全部楼层
丨游戏灬需要 发表于 2020-9-2 12:40
这个答案不太完美啊.
例如这个网址url ='https://club.jd.com/comment/productPageComments.action?call ...

用正则最方便了
import re
import requests
res = requests.get(url = url, headers = headers)    # url和headers自己弄
content = re.find_all(r'{.+}', res.text)[0]
dict = content.json()

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
丨游戏灬需要 + 5 + 5 + 3 确实可以 .不过这还是得事先知道爬取的格式.

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-2 14:19:38 | 显示全部楼层
丨游戏灬需要 发表于 2020-9-2 12:40
这个答案不太完美啊.
例如这个网址url ='https://club.jd.com/comment/productPageComments.action?call ...

把京东评论json数据url中 callback=fetchJSON_comment98& 手动删掉就可以得到一个比较短的json数据url(数据中的fetchJSON_comment98就没有了),然后用json库的loads方法转成字典最后获取key的值得到评论
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-9-2 18:48:25 | 显示全部楼层
懂了懂了 ,爬取时 ,直接用正则去匹配

if re.search(r'({|[).+(}|])' ,response.text):        #我听说有json信息是用列表包起字典来的
    res_json_data =response.json()
else:
    soup =bs4.BeautifulSoup(response.text)

这样应该没错(但我不知道 ,有没有可能html里面包含字典或列表)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-2 19:13:35 | 显示全部楼层
本帖最后由 suchocolate 于 2020-9-2 19:18 编辑

RFC2616里说,Body内对象类型要在Header里用Content-type指示出来,所以一般看Header就知道了。
>>> import requests
>>> url = 'https://www.baidu.com'
>>> headers = {'user-agent': 'firefox'}
>>> r = requests.get(url, headers=headers)
>>> print(r.headers.get('Content-type'))
text/html;charset=utf-8
>>> 
规范连接:https://tools.ietf.org/html/rfc2616#section-7.2.1
都有哪些类型参考:http://www.iana.org/assignments/media-types/media-types.xhtml

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
丨游戏灬需要 + 5 + 5 + 3 3q.也是有用的一些知识

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 18:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表