丨游戏灬需要 发表于 2020-8-29 23:38:29

怎么快速知道requests.get后返内容的格式

怎么快速知道requests.get后返内容的格式到底是json还html格式?

鱼cpython学习者 发表于 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'{.+}')
dict1 = dict1.json()

newu 发表于 2020-8-29 23:55:23

本帖最后由 newu 于 2020-8-29 23:58 编辑

https://requests.readthedocs.io/zh_CN/latest/user/quickstart.html#json


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

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

kogawananari 发表于 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
{:5_102:}

get 和 post都适用
不嫌麻烦再用一下正则 因为指不定是什么charset

luxiaolan6373 发表于 2020-9-1 12:20:45

{内容}像这样的就是json   其它的,,那种网页标签的就是xml

丨游戏灬需要 发表于 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()转换成字典.

所有有没有大家所统一的解决方法?

鱼cpython学习者 发表于 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)
dict = content.json()

鱼cpython学习者 发表于 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)
dict = content.json()

YunGuo 发表于 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的值得到评论

丨游戏灬需要 发表于 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里面包含字典或列表)

suchocolate 发表于 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]
查看完整版本: 怎么快速知道requests.get后返内容的格式