python json loads 中文乱码_不跳步骤的新手python爬虫系列教程(四)

代码不是看出来的,而是敲出来的,欢迎关注公众号,收藏教程,跟着步骤练习爬虫,成为真正的Spider Man。

在第一篇教程里(不跳步骤新手python爬虫教程(一))我们学习了安装python、运行python、下载IDE: Pycharm(代码编辑器)以及浏览器的网络请求等相关知识内容。

在第二篇教程里(不跳步骤新手python爬虫教程(二))认识了两种网络协议http、https、对请求行与请求头Request URL、Request Headers、Query String等参数、requests模块的相关方法、获取网页原码的三种方式进行了讲解。最后我们以百度首页和百度翻译两个页面调用requests库进行了抓包。

在第三篇教程里(不跳步骤的新手python爬虫系列教程(三))讲解了设置响应超时的timeout参数、retrying模块、携带cookie请求的相关知识点。下面紧接着开始爬虫第四篇教程的学习。

步骤一:数据提取方法json

jsons是数据交换(数据从后端传到前端)格式,看起来像python类型(列表,字典)的字符串。我们教程三中百度翻译页面type(response.content.decode()返回值为str,也就是上面提到的python类型字符串,那我们如何将字符串类型转化为字典等形式呢?

# coding=utf-8import requestsurl = "http://fanyi.baidu.com/basetrans"query_string = {"query":"你好,世界",        "from":"zh",        "to":"en"}headers = {"User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1",}response = requests.post(url,data=query_string,headers=headers)print(response)print(response.content.decode())print(type(response.content.decode()))
e9b941925fbaee308d4163e3edabd450.png

会返回json数据一般有两种情况:浏览器切换到手机版,并不是每个页面都会返回json数据;抓包的软件和app。

需要掌握的两个方法:

步骤二: json.loads()

  1. 把json字符串转换为python类型
  2. json.loads(‘json字符串’)#如果报错,一般由于不是json字符串导致
# coding=utf-8import requestsimport jsonurl = "http://fanyi.baidu.com/basetrans"query_str = input("请输入要翻译的中文:")data = {"query":query_str,                "from":"zh",                "to":"en"}headers = {"User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1",}response = requests.post(url,data=data,headers=headers)html_str = response.content.decode()  #json字符串dict_ret = json.loads(html_str)print(dict_ret)ret = dict_ret["trans"][0]["dst"]print("翻译结果是:",ret)

步骤三:json.dumps()

  1. 把python类型转化为json字符串
  2. json.dumps({‘1’:“hello”,‘2’:‘world’},ensure_ascii = False, indent = 2)
  • ensure_ascii =False #能够让中文显示
  • indent = 2 #上一行和下一行直接回车空格

注意一点,当URL中带有callback=???时,直接删掉即可,没有什么用,带着还不能构造json字符串。

import jsonimport requestsurl = "https://m.douban.com/rexxar/api/v2/subject_collection/filter_tv_american_hot/items?os=ios&for_mobile=1&start=0&count=18&loc_id=108288&_=1517148631877"headers = {    "User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1",    "Referer": "https://m.douban.com/tv/american"}response = requests.get(url,headers=headers)json_str = response.content.decode()ret1 = json.loads(json_str)print(ret1)with open("douban.txt","w",encoding="utf-8") as f:    f.write(json.dumps(ret1,ensure_ascii=False,indent=2))
78986cd74d63b790a660c1dea5b9351f.png
48e2d3fbc6fa1aa571d71474e8d6c38b.png

关注公众号【秃头程序员】,不错过不跳步骤的新手python爬虫教程(五)

(原创文章文字图片禁止转载,禁止用于商业用途,转载公众号请后台留言申请。图文部分来自网络,若有侵权,请联系删除)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值