爬虫获取网页内容要准确获取网页的编码格式,有utf-8,gbk,gb2312等等。
今天在爬新闻网站时候,发现同一个网页会分不同的编码,但是获取HTML节点相关是根据第一个编码格式来的,拿人民网新闻页源码举例。
当我使用python的
url = "http://theory.people.com.cn/n1/2019/1001/c40531-31383055.html"
r = request.Request(url)
html = request.urlopen(r).read().decode('utf-8','ignore')
这个方法的时候,decode的编码一定要选择图1的第一个箭头的编码,不然会乱码。但是怎么获取呢,就是一个很坑的过程,python常用的charset工具会把网页解析成windows****的编码方式,不准确,于是我想到用正则匹配到第一个编码格式。
real_charset = re.findall(r'charset=(.*?)"',html[0:500],re.S)[0]
html = request.urlopen(r).read().decode(real_charset,'ignore')
这里解析网页的时候选择utf-8就行,然后正则匹配,拿到正确的编码格式再继续下面的网页内容解析。