zoukankan      html  css  js  c++  java
  • 我与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-宋前废帝,@福建-天涯。

  • 相关阅读:
    经常使用排序算法
    windows和Linux内存的对齐方式
    Oracle实现数据不存在则插入,数据存在则更新(insert or update)
    hysbz 2243 染色(树链剖分)
    HDU 3864 D_num Miller Rabin 质数推断+Pollard Rho大整数分解
    逆序排列
    PHP盛宴——经常使用函数集锦
    怎样 TabHostFragment自己定义 tab键(indicator)
    不是IT圈人的IT创业优劣势!
    2星|汪丁丁《经济的限度》:访谈文字稿+几篇偏专业的文章,不适合无经济学专业背景知识的读者阅读
  • 原文地址:https://www.cnblogs.com/buzhizhitong/p/5697426.html
Copyright © 2011-2022 走看看