介绍
简介
BeautifulSoup 是一个可以从HTML或XML文件中提取数据的Python库
安装
pip install beautifulsoup4
解析器
Beautiful Soup支持Python标准库中的HTML解析器(’html.parser’),还支持一些第三方的解析器,比如lxml,推荐用后者,纯C实现的,速度更快:
pip install lxml
引入及容错处理
from bs4 import BeautifulSoup
soup=BeautifulSoup(html_doc,'lxml')
soup=soup.prettify() #容错处理===>自动补全代码
选择器
一个html是一个对象,对象可以嵌套对象;每个soup对象下的每一个标签,也都是对象。
标签选择器
- 标签选择器:即直接通过标签名字选择,选择速度快,如果存在多个相同的标签则只返回第一个:
soup.head # soup.tag
- 链式选择:
soup.parentTag.childTag
标准选择器
find与find_all方法: 可根据标签名,属性,内容查找文档,但是find只找第一个元素。
- 按照标签名查找:
soup.find(name='div')
- 按照属性查找:
soup.find(name='div', attrs={'id': 'aritcle-body'})
- 按照文本内容查找:
soup.find(text='xxxxxxx')
按照完整内容匹配(是==而不是in),得到的结果也是内容
CSS选择器
通过select方法来选择,支持CSS选择的器的所有方式,在此不详述。
soup.select('.myclass span')
通过class属性选择soup.select('#article-body')
通过id选择
关联查找
- 子节点、子孙节点:
- 子节点:
soup_obj.contents
返回列表;soup_obj.children
返回迭代器 - 子孙节点:
soup_obj.descendants
- 子节点:
- 父节点、祖先节点:
soup_obj.parent
父节soup_obj.parents
祖先节点 - 兄弟节点:
soup_obj.next_siblings
;soup_obj.previous_siblings
常用属性和方法
- 获取标签的名称:
soup_obj.name
- 获取标签的属性:
soup_obj.attrs
返回所有属性的字典;soup_obj.get('href')
获取具体属性的值 - 获取标签的内容:
soup_obj.string
;soup.tag.text
- 清空内部元素,保留当前标签:
soup_obj.clear()
- 清空,包括自己:
soup_obj.decompose
- 同上,但是有返回值:
soup.extract()
- 正则查找:
rep = re.comiple('^p')
,soup.find_all (name=rep)