BeautifulSoup解析html - 简单的使用
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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | ''' 解析器: Python 内置标准库 优势:执行速度适中,文档容错能力强 BeautifulSoup(html,'html.parser') 3.7 or 3.2 容错能力较差 lxml HTML 速度快,文档容错能力强 (最常用) BeautifulSoup(html,'lxml') lxml XML 速度快 ,唯一支持xml解析 BeautifulSoup(html,'xml') html5lib 最好的容错性,速度慢,不依赖外部扩展 BeautifulSoup(html,'html5lib') ''' import requests from bs4 import BeautifulSoup response = requests.get( 'https://book.douban.com/' ) soup = BeautifulSoup(response.text, 'lxml' ) # 格式化(自动补全没有闭合标签) pret = soup.prettify() # print(pret) # 获取标签内容 print (soup.title.string.strip()) # soup.title.string 获取title标签的字符串 # 获取标签 print (soup.p) # (多个p标签)输出第一个p标签 # 获取标签名称 print (soup.title.name) # 获取属性2种方法 print (soup.p.attrs[ 'name' ]) print (soup.p[ 'name' ]) # 嵌套元素选择 print (soup.head.title.string) # 获取head > title 的内容 # 获取子节点标签 2中方法 print (soup.p.contents) # 返回list类型['<a>aaa</a>',....] 每个标签是一个元素 print (soup.p.children) # 返回list_itrator 类型 # 获取子节点和孙节点 print (soup.p.descendants) # 返回迭代器 # 获取父节点 print (soup.p.parent) # 获取祖先节点 print (soup.p.parents) # 获取兄弟节点 print (soup.p.next_siblings) # 下一个 print (soup.p.previous_siblings) # 上一个 # 标准选择器 # find_all(name,attr,recursive,text,**kwargs) # name (标签名称) print (soup.find_all( 'ul' )) # 所有的 print (soup.find_all( 'ul' )[ 0 ]) # 取第一个 for ul in soup.find_all( 'ul' ): print (ul.find_all( 'li' )[ 0 ]) # 返回tag类型 # attrs {'id': 'id1'} {'name': 'aaa'} print (soup.find_all(attrs = { 'name' : 'elem' })[ 0 ].string) # 获取标签内容 # CSS 选择器 (select) print (soup.select( '.ccc .box' )[ 0 ].string) # 就是这么爽 # 获取属性 print (soup.select( '.ccc .box' )[ 0 ][ 'id' ]) print (soup.select( '.ccc .box' )[ 0 ].attrs[ 'id' ]) # 获取内容 print (soup.select( '.ccc .box' )[ 0 ].get_text()) ''' 总结: 推荐使用lxml解析库,必要时使用html.parser 标签选择功能弱但是速度快 建议使用find(),find_all() 查询单个,或者多个 如果css选择器熟悉就用select() 记住常用的属性和文本值获取方法 ''' |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义