Python Bs4 回顾
BeautifulSoup
bs4主要使用find()方法和find_all()方法来搜索文档。
find()用来搜索单一数据,find_all()用来搜索多个数据
find_all()与find()
name –> tag名
string –> 内容
recursive –>是否搜索所有子孙节点 默认为true 设为false只搜索子节点
两方法用法相似这里以find_all()为例。
#搜索tag名 <title></title> soup.find_all("title") #关于属性 #搜索id为"link2"的标签 soup.find_all(id='link2') #这里属性的值可以使用字符串,正则表达式 ,列表,True soup.find_all(id=re.compile("elsie")) #可以指定多个条件 soup.find_all(href=re.compile("elsie"), id='link1') #对于有些不能指定的标签(data-foo) soup.find_all(attrs={"data-foo": "value"}) #对于class -->class为python保留字使用class_ soup.find_all(class_="top") #属性结束 #关于string(内容) #基础 内容为'Elsie'的 soup.find_all(string="Elsie") #内容在数组中的 soup.find_all(string=["Tillie", "Elsie", "Lacie"]) #内容匹配正则表达式的 soup.find_all(string=re.compile("Dormouse")) #匹配函数 soup.find_all(string=is_the_only_string_within_a_tag) #内容结束 #搜索限制 #限制搜索数量为2 soup.find_all("a", limit=2) #只搜索直接子节点 soup.html.find_all("a", recursive=False) #搜索限制结束
简写
soup.find_all("a") #等价于 soup("a")
soup.title.find_all(string=True) #等价于 soup.title(string=True)
CSS选择器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | Beautiful Soup支持大部分的CSS选择器 #搜索tag为title soup.select( "title" ) #通过tag标签逐层查找 soup.select( "html head title" ) #寻找直接子标签 soup.select( "head > title" ) soup.select( "p > #link1" ) #选择所有紧接着id为link1元素之后的class为sister的元素 soup.select( "#link1 + .sister" ) #选择p元素之后的每一个ul元素 soup.select( "p + ul" ) #同时用多种CSS选择器查询元素 soup.select( "#link1,#link2" ) #通过查询元素属性 soup.select( 'a[href="http://example.com/elsie"]' ) # [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>] soup.select( 'a[href^="http://example.com/"]' ) # [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>, # <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, # <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>] soup.select( 'a[href$="tillie"]' ) # [<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>] soup.select( 'a[href*=".com/el"]' ) # [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>] #通过查询元素属性结束 #通过语言查找 soup.select( 'p[lang|=en]' ) #查找第一个元素 soup.select_one( ".sister" ) |
find_其他
find_parents() 和 find_parent()
搜索当前节点的父节点
#查找一个标签a a = soup("a", id="link1") #查找a的父节点中的P标签 a_string.find_parent("p")
find_next_siblings() 和 find_next_sibling()
搜索当前节点后边解析的兄弟节点
(可以理解为搜索当前标签下边的同级节点)
find_previous_siblings() 和 find_previous_sibling()
搜索当前节点前边解析的兄弟节点
(可以理解为搜索当前标签上边的同级节点)
find_all_next() 和 find_next()
对当前节点之后的节点进行迭代
find_all_previous() 和 find_previous()
对当前节点之前的节点进行迭代
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异