python3爬虫的编码问题

来源:互联网 发布:乌海四中网络选课系统 编辑:程序博客网 时间:2024/06/06 00:10

from urllib.request import urlopen
textPage = urlopen("https://fengshenfeilian.github.io/")
print(textPage.read())

在非纯英文网页上爬取数据时,总是会出现各种意想不到的乱码。

比如上文的代码运行结果含有中文,且所有中文都被替换成乱码。

这个问题是因为python默认的把文本读成ascII

在这里我们要是用UTF-8编码格式,就可以把一切字符正常的显示了

上文代码改成:

from urllib.request import urlopen
textPage = urlopen("https://fengshenfeilian.github.io/")
print(str(textPage.read(),'utf-8'))

显示结果完全正确

用BeautifulSoup 和Python 3.x 对文档进行UTF-8 编码,如下所示:
html = urlopen("https://fengshenfeilian.github.io/")
bsObj = BeautifulSoup(html)
content = bsObj.find("div", {"id":"mw-content-text"}).get_text()
content = bytes(content, "UTF-8")
content = content.decode("UTF-8")

你可能打算以后用网络爬虫的时候全部采用UTF-8 编码读取内容,毕竟UTF-8 也可以完美地处理ASCII 编码。但是,要记住还有9% 的网站使用ISO 编码格式。所以在处理纯文本文档时,想用一种编码搞定所有的文档依旧不可能。

处理HTML 页面的时候,网站其实会在<head> 部分显示页面使用的编码格式。大多数网站,尤其是英文网站,都会带这样的标签:
<meta charset="utf-8" />
而ECMA(European Computer Manufacturers Association,欧洲计算机制造商协会,http://www.ecma-international.org/)网站的标签是这样:
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
如果你要做很多网络数据采集工作,尤其是面对国际网站时,建议你先看看meta 标签的内容,用网站推荐的编码方式读取页面内容。

0 0
原创粉丝点击