清洗网页数据

版权声明:欢迎转载,转载需要明确表明转自本文 https://blog.csdn.net/u012442157/article/details/81780526

字符集和编码规则的背景知识

ASCII

American Standard Code for Information Interchange美国标准信息交换码
只能表示128个字符
这个大家都是很熟悉的,从32是空格,然后是一堆符号,然后是48~57表示0~9,65~90是A~Z,97~122是a~z。
就是很少,也只有英文字母

Windows:ANSI

然后发展到了ANSI

HTML4:ISO-8859-1

ISO-8859-1
在html5之前,做网站,经常要把前台的数据为ISO-8859-1转换为UTF-8然后再进行使用。

HTML5:UTF-8

Unicode联盟(Unicode Consortium)开发了Unicode标准(Unicode Standard)。他们的目标是使用标注的Unicode转换格式,即UTF(Unicode Transformation Format)取代现有的字符集。
Unicode 是一种包含所有字符的编码表格(字符集)。utf-8是一种编码规则。
主要目的是为了不浪费流量,可变长。

UTF-8的字符可以是1到4字节长。UTF-8 可以代表 Unicode 标准中的任何字符。UTF-8 向后兼容 ASCII。UTF-8 是电子邮件和网页的首选编码。

全角半角的清洗

等中国人们得到计算机时,已经没有可以利用的字节状态来表示汉字,况且有6000多个常用汉字需要保存呢。但是这难不倒智慧的中国人民,我们不客气地把那些127号之后的奇异符号们直接取消掉, 规定:一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,前面的一个字节(他称之为高字节)从0xA1用到0xF7,后面一个字节(低字节)从0xA1到0xFE,这样我们就可以组合出大约7000多个简体汉字了。在这些编码里,我们还把数学符号、罗马希腊的字母、日文的假名们都编进去了,连在 ASCII 里本来就有的数字、标点、字母都统统重新编了两个字节长的编码,这就是常说的”全角”字符,而原来在127号以下的那些就叫”半角”字符了。中国人民看到这样很不错,于是就把这种汉字方案叫做 “GB2312“。GB2312 是对 ASCII 的中文扩展。

具体规则为:
全角字符unicode编码从65281~65374 (十六进制 0xFF01 ~ 0xFF5E)
半角字符unicode编码从33~126 (十六进制 0x21~ 0x7E)
空格比较特殊,全角为 12288(0x3000),半角为 32(0x20)
而且除空格外,全角/半角按unicode编码排序在顺序上是对应的(半角 + 65248 = 全角)

所以可以直接通过用+-法来处理非空格数据,对空格单独处理。

def DBC2SBC(string):
    rstring = ""
    for uchar in string:
        inside_code = ord(uchar)
        if inside_code == 0x3000:
            inside_code = 0x0020
        else:
            inside_code -= 0xfee0
        if inside_code < 0x0020 or inside_code > 0x7e:
            rstring += uchar
        else:
            rstring += chr(inside_code)
    return rstring

全角半角的映射还是很值得看一下的

for i in range(33, 127):
    print(i, chr(i), i+65248, chr(i+65248))

网页上爬取的内容的问题

reference

https://www.jb51.net/article/98443.htm
https://www.zhihu.com/question/23374078
https://blog.csdn.net/tcf_jingfeng/article/details/80134600
https://wenku.baidu.com/view/cb9fe505cc17552707220865.html

猜你喜欢

转载自blog.csdn.net/u012442157/article/details/81780526