Python用BeautifulSoup解析网页

BeautifulSoup是Python提取网页信息必不可少的工具

BeautifulSoup下载地址:Crummy.com

下载后解压到Python27目录下,在cmd下,进入BeautifulSoup文件夹(该目录下有个setup.py文件),输入命令:

python setup.py build
python setup.by intall

当然, 如果没有将python.exe加到环境变量中,上面命令的python要加全路径,如果没有cd进beautifulSoup文件夹,setup.py也要加全路径

在程序文件中引入的时候要注意from BeautifulSoup import BeautifulSoup在新版本会报 No module named BeautifulSoup的错误,原因是Beautifulsoup 4改名为bs4了,所以要用 from bs4 importBeautifulSoup

关于语法还是看官方文档吧,所幸有中文版:Beautiful Soup 4.2.0 文档

关于编码问题,BeautifulSoup内部使用的是Unicode,并且会自动检测输入文件的编码类型然后转换为unicode,但是值得注意的是,BeautifuSoup的默认输出编码是utfi-8 -_-|||,而cmd默认编码是gbk,所以输出遇到中文会遇到乱码问题。另外还有一种常见的导致乱码的问题是网页是gb2312的,BeautifulSoup编码检测bug,BeautifulSoup检测顺序是:

1. 创建 Soup 对象时传递的 fromEncoding 参数;
2. XML/HTML 文件自己定义的编码;
3. 文件开始几个字节所表示的编码特征,此时能判断的编码只可能是以下编码之一:UTF-#,EBCDIC 和 ASCII;
4. 如果你安装了 chardet,BeautifulSoup 就会用 chardet 检测文件编码;
5. UTF-8;
6. Windows-1252。

我遇到一个网页,它没有指定编码,但是实际编码是gb2312,看代码

soup = BeautifulSoup(page)
print soup.title.encode('gb2312')
print soup.original_encoding

输出结果是:

<title>
	&#180;ò&#211;&#161;&#212;¤&#192;&#192;
</title>
windows-1252

所以我们需要直接指定formEncoding,代码改为

soup = BeautifulSoup(page,from_encoding="gb2312")
print soup.title.encode('gb2312')
print soup.original_encoding

输出结果为

<title>
	打印预览
</title>
gb2312

 注意:fromEncoding,originalEncoding变量都名为from_encoding,original_encoding了,在网上查资料需要注意

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注