python 爬虫书籍web scraping中的一个问题

图片描述

1.他最后一句话说,用Utf-8编码,使得转义字符被消除了。为什么,没懂
2.content=content.decode("ascii","ignore")为何他转换成utf-8后又转成ascii?

谢谢了

阅读 4k
2 个回答

泻药,最近比较忙,刚闲下来。
第一个问题为什么utf8能消除转义字符?
呃,其实书里这句话不对,消除转义字符的不是这行代码,而是下一行代码的ignore参数,转义字符因为不能被ascii decode,如果不加ignore就会报错,加了ignore就会被忽略。
contents是一个str,由一系列不可改变的Unicode字符组成,本身不能被decode,用utf8 encode之后转为bytes才可以被decode。
encode是转为计算机能理解的二进制数,bytes就是一系列不可改变的介于0-255之间的数字。decode就是转为我们可以理解的字符。
ascii字符集远小于unicode字符集,用ascii decode的时候那些不在ascii字符集的字符就会导致报错,设了ignore参数后就会被忽略。
这算是一个trick吧233。

话说你这本书是谁写的,这种错误太不严谨了。

实践是检验问题的唯一标准,我们来实操一下:
先挑一段文字下手

>>> import re
>>> a = """1.他最后一句话说,用Utf-8编码,使得转义字符被消除了为什么,没懂
... 2.content=content.decode("ascii","ignore")为何他转换成utf-8后又转成ascii?"""
>>> a
'1.他最后一句话说,用Utf-8编码,使得转义字符被消除了。为什么,没懂\n2.content=co
ntent.decode("ascii","ignore")为何他转换成utf-8后又转成ascii?'

下面分别是替换换行符和空行为一个空格及把一堆连续空格换成一个

>>> b = re.sub('\n+', " ", a)
>>> b
'1.他最后一句话说,用Utf-8编码,使得转义字符被消除了。为什么,没懂 2.content=con
tent.decode("ascii","ignore")为何他转换成utf-8后又转成ascii?'
>>> c = re.sub(' +', " ", b)
>>> c
'1.他最后一句话说,用Utf-8编码,使得转义字符被消除了。为什么,没懂 2.content=con
tent.decode("ascii","ignore")为何他转换成utf-8后又转成ascii?'

下面utf8编码

>>> d = bytes(c, 'utf8')
>>> d
b'1.\xe4\xbb\x96\xe6\x9c\x80\xe5\x90\x8e\xe4\xb8\x80\xe5\x8f\xa5\xe8\xaf\x9d\xe8
\xaf\xb4\xef\xbc\x8c\xe7\x94\xa8Utf-8\xe7\xbc\x96\xe7\xa0\x81\xef\xbc\x8c\xe4\xb
d\xbf\xe5\xbe\x97\xe8\xbd\xac\xe4\xb9\x89\xe5\xad\x97\xe7\xac\xa6\xe8\xa2\xab\xe
6\xb6\x88\xe9\x99\xa4\xe4\xba\x86\xe3\x80\x82\xe4\xb8\xba\xe4\xbb\x80\xe4\xb9\x8
8\xef\xbc\x8c\xe6\xb2\xa1\xe6\x87\x82 2.content=content.decode("ascii","ignore")
\xe4\xb8\xba\xe4\xbd\x95\xe4\xbb\x96\xe8\xbd\xac\xe6\x8d\xa2\xe6\x88\x90utf-8\xe
5\x90\x8e\xe5\x8f\x88\xe8\xbd\xac\xe6\x88\x90ascii?'

嗯,我大中华文字被转成了如上鸟样
接下来解码

>>> e = d.decode('ascii', 'ignore')  # 这条语句的作用是把非ascii的部分丢掉
>>> e
'1.Utf-8 2.content=content.decode("ascii","ignore")utf-8ascii?'

结果就是汉字被去掉了,英文数字及标点幸存

所以帝国主义亡我之心不死啊,这根本就没有干掉转义字符。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题