赞
踩
一、关于用爬虫爬取想要的信息我们必须要明确一些主要步骤:
二、前期知识准备:
本次示例使用库是urllib库,不懂的可以参考之前的教程https://blog.csdn.net/CurtainOfNight/article/details/103330307 ;
json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
参数介绍:
(1)ensure_ascii 参数:默认为True, 如果被设置为False, 则可以返回non-ASCII的字符串。
- json_data = json.dumps(data_dict)
- print(json_data) # {"name": "\u94b1\u7a0b", "shares": 100, "price": 542.23}
-
- json_data = json.dumps(data_dict, ensure_ascii=False)
- print(json_data) # {"name": "钱程", "shares": 100, "price": 542.23}
(2)sort_keys 参数:默认为False,如果设置为True,则输出的字典会按照key的字典序升序排列。
- json_data = json.dumps(data_dict, ensure_ascii=False, sort_keys=True)
- print(json_data)
2. dump() 方法:用于写文件。
- with open("json_dump_test.json", "w") as f:
- json.dump(data_dict, f, ensure_ascii=False)
3. loads() 方法:将已编码的 JSON 字符串解码为 Python 对象。
- json_data = json.dumps(data_dict, ensure_ascii=False, sort_keys=True)
- print(json_data)
- print(json.loads(json_data))
4. load() 方法:对应dump()方法
- with open("json_dump_test.json", "r") as f:
- json_data = json.load(f)
- print(json_data)
5. json 库支持下面这些类型转化为 json 的数据类型:
Python 类型 | Json 类型 |
dict | object |
list, tuple | array |
int, float | number |
True | true |
False | false |
None | null |
三、爬取百度翻译结果:
1. 首先分析一下百度翻译的页面,我们会发现当我们在输入框中输入要查询的单词时,整个主页面并没有发生变化,这时我们应该想到应该用到了ajax的异步传输方法!
2. 我们现在已经知道百度翻译用的ajax的POST请求,那么下一步我们就要利用抓包工具分析出它向那个API接口发出的请求,由于不是很复杂我们就用Chrome浏览器的开发者工具就行了F12打开开发者工具,由于是ajax的异步传输所有我们只看XHR就行了(至于为什么大家可以去百度一下ajax的工作原理,这里小编将不再赘述了!)
我们查看第一个文件,看看它的返回结果这好就是我们要结果,那么我们直接从headers找到它的API接口就行了,大家可以看看第三个文件的返回结果也是我们想要的而且更加详细,大家自己可以尝试一下!
3. 找到API接口后,由于是POST请求所以我们还要知道要提交表单的参数,我们可以从headers的最底下看到要的参数是什么
4. 好了,现在我们的API和参数都找到了,接下来我们就可以写代码了!
- import urllib.request
- import urllib.parse
- import json
-
- # 百度翻译的API接口
- url = "https://fanyi.baidu.com/sug"
- word = input("请输入要查询的单词:")
-
- headers = {
- 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 '
- '(KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
- }
-
- # 要加的参数
- data = {
- 'kw': word,
- }
-
- data = urllib.parse.urlencode(data).encode()
-
- request = urllib.request.Request(url=url, headers=headers, data=data)
-
- response = urllib.request.urlopen(request).read().decode('unicode_escape')
-
- # 用Json模块把得到的json数据(其实它就是一种str字符串)转成Python中字典
- response = json.loads(response)['data']
-
- for word in response:
- print(word['k'] + ':' + word['v'])
结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。