• Python3编码解码url


    python2和python3对于url的解码和编码

    某天做爬虫时遇到一个post请求的参数是编码过的字符串如下,看不懂,初步判断可能是url编码

    str = "%7B%22ShoppingToken%22%3A%22NewAirChina%257CCA4173%252C1%252C%252C12-CA989%252C1%252C%252C12%257CY%252CV%252C-Y%252CV%252C%257C0%257C3430%252C1564%252CCAGJ-CA%257CNOR%257C%22%2C%22Eligibility%22%3A%22NOR%22%7D"

    对于不了解url编码,解码的同学,我简单解释一下,也可以参考  http://www.w3school.com.cn/tags/html_ref_urlencode.html

      URL为何要编码、解码?

          通常如果一样东西需要编码,说明这样东西并不适合传输。原因多种多样,如Size过大,包含隐私数据。对于Url来说,之所以要进行编码,是因为Url中有些字符会引起歧义。

          例如,Url参数字符串中使用key=value键值对这样的形式来传参,键值对之间以&符号分隔,如/s?q=abc&ie=utf-8。如果你的value字符串中包含了=或者&,那么势必会造成接收Url的服务器解析错误,因此必须将引起歧义的&和=符号进行转义,也就是对其进行编码。

          又如,Url的编码格式采用的是ASCII码,而不是Unicode,这也就是说你不能在Url中包含任何非ASCII字符,例如中文。否则如果客户端浏览器和服务端浏览器支持的字符集不同的情况下,中文可能会造成问题。

    百度了一下python解码url找到了解决办法,感谢 https://blog.csdn.net/junli_chen/article/details/50060161

    直接把代码贴过来

    #url编码:
    import urllib
    url = 'http://test.com/s?wd=哈哈'   #如果此网站编码是gbk的话,需要进行解码,从gbk解码成unicode,再从Unicode编码编码为utf-8格式。
    url = url.decode('gbk', 'replace')
    print urllib.quote(url.encode('utf-8', 'replace'))
    #结果: http%3a%2f%2ftest.com%2fs%3fwd%3d%e5%93%88%e5%93%88
    
    #url解码:
    import urllib
    encoded_url = 'http%3a%2f%2ftest.com%2fs%3fwd%3d%e5%93%88%e5%93%88'
    print urllib.unquote(encoded_url).decode('utf-8', 'replace').encode('gbk', 'replace')  #反过来

    使用了python2的语法,我使用的python3,所以改了一下语法,发现还不好使,quote报错了

    查了查资料原来python3中qutoe和unqutoe被放到了urllib.parse中(python2是在urllib中)    

    下面贴上python3解码编码的代码:

    #解码
    from urllib import parse
    encoded_url = '%7B%22ShoppingToken%22%3A%22NewAirChina%257CCA4173%252C1%252C%252C12-CA989%252C1%252C%252C12%257CY%252CV%252C-Y%252CV%252C%257C0%257C3430%252C1564%252CCAGJ-CA%257CNOR%257C%22%2C%22Eligibility%22%3A%22NOR%22%7D'
    print(parse.unquote(encoded_url)

    #编码
    from
    urllib import parse url = '{"ShoppingToken":"NewAirChina%7CCA4173%2C1%2C%2C12-CA989%2C1%2C%2C12%7CY%2CV%2C-Y%2CV%2C%7C0%7C3430%2C1564%2CCAGJ-CA%7CNOR%7C","Eligibility":"NOR"}' print(parse.quote(url))

    解码完成发现还有 %&%2之类的没关系,我们把未解密的字符串拿出来再来一次

    python2的代码可以参考上面,因为我没装python2,有兴趣的可以自己试一试

    温馨提示

    • 如果您对本文有疑问,请在评论部分留言,我会在最短时间回复。
    • 如果本文帮助了您,也请评论关注,作为对我的一份鼓励。
    • 如果您感觉我写的有问题,也请批评指正,我会尽量修改。
    • 本文为原创,转载请注明出处。

      

  • 相关阅读:
    python爬虫系列之爬取多页gif图像
    python连续爬取多个网页的图片分别保存到不同的文件夹
    python多线程同步
    python多线程简单例子
    python定时器爬取豆瓣音乐Top榜歌名
    python模拟Get请求保存网易歌曲的url
    python使用get在百度搜索并保存第一页搜索结果
    python爬取某个网页的图片-如百度贴吧
    完全揭秘log file sync等待事件-转自itpub
    两表关联更新
  • 原文地址:https://www.cnblogs.com/lyxdw/p/9935137.html
Copyright © 2020-2023  润新知