• Spider -- Url地址编码模块(urlencode({dict})、quote(string)、unquote(string))


    1、模块名及导入

    • 模块

    # 模块名
    urllib.parse

    # 导入
    import urllib.parse
    from urllib import parse
    • 作用

    给URL地址中查询参数进行编码
    
    编码前:https://www.baidu.com/s?wd=美女
    编码后:https://www.baidu.com/s?wd=%E7%BE%8E%E5%A5%B3

    2、常用方法

    urllib.parse.urlencode({dict})

    • URL地址中一个查询参数

    # 查询参数:{'wd' : '美女'}
    # urlencode编码后:'wd=%e7%be%8e%e5%a5%b3'
    # 示例代码
    query_string = {'wd' : '美女'}
    result = urllib.parse.urlencode(query_string)
    # result: 'wd=%e7%be%8e%e5%a5%b3'
    • URL地址中多个查询参数

    from urllib import parse
    params = {
        'wd' : '美女',
        'pn' : '50'
    }
    params = parse.urlencode(query_string_dict)
    url = 'http://www.baidu.com/s?{}'.format(params)
    print(url)
    • 拼接URL地址的3种方式

    # 1、字符串相加
      baseurl = 'http://www.baidu.com/s?'
      params = 'wd=%E7XXXX&pn=20'
      url = baseurl + params
    ​
    # 2、字符串格式化(占位符)
      params = 'wd=%E7XXXX&pn=20'
      url = 'http://www.baidu.com/s?%s'% params
    ​
    # 3、format()方法
      url = 'http://www.baidu.com/s?{}'
      params = 'wd=#E7XXXX&pn=20'
      url = url.format(params)

    代码实现 - 03_parse_baidu.py

    from urllib import request
    from urllib import parse
    ​
    # 拼接URL地址
    def get_url(word):
      url = 'http://www.baidu.com/s?{}'
      # params: wd=%E7XXXXX
      params = parse.urlencode({'wd':word})
      url = url.format(params)
    ​
      return url
    ​
    ​
    # 发请求,保存本地文件
    def request_url(url,filename):
      headers = {'User-Agent':'Mozilla/5.0'}
      # 请求对象 + 响应对象 + 提取内容
      req = request.Request(url=url,headers=headers)
      res = request.urlopen(req)
      html = res.read().decode('utf-8')
      # 保存数据
      with open(filename,'w',encoding='utf-8') as f:
        f.write(html)
    ​
    # 主程序入口
    if __name__ == '__main__':
      word = input('请输入搜索内容:')
      url = get_url(word)
      filename = word + '.html'
      request_url(url,filename)

    quote(string)编码

    • 示例1

    from urllib import parse
    ​
    string = '美女'
    print(parse.quote(string))
    # 结果: %E7%BE%8E%E5%A5%B3

    改写之前urlencode()代码,使用quote()方法实现

    from urllib import parse
    ​
    url = 'http://www.baidu.com/s?wd={}'
    word = input('请输入要搜索的内容:')
    query_string = parse.quote(word)
    print(url.format(query_string))

    unquote(string)解码

    • 示例

    from urllib import parse
    ​
    string = '%E7%BE%8E%E5%A5%B3'
    result = parse.unquote(string)
    print(result)

     

  • 相关阅读:
    hdu1209(Clock)
    [NodeJS]使用Node.js写一个简单的在线聊天室
    UVa 11168 Airport , 凸包
    【数据结构与算法】(二) c 语言链表的简单操作
    Struts简单介绍
    bzoj3931【CQOI2015】网络吞吐量
    python爬虫解决百度贴吧登陆验证码问题
    TNS-01251: Cannot set trace/log directory under ADR
    Oracle 监听器日志文件过大导致监听异常
    RHEL7
  • 原文地址:https://www.cnblogs.com/gengyufei/p/12642370.html
Copyright © 2020-2023  润新知