BeatifulSoup
(1)介绍
Beautiful Soup
是Python库,用于解析HTML和XML文档。它提供简单而强大的工具,帮助用户从网页中提取数据。通过查找元素、遍历文档树和处理编码问题,它简化了数据提取过程。适用于网页抓取、数据挖掘和分析等应用场景。
| pip install beautifulsoup4 |
| from bs4 import BeautifulSoup |
(2)解析器
| soup = BeautifulSoup('页面源码',html.parser) |
| soup = BeautifulSoup('页面源码','lxml') |
| pip install html5lib |
| soup = BeautifulSoup('页面源码','html5lib') |
(3)使用
(1)生成soup对象
| soup = BeautifulSoup(open('index.html'),'lxml') |
| soup = BeautifulSoup('<html>data</html>','lxml') |
| import requests |
| from bs4 import BeautifulSoup |
| from fake_useragent import UserAgent |
| |
| url = 'http://www.baidu.com' |
| |
| headers = { |
| 'User-Agent': UserAgent().random |
| } |
| res = requests.get(url=url,headers=headers) |
| |
| soup = BeautifulSoup(res.text,'lxml') |
| print(soup) |
(4)BeautifulSoup四个对象
(1)BeautifulSoup对象
- 代表整个解析后的HTML文档,是最顶层的对象。
- 它包含了整个文档的全部内容,并提供了操作HTML文档的方法和属性。
| soup = BeautifulSoup(res.text, 'lxml') |
(2)Tag对象
- 表示HTML中的标签,如
<p>、<a>
等。
- Tag对象包含了标签的名称和对应的属性,并可以通过Tag对象来获取标签内的内容或进行进一步的操作。
- 可以通过传递HTML文档给BeautifulSoup类初始化的方式创建Tag对象。
(1)查找tag对象
| html_doc = """ |
| <html><head><title>The Dormouse's story</title></head> |
| <body> |
| <p class="title"><b>The Dormouse's story</b></p> |
| |
| <p class="story">Once upon a time there were three little sisters; and their names were |
| <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>, |
| <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and |
| <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>; |
| and they lived at the bottom of a well.</p> |
| |
| <p class="story">...</p> |
| """ |
| |
| soup = BeautifulSoup(html_doc, 'lxml') |
| |
| print(soup.head, type(soup.head)) |
| |
| |
| print(soup.title, type(soup.title)) |
| |
| |
| print(soup.a, type(soup.a)) |
| |
| |
| print(soup.p.b) |
| |
(2)查找tag对象的标签名和属性
- 通过
soup.tag名.属性名
获取到指定标签属性名对应的属性值
| print(soup.a.name) |
| |
| print(soup.p.b.name) |
| |
| print(soup.a["href"]) |
| |
| print(soup.a.attrs) |
(3)返回多值的属性
(4)修改tag的属性
| soup.a["class"] = ["sister c1"] |
| |
| del soup.a["id"] |
(5)获取标签对象的文本内容
| print(soup.p.string) |
| |
| |
| print(soup.p.strings) |
| |
| |
| for i in soup.p.strings: |
| print(i) |
| |
总结:
三种拿文本的方式
string
text
get_text()
(5)搜索文档树语法
(1)find_all
查找所有
| soup.find_all(name='a') |
| soup.find_all(name=['a', 'p']) |
| soup.find_all(True) |
| |
| |
| print(soup.find_all(href="http://example.com/tillie")) |
| |
| |
| print(soup.find_all(text="Elsie")) |
| |
| |
| print(soup.find_all(text=["Tillie", "Elsie", "Lacie"])) |
| |
| |
| print(soup.find_all("a", limit=2)) |
| |
| |
| print(soup.find_all("div", recursive=False)) |
(2)find
查找单个
find()
方法用于在文档中查找符合条件的tag,并返回第一个匹配的结果。
- 它可以通过指定name、attrs、recursive和string等参数来过滤查找结果。
(6)select语法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通