zhangguoxv

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

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

 

分类:

技术点:

相关文章: