怎么快速知道requests.get后返内容的格式
怎么快速知道requests.get后返内容的格式到底是json还html格式?丨游戏灬需要 发表于 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:58 编辑
https://requests.readthedocs.io/zh_CN/latest/user/quickstart.html#json
可以看看requests库里面对json函数的说明。
那么如果get请求返回的是一个JSON格式的内容的话,那么它使用 r.json() 解码是不会抛ValueError的异常的。
本帖最后由 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 {内容}像这样的就是json 其它的,,那种网页标签的就是xml 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:08 编辑
用正则最方便了
import re
import requests
res = requests.get(url = url, headers = headers) # url和headers自己弄
content = re.find_all(r'{.+}', res.text)
dict = content.json() 丨游戏灬需要 发表于 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() 丨游戏灬需要 发表于 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的值得到评论 懂了懂了 ,爬取时 ,直接用正则去匹配
if re.search(r'({|[).+(}|])' ,response.text): #我听说有json信息是用列表包起字典来的
res_json_data =response.json()
else:
soup =bs4.BeautifulSoup(response.text)
这样应该没错(但我不知道 ,有没有可能html里面包含字典或列表) 本帖最后由 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]