BeautifulSoup是最初学习Python抓取网页时都会用到的一个库,可以使HTML内容结构化,从而更方便的获取内部数据,可以说是pythoner居家必备的model之一。本文主要对BeautifulSoup的安装与应用作简单的介绍。
注:本文使用的BeautifulSoup版本为BeautifulSoup4
1. BeautifulSoup安装
linux安装
- 可以通过系统软件包来安装:
$ apt-get install Python-bs4
; - 也可以通过
easy_install
或pip
安装:$ easy_install beautifulsoup4
,$ pip install beautifulsoup4
。
windows安装
- 可以在官方地址下载源码,然后通过
python setup.py install
安装; - 也可以通过
easy_install
或pip
安装,方法同上。
2. 简单浏览结构化数据
使用BeautifulSoup对HTML内容解析之后,HTML内容就变成了结构化数据,可以轻易对其中的DOM元素进行操作,比如获取数据,修改,删除等。
注:由于BeautifulSoup用于采集数据较多,本文只对查找数据做示例。
import requests from bs4 import BeautifulSoup as bsp url = 'http://www.zhidaow.com/' r = requests.get(url) soup = bsp(r.content) # 得到结构化数据soup print soup.title # 定位title标签 # <title> #张亚楠 ' BLOG - 天意从来高难问 # </title> print soup.title.name # title标签的名称 #title print soup.title.string # title标签中文本内容 #张亚楠 ' BLOG - 天意从来高难问 print soup.h2 # 定位HTML中第一个h2标签 # <h2 ><a href="/post/python-beautifulsoup" ><i ></i>Python BeautifulSoup4安装与简单应用</a> # </h2> print soup.h2['class'] # 第一个h2标签的class属性 #[u'title'] print soup.body.div.div.a # 获取到导航中第一个链接 #<a href="/">Home</a>
3. find_all和find对dom元素进行搜索
上一部分DOM元素的操作可以看到,可以通过简单的方法浏览到结构化数据,但精细的数据就不方便获取了,于是就用到了find_all()
和find()
两个搜索方法。
find_all()
是搜索整个dom树,并以list形式返回所有符合条件的元素;find()
也是搜索dom树,只是找到第一个就返回结果。
接上一部分的代码继续示例:
print soup.find_all('h2') # 查找所有的标题 ''' [<h2 ><a href="/post/python-beautifulsoup"><i ></i>Python BeautifulSoup4安装与简单应用</a> </h2>, <h2 ><a href="/post/python/2015-07-29"><i ></i>2015-07-29</a> </h2>, <h2 ><a href="/post/python-envelopes"><i ></i>Python用Envelopes发送邮件和附件</a> </h2>, <h2 ><a href="/post/people-who-live-with-monkey"><i ></i>这就是耍猴人 - 读《最后的耍猴人》有感</a> </h2>, <h2 ><a href="/post/scrapy-save-as-excel"><i ></i>Scrapy数据保存为excel</a> </h2>] ''' print soup.find('div', class_='powered_by').a.string # 查找支持信息里的文本信息 #Proudly Powered By FarBox.com import re print soup.find_all(text=re.compile('2015-04')) # 查找在2015-04发布的文章日期 #[u'2015-04-28 15:53', u'2015-04-24 17:01'] print soup.find_all('p', text=re.compile(u'书')) # 查找包含“书”的p标签 #[<p>我是在亚马逊图书编辑3月推荐书单中看到这本书的,编辑荐语中简单介绍了当代耍猴人的生活,猴与耍猴人的依赖。</p>, <p>2014年应该是我最急躁的一年,搬家,装修,还账,每天都搞得急匆匆,幸好一直读书,能稍微喘口气。</p>, <p>我主要在上下班的地铁上读书,每天加起来差不多一个小时,一年下来也读了20+本,平均一个月2本多。从书的类型来看,小说故事书偏多,历史,悬疑,纪实各类主题都有,专业书籍几乎没有(也符合我2014年目标不明确的情况)。</p>]
提醒:以上只是find_all()
和find()
的几个简单例子,由于篇幅有限无法一一列举,希望各位读者应用时举一反三,多测试。
4. BeautifulSoup其他实用功能
- BeautifulSoup默认选用Python标准库
html.parser
作为解析器,其实可以更改为lxml解析器,速度更快,容错能力也更强; - 所有文字在BeautifulSoup中都将转化为Unicode,因为BeautifulSoup自带了一个编码自动检测器,如下代码所示:
#coding=utf8 from bs4 import UnicodeDammit im = '悟缘' print type(im) #<type 'str'> dammit = UnicodeDammit(im) print dammit.unicode_markup #悟缘 print dammit.original_encoding #utf-8
文档中还有更多功能,比如修改,删除元素,这里就不一一列举。
参考文档
- BeautifulSoup中文文档http://beautifulsoup.readthedocs.org/zh_CN/latest/
- CSS 元素选择器http://www.w3school.com.cn/css/css_selector_type.asp
- lxml官方教程http://lxml.de/tutorial.html
还没有评论,来说两句吧...