先附上一段 “百度翻译” 的爬虫代码

# 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文本 解码成字典格式

最新文章

  1. Java多线程 2 线程的生命周期和状态控制
  2. Android开发学习——android存储
  3. 关于网络-get/post
  4. SQL--使用NewID函数,创建GUID列
  5. Web API应用架构设计分析(2)
  6. javax.servlet.ServletException: com.ibatis.sqlmap.client.SqlMapException: There is no statement named...问题
  7. BIEE修改图片步骤:修改BANNER
  8. weblogic 12c 配置jvm的内存大小
  9. 项目管理实践教程二、源代码控制【Source Control Using VisualSVN Server and TortoiseSVN】
  10. java war 打包、解压命令(转载)
  11. Database 2 Day DBA guide_Chapter2
  12. asp.net core1.1的PlatformAbstraction源码
  13. node-basis(提供nodejs开发的基础包)
  14. 使用Pandas将多个数据表合一
  15. BZOJ3456 城市规划 【生成函数】【FFT】
  16. MVC Helper Methods
  17. java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
  18. [LeetCode] 176. Second Highest Salary_Easy tag: SQL
  19. Laravel Tinker 使用笔记
  20. SSH整合 第二篇 工程初建

热门文章

  1. MyBatis(一) 概述与SQL定制、对象映射
  2. Java实现高效便捷还容易懂的排序算法
  3. Java实现 LeetCode 190 颠倒二进制位
  4. Java实现 蓝桥杯VIP 算法提高 高精度乘法
  5. Java实现 LeetCode 142 环形链表 II(二)
  6. Java实现 LeetCode 129 求根到叶子节点数字之和
  7. java实现第39级台阶(三十九级台阶)
  8. 树莓派使用 OLED 屏显示图片及文字
  9. JSP基础知识点(转传智)
  10. 启动fiddler情况下,网络连接错误[Fiddler] The connection to ** failed.解决办法