我与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-宋前废帝,@福建-天涯。

时间: 2024-12-31 00:36:39

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

【python3的学习之路三】字符串和编码

字符串编码 由于计算机是美国人发明的,因此,最早只有127个字符被编码到计算机里,也就是大小写英文字母.数字和一些符号,这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122. 但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去. 但是全世界有上百种语言,各国有各国的标准就,会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码.因此,Unicode应运而生.Uni

Python3 urllib.parse 常用函数示例

Python3 urllib.parse 常用函数示例 http://blog.51cto.com/walkerqt/1766670 1.获取url参数. >>> from urllib import parse >>> url = r'https://docs.python.org/3.5/search.html?q=parse&check_keywords=yes&area=default' >>> parseResult = pa

python3.X版本与2.X版本里urllib库的不同

最近在学习使用python3写爬虫,刚开始写很菜(上次听到一个大佬说花了一天时间学习Python,第二天就开始做了个大的爬虫,大佬就是大佬岂是我等小菜能比的),因为之前学了一点2版本所以现在学习使用3版本写爬虫时会有些不同,下面主要说下urllib库的不同. 1.urllib库是什么? urllib库提供了一系列用于操作URL的功能.是python中一个功能特比强大的库,在python2中分别有urllib和urllib2两个库,而在python3中将urllib与urllib2合并成了urll

URL编码与解码(使用 Python3 urllib.parse) 与 贴吧小爬虫案例

一.parse.urlencode() 与parse.unquote() urllib 和urllib.request都是接受URL请求的相关模块,但是提供了不同的功能.两个最显著的不同如下: 1.urllib 仅可以接受URL,不能创建 设置了headers 的Request 类实例: 2.但是 urllib 提供 urlencode 方法用来GET查询字符串的产生,而urllib.request 则没有.(这是 urllib 和urllib.request 经常一起使用的主要原因) 3.编码

python3基础三

一.if语句 if condition_1: statement_block_1 elif condition_2: statement_block_2 else: statement_block_3 1.每个条件后面要使用冒号(:),表示接下来是满足条件后要执行的语句块 2.使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块 3.在Python中没有switch – case语句 4.条件:(1)检查是否相等: ==:(2)检查是否不相等:!=:(3)比较数字:==,<=,>=:(4

我与python3擦肩而过(一)—— Dict与collections.OrderredDict邂逅

最近一直在撸Python Data Analysis上的代码(书是基于Python2的,小白我用的python3),所以我下的时候多少有些改动. 这是9.4中的nltk词频分析关于Dict_key的问题. 源码是这样的: 运行报错: 查了一下subscriptable,这个链接解释的还是比较清楚的.简单讲就是说,dict_key不再和list,tuple等一样包含可脚本化的对象. 之后尝试几下均告失败,想着跳过这里,但后面词频分析用的也不少,只好硬着头皮上啦!Google半天,发现了它(ps:s

循序渐进Python3(三) -- 0 -- 初识函数

函数 如果我们要计算一个圆的面积,就需要知道它的半径,然后根据公式S=3.14*r*r算出它的面积,如果我们要算100个圆的面积,则每次我们都需要写公式去计算,是不是很麻烦,但是有了函数的话,我们就不再每次写S=3.14 *r*r, 而是把计算圆面积的功能写到一个函数里比如说s=areacircle(r),然后每次求面积的时候,只要把半径传递给函数就可以实现计算圆面积,这样我 们写代码就简单多了.这就是函数的功能.在编程中,函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段,能提高

python3 第三天

一.文件操作 f = open("file.txt",'r')  print(len(f.read()))     #文件总长度  print(f.tell())          #读完文件,文件指针位置 f.seek(0,0)              #偏移回文件头  print(f.readline())      #打印出文件中一行(第一行)  print f.tell()           #显示文件指针现在的位置  f.seek(2,1)              #从

如何创建一个APPS后台服务(三)去session化

可能是原因为用户体验的原因,基本上所有的APP应用都没有用session了,确实在手机这么小的键盘上,每次都要输入复杂层度为中的密码是很痛苦的,接下来为大家介绍一个去Session化的简单实现. 分以下步骤: 1.用户登录后生成一授权token // 生成tokenString accessToken = ComUtils.getUUId();String accessTime = DateUtil.getDate();rUser.setAccesTime(accessTime);rUser.s