关于 urlencode 的使用和 json 模块的介绍
2024-10-09 07:00:43
先附上一段 “百度翻译” 的爬虫代码
# python爬虫实现百度翻译
# urllib和request POST参数提交
from urllib import request,parse
import json def fanyi(keyword):
base_url = 'https://fanyi.baidu.com/sug'
# 构建请求对象
data = {'kw': keyword}
data = parse.urlencode(data).encode('utf-8')
# 模拟浏览器
header = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"}
req = request.Request(url=base_url,data=data,headers=header)
res = request.urlopen(req) # 获取响应的json字符串
str_json = res.read().decode('utf-8')
# 把json转换成字典
myjson = json.loads(str_json) # 将字符串转化为字典
info = myjson['data'][0]['v']
print(info) if __name__=='__main__':
while True:
keyword = input('请输入翻译的单词:')
if keyword == 'q':
break
fanyi(keyword)
1. 其中,data = parse.urlencode(data).encode('utf-8') 的作用是,将字典里面所有的键值转化为 query-string 格式(key=value&key=value),并且将中文转码。
2. 然后,req = request.Request(url=base_url,data=data,headers=header)的作用是,将base_url, data, headers 拼接成一个请求的 url, 命名为 req。
注:在这里要仔细介绍一下 python3 的编码问题。(看了好多资料才明白)
参考 https://blog.csdn.net/xiaofan_0208/article/details/77366363
https://blog.csdn.net/apache0554/article/details/53889253
data = parse.urlencode(data).encode('utf-8') ,是将data转化为 utf-8格式的编码。decode()都是将其他编码转换为Unicode编码。
3. myjson = json.loads(str_json) 的作用是,将字符串转化为字典,因为从浏览器读取出来的内容都是字符串格式。
编码和解码JSON数据的两个主要的函数是 json.dumps() 和 json.loads()。参考本片文章:https://blog.csdn.net/liangxy2014/article/details/78984998
import json data = {
'name' : 'ACME',
'shares' : 100,
'price' : 542.23
}
json_str = json.dumps(data) # 将字典编码成 json 格式
data = json.loads(json_str) # 将 json文本 解码成字典格式
最新文章
- Java多线程 2 线程的生命周期和状态控制
- Android开发学习——android存储
- 关于网络-get/post
- SQL--使用NewID函数,创建GUID列
- Web API应用架构设计分析(2)
- javax.servlet.ServletException: com.ibatis.sqlmap.client.SqlMapException: There is no statement named...问题
- BIEE修改图片步骤:修改BANNER
- weblogic 12c 配置jvm的内存大小
- 项目管理实践教程二、源代码控制【Source Control Using VisualSVN Server and TortoiseSVN】
- java war 打包、解压命令(转载)
- Database 2 Day DBA guide_Chapter2
- asp.net core1.1的PlatformAbstraction源码
- node-basis(提供nodejs开发的基础包)
- 使用Pandas将多个数据表合一
- BZOJ3456 城市规划 【生成函数】【FFT】
- MVC Helper Methods
- java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
- [LeetCode] 176. Second Highest Salary_Easy tag: SQL
- Laravel Tinker 使用笔记
- SSH整合 第二篇 工程初建
热门文章
- MyBatis(一) 概述与SQL定制、对象映射
- Java实现高效便捷还容易懂的排序算法
- Java实现 LeetCode 190 颠倒二进制位
- Java实现 蓝桥杯VIP 算法提高 高精度乘法
- Java实现 LeetCode 142 环形链表 II(二)
- Java实现 LeetCode 129 求根到叶子节点数字之和
- java实现第39级台阶(三十九级台阶)
- 树莓派使用 OLED 屏显示图片及文字
- JSP基础知识点(转传智)
- 启动fiddler情况下,网络连接错误[Fiddler] The connection to ** failed.解决办法