我与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-宋前废帝,@福建-天涯。
我与python3擦肩而过(三)—— 我去。。又是编码问题——urllib.parse.unquote的更多相关文章
- (转)Python3 模块3之 Urllib之 urllib.parse、urllib.robotparser
原文:https://blog.csdn.net/qq_36148847/article/details/79153738 https://blog.csdn.net/zly412934578/art ...
- Python3网络爬虫(1):利用urllib进行简单的网页抓取
1.开发环境 pycharm2017.3.3 python3.5 2.网络爬虫的定义 网络爬虫,也叫网络蜘蛛(web spider),如果把互联网比喻成一个蜘蛛网,spider就是一只在网上爬来爬去的 ...
- Python3 urllib.parse 常用函数示例
Python3 urllib.parse 常用函数示例 http://blog.51cto.com/walkerqt/1766670 1.获取url参数. >>> from url ...
- python3下urlopen解析中文url编码错误
这是在ipython下测试的结果: In [24]: x Out[24]: 'http://127.0.0.1:8000/xxx/?id=a45ex0bad3c9&game=五子棋' In [ ...
- WebRTC VideoEngine超详细教程(三)——集成X264编码和ffmpeg解码
转自:http://blog.csdn.net/nonmarking/article/details/47958395 本系列目前共三篇文章,后续还会更新 WebRTC VideoEngine超详细教 ...
- Python3编写网络爬虫01-基本请求库urllib的使用
安装python后 自带urllib库 模块篇 分为几个模块如下: 1. urllib.request 请求模块 2. urllib.parse 分析模块 3. urllib.error 异常处理模块 ...
- 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 ...
- SSE图像算法优化系列三十一:Base64编码和解码算法的指令集优化。
一.基础原理 Base64是一种用64个Ascii字符来表示任意二进制数据的方法.主要用于将不可打印的字符转换成可打印字符,或者简单的说是将二进制数据编码成Ascii字符.Base64也是网络 ...
- python3 第三十一章 - 模块
1.什么是模块 如果从Python解释器退出并再次输入,您所做的定义(函数和变量)将丢失.因此,如果要编写一个稍长的程序,最好使用文本编辑器为解释器准备输入,并以该文件作为输入运行它.这称为创建脚本. ...
随机推荐
- Qt之可重入与线程安全
简述 本篇文章中,术语"可重入性"和"线程安全"被用来标记类与函数,以表明它们如何被应用在多线程应用程序中. 一个线程安全的函数可以同时被多个线程调用,甚至调用 ...
- jsp之 ---- 页面重定向和请求转发(笔记之深度说明)
1. HttpServletResponse对象的sendRedirect(String location)方法称作重定向. 如果location地址前面加上“/”,则表示 相对于Servlet容 ...
- Remove Nth Node From End of List [LeetCode]
Given a linked list, remove the nth node from the end of list and return its head. For example, Give ...
- myeclipse 6.5配置tomcat7.X
软件安装:myeclipse 6.5 Apache Tomcat/7.0.47 安装完成后开始配置 1. 随便展开一个tomcat配置选项,这里配置到tomcat6.x,如下图:
- 使用tomcat配置文件下载服务器,自定义下载列表
先上图,利用tomcat,这个下载界面没有代码,点击文件名即可下载 详细参考:http://tomcat.apache.org/tomcat-7.0-doc/default-servlet.html
- mysql在一台服务器搭建主从1
1. 登录mysq的方法: mysql-S /tmp/mysql.sock 登录3306 mysql -S /tmp/mysql_slave.sock 登录3307 mysql -h 127.0. ...
- CAP Confusion: Problems with ‘partition tolerance’
by Henry Robinson, April 26, 2010 The 'CAP' theorem is a hot topic in the design of distributed data ...
- java.io中流的操作:字节流、字符流
java.io中流的操作:字节流.字符流(1)使用File类打开一个文件(2)通过字节流或字符流的子类指定输出的位置(3)进行读/写操作(4)关闭输入/输出 1.字节流:主要是byte类型数据,以by ...
- visual studio 2013连接Oracle 11g并获取数据:(一:环境搭建)
C# WinForm案例: 目标: visual studio 中点击按钮,就可获取到Oracle中数据表的内容 1.安装Visual Studio 2013 ,推荐如下网址,下载ISO镜像,一路ne ...
- cmd的xcopy命令
C#项目的PostEvent里经常会用到xcopy命令,复制目录时容易出错,如下: xcopy sourceDir targetDir,其中的2个目录最后不能有反斜杠"",而目录类 ...