代码不是看出来的,而是敲出来的,欢迎关注公众号,收藏教程,跟着步骤练习爬虫,成为真正的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](https://i-blog.csdnimg.cn/blog_migrate/97a8eabc4d25c8621b30bdac11ae4ba8.jpeg)
会返回json数据一般有两种情况:浏览器切换到手机版,并不是每个页面都会返回json数据;抓包的软件和app。
需要掌握的两个方法:
步骤二: json.loads()
- 把json字符串转换为python类型
- 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()
- 把python类型转化为json字符串
- 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](https://i-blog.csdnimg.cn/blog_migrate/5a6fa24fa3e9180db486e535a99a17fd.jpeg)
![48e2d3fbc6fa1aa571d71474e8d6c38b.png](https://i-blog.csdnimg.cn/blog_migrate/2d9e13876b483f0dcdf167da0302760a.jpeg)
关注公众号【秃头程序员】,不错过不跳步骤的新手python爬虫教程(五)
(原创文章文字图片禁止转载,禁止用于商业用途,转载公众号请后台留言申请。图文部分来自网络,若有侵权,请联系删除)