BeautifulSoup简称:bs4
作用:解析和提取数据
1. 安装:pip install bs4 或pip install bs4 -i https://pypi.douban.com/simple(使用国内镜像下载)
注意:需要安装在python解释器相同的位置,例如:D:\Program Files\Python3.11.4\Scripts
2. 导入:from bs4 importBeautifulSoup
3. 创建对象:
1)服务器响应的文件生成对象:
soup = Bequtifulsoup(response.read().decode(),’lxml’)
2)本地文件生成对象 soup = BeautifulSoup(open(‘1.html’),’lxml’)
注意:默认打开文件的编码格式gbk所以需要指定打开编码格式
4.使用:
4.1.bs4的一些函数: 1) find 2) findall 3) select
1) find:获取第一个符合条件的数据
2) findall:返回的是一个列表,且返回所有符合条件的标签,如果获取多个标签的数据,需要放在列表中
3) select:返回的是一个列表,并且会返回多个数据
4.2. 例子:
from bs4 import BeautifulSoup# 通过解析本地文件soup = BeautifulSoup(open("1224-解析-BeautifulSoup.html", encoding="utf-8"), "lxml")# print(soup)# 根据标签名查找节点print(soup.a)# 获取第一个符合条件的数据的 a标签print(soup.a.attrs)# 获取第一个a标签的属性和属性值# bs4的一些函数:1) find 2) findall3) select# 1) find:获取第一个符合条件的数据print(soup.find("a"))# 获取第一个a标签print(soup.find("a", title="a2"))# 根据title值来找到对应的标签对象print(soup.find("a", class_="a1"))# 根据class值找到对应标签对象,注意class需要添加下划线# 2) findall:返回的是一个列表,且返回所有符合条件的标签,如果获取多个标签的数据,需要放在列表中print(soup.find_all("a"))# 返回所有符合条件的a标签print(soup.find_all(["a", "span"]))# 多个需要放在列表中print(soup.find_all("li", limit=2))# limit:查找前几个数据# 3) select:返回的是一个列表,并且会返回多个数据print(soup.select("a"))print(soup.select(".a1"))# 可以通过.代表classprint(soup.select("#l1"))# 可以通过#代表id# 属性选择器------通过属性查找对应的标签print(soup.select("li[id]"))# 查找到li标签中有id的标签print(soup.select("li[id='l2']"))# 查找li标签中id为l2的标签# 层级选择器print(soup.select("div li"))# 后代选择器div下面的liprint(soup.select("div>ul>li"))# 子代选择器print(soup.select("a,li")) # 找到a标签和li标签的所有的对象# 节点信息:# 1)获取节点内容obj = soup.select("#d1")[0]# 如果标签对象中,只有内容,那么string和get_text()都可以用# 如果标签对象中,除了内容还有标签,那么string就获取不到数据,而get_text()可以获取到数据print(obj.string)# Noneprint(obj.get_text()) # 我是第二个span# 2)节点的属性obj1 = soup.select("#p1")[0]print(obj1.name)# name:标签的名字 pprint(obj.attrs)# 将属性值作为一个字典返回 {'id': 'd1'}# 3)获取节点的属性obj2 = soup.select("#p1")[0]print(obj2.attrs.get("class")) # ['p1']print(obj2.get("class")) # ['p1']print(obj2["class"]) # ['p1']
html:
Document - 张三
- 李四
- 王五
BeautifulSoup我是span
百度我是第二个span我是p标签