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标签