• 我与python3擦肩而过(三)—— 我去。。又是编码问题——urllib.parse.unquote


        记得初学python时就学的爬虫,经常遇到编码问题(其实在python3里面编码问题已经很少了。。。),用requests库就挺方便解决这些问题的。近来有共同学习python的程序员写了个电子书网站,想要相关的爬虫,于是,我去试了试。。。当然,第一步就遇到“编码问题”,这次requests就用不上啦。

        观察发现,小说网站搜索网页之后,跳转的网址形如:http://so.biquge.la/cse/search?s=7138806708853866527&q=%CD%EA%C3%C0%CA%C0%BD%E7

    而且,查询不同的内容,变化的只是 &q= 之后的内容。开始以为是加密(好吧,我真的是小白。。。),大牛告诉说只是个编码。。。用到urllib.parse.unquote(在python2里面是urllib.unquote)。

        在python3里面具体是这样的:

    from urllib import parse
    
    city = parse.unquote('%E5%B1%B1%E8%A5%BF',)  # encoding='utf-8'
    print(city)  # 山西
    

        这是请教别人的一个例子,完美运行了。但是当我去套用这个格式的时候,却出现了乱码。检查发现,和所在网页的编码方式有关(上面代码也截取自网页)。例子的网页的编码是UTF-8,而要解析的小说网站的编码是GBK。于是修改代码如下:

    name = parse.unquote('%CE%E4%B6%AF%C7%AC%C0%A4', encoding='gb18030')  # gbk亦可
    print(name)  # 武动乾坤
    

      也就是说,第一个例子中默认的是 encoding='utf-8'。(ps:关于GBK与GB18030,可参考这篇文章。)

    到这里呢就算是能成功解码啦,于是。。。自然想到,就是怎么编回去呢?下面,“倒车”请注意:

    x = parse.quote('武动乾坤', encoding='gb18030')
    print(x)
    

      输出结果:

    %CE%E4%B6%AF%C7%AC%C0%A4
    

      和想象中的一样简单,即,将unquote改为quote。

      至此,算是对编码问题又多一份了解,当然,以后路还很长呢!

      最后感谢群里面两位大神的相助@Irvine-宋前废帝,@福建-天涯。

  • 相关阅读:
    DOM_节点操作创建表格
    表单提交
    HTML常用标签
    网络通讯详解
    java===TCP(多线程多客户端同时上传字节数据:图片为例)
    java===TCP(文件上传功能)
    java===UDP
    java==IO=随机读写文件
    git中的基本命令
    ansible中roles的简单使用
  • 原文地址:https://www.cnblogs.com/buzhizhitong/p/5697426.html
Copyright © 2020-2023  润新知