zoukankan      html  css  js  c++  java
  • 关于 urlencode 的使用和 json 模块的介绍

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

    # 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文本 解码成字典格式
  • 相关阅读:
    多国语言功能设计与实现
    锁标记
    Qt之生成Window资源文件(.rc 文件)
    如何获取本地html文件的标题
    Qt+gsoap调用WebService
    在Qt中使用ActiveX控件
    让notepad.exe的utf8不添加BOM
    Asp.Net生命周期系列四
    C#操作AD及Exchange Server总结
    C#彻底解决Web Browser 跨域读取Iframes内容
  • 原文地址:https://www.cnblogs.com/zhangguoxv/p/10025305.html
Copyright © 2011-2022 走看看