记得初学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-宋前废帝,@福建-天涯。

我与python3擦肩而过(三)—— 我去。。又是编码问题——urllib.parse.unquote的更多相关文章

  1. (转)Python3 模块3之 Urllib之 urllib.parse、urllib.robotparser

    原文:https://blog.csdn.net/qq_36148847/article/details/79153738 https://blog.csdn.net/zly412934578/art ...

  2. Python3网络爬虫(1):利用urllib进行简单的网页抓取

    1.开发环境 pycharm2017.3.3 python3.5 2.网络爬虫的定义 网络爬虫,也叫网络蜘蛛(web spider),如果把互联网比喻成一个蜘蛛网,spider就是一只在网上爬来爬去的 ...

  3. Python3 urllib.parse 常用函数示例

    Python3 urllib.parse 常用函数示例 http://blog.51cto.com/walkerqt/1766670  1.获取url参数. >>> from url ...

  4. python3下urlopen解析中文url编码错误

    这是在ipython下测试的结果: In [24]: x Out[24]: 'http://127.0.0.1:8000/xxx/?id=a45ex0bad3c9&game=五子棋' In [ ...

  5. WebRTC VideoEngine超详细教程(三)——集成X264编码和ffmpeg解码

    转自:http://blog.csdn.net/nonmarking/article/details/47958395 本系列目前共三篇文章,后续还会更新 WebRTC VideoEngine超详细教 ...

  6. Python3编写网络爬虫01-基本请求库urllib的使用

    安装python后 自带urllib库 模块篇 分为几个模块如下: 1. urllib.request 请求模块 2. urllib.parse 分析模块 3. urllib.error 异常处理模块 ...

  7. Python把json格式的string对象转变成dict对象操作、Python3不能使用urllib2、urllib.parse.urlencode(params).encode(encoding='UTF8')

    son格式的string对象转变成dict对象操作 content=eval(content)#json字典转化 Python3不能使用urllib2 直接使用urllib.request替换urll ...

  8. SSE图像算法优化系列三十一:Base64编码和解码算法的指令集优化。

        一.基础原理 Base64是一种用64个Ascii字符来表示任意二进制数据的方法.主要用于将不可打印的字符转换成可打印字符,或者简单的说是将二进制数据编码成Ascii字符.Base64也是网络 ...

  9. python3 第三十一章 - 模块

    1.什么是模块 如果从Python解释器退出并再次输入,您所做的定义(函数和变量)将丢失.因此,如果要编写一个稍长的程序,最好使用文本编辑器为解释器准备输入,并以该文件作为输入运行它.这称为创建脚本. ...

随机推荐

  1. linux下如何优雅的挂载一个外界设备(比如优盘)

    最近从事linux,实验室一个破服务器,能连上网,但是输入这样的命令:        yum -y install gcc yum -y install gcc-c++ ,居然说是没有这样的镜像,也罢 ...

  2. 初学java之事件响应(结合接口来设置在同一个界面上!)

    package wahaha; public class test_1 { public static void main( String args[] ) { WindowActionEvent w ...

  3. HTTP && socket

    http://blog.csdn.net/zeng622peng/article/details/5546384 1.TCP连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终 ...

  4. iOS 中对 HTTPS 证书链的验证

    这篇文章是我一边学习证书验证一边记录的内容,稍微整理了下,共扯了三部分内容: HTTPS 简要原理: 数字证书的内容.生成及验证: iOS 上对证书链的验证. HTTPS 概要 HTTPS 是运行在 ...

  5. 数据类型转换的三种方式 Convert,parse和TryParse的解析

    以Int类型为例,具体说明Convert.ToInt32(object value),int.Parse(object value)和int.TryParse(string s,out int res ...

  6. hdu5882 Balanced Game

    题目链接:hdu5882 Balanced Game 题解:每种手势的攻防数一样,不难想到n为奇数时游戏平衡. #include<cstdio> #include<cstring&g ...

  7. 9. shell环境

    • printenv –打印部分或所有的环境变量 • set –设置 shell 选项 • export —导出环境变量,让随后执行的程序知道. • alias –创建命令别名 1.shell环境:s ...

  8. JavaScrip的DOM操作(13号讲)

    1.DOM的基本概念 DOM是文档对象模型,这种模型为树模型,文档是指标签文档:对象是指文档中每个元素:模型是指抽象化的东西 2.Windows对象操作 一.属性和方法 二.Window.open(& ...

  9. 你需要知道的三个 CSS3技巧(转)

    1. 在CSS中用attr()显示HTML属性值 attr()功能早在CSS 2.1标准中就已经出现,但现在才开始普遍流行.它提供了一个巧妙的方法在CSS中使用HTML标签上的属性,在很多情况下都能帮 ...

  10. 《Play for Java》学习笔记(一)项目框架

    从今天开始认真复习<Play for JAVA>,该书以一个案例为主线,以前为应付项目马马虎虎看了一遍,好多地方都不明白!现在跟着这本书再走一遍,认真模拟,当做一个项目啦!! 一.Play ...