BeautifulSoup是一个用来从HTML和XML文件中提取数据的Python库,最近需要爬取一些数据,简单记录一下BeautifulSoup的基本用法。BeautifulSoup的详细用法可以参考文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
BeautifulSoup的安装
目前BeautifulSoup的版本为第四版,可以直接使用pip进行安装:
pip install beautifulsoup4
之后可以通过pip list
检查BeautifulSoup是否安装成功。
BeautifulSoup基本使用方法
将一段文档传入BeautifulSoup的构造方法,可以得到一个文档对象,可以传入一段字符串(比如爬取得到的网页源码)或一个文件句柄。
# 使用BeautifulSoup之前需要先引入
from bs4 import BeautifulSoup
# 传入文件句柄的用法,构造方法返回的便是文档对象
soup = BeautifulSoup(open("index.html"))
html = "<html><body>data</body></html>"
# 传入文档字符串的用法
soup1 = BeautifulSoup(html)
BeatuifulSoup会选择最合适的解析器来解析这段文档,当然也可以手动指定解析器,不同解析器的区别可以参考引言处的官方文档,比如指定lxml为解析器,则可以使用:
BeautifulSoup(html,"lxml")
。
BeautifulSoup对象的种类
BeautifulSoup将HTML文档转换为一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为四种:Tag,NavigableString,BeautifulSoup和Comment。
Tag
当我们使用BeautifulSoup构造方法获取到文档对象之后,Tag对象可以看作HTML中的标签对象,可以使用.操作符获取,获取到Tag对象后可以获取对应HTML标签的属性,使用类似字典的操作方法获取。
soup = BeautifulSoup('<b class="bold">tag</b>')
# 通过.操作符可以获取对应的标签对象
type(soup.b) # <class 'bs4.element.Tag'>
tag = soup.b
# Tag可以通过.name获取自己的名字
tag.name # 'b'
# Tag的属性操作方法与字典相同
tag['class'] # 'bold'
# 也可以使用.attrs获取Tag的所有属性
tag