PyCharm - Beautiful Soup
介绍
Beautiful Soup 主要是用来解析提取 HTML 和 XML 文件中的数据。
现在官网推荐使用 Beautiful Soup 4 ,已经被移植到了BS4中。
安装 Beautiful Soup:pip instal beautifulsoup4
使用格式:
实例化 Beautifulsoup 传入被 解析的 HTML 文档内容和解析器,得到一个对象。
# 导包 from bs4 import BeautifulSoup # 实例化构造对象 bs = BeautifulSoup(html_doc, "html.parser") # 参数: -html_doc:被解析的html文档内容 -html.parser:解析器
解析器:
常用:BeautifulSoup(html_doc, "html.parser")、BeautifulSoup(xml_doc, "xml")
1、遍历文档树
直接通过标签名选择,特点是选择速度快,但如果存在多个相同的标签则只能返回第一个。
用法:
from bs4 import BeautifulSoup html_doc = """ <html> <head> <title>这是标题</title> </head> <body> <p id="test01">测试01</p> <p id="test02">测试02</p> <a href="/web.html" name="123">web测试</a> <div> <a href="/api.html">api测试</a> <a href="/app.html">app测试</a> </div> </body> </html> """ # 获取BeautifulSoup对象 bs = BeautifulSoup(html_doc, "html.parser") # 1、对象.标签名 【获取标签的名字】 print(bs.title) # <title>这是标题</title> print(bs.p) # <p id="test01">测试01</p> # 2、对象.attrs 【获取标签的所有属性】 print(bs.a.attrs) # {'href': '/web.html', 'name': '123'} # 3、对象.get("属性名") 【获取属性的值】 print("id属性值:" + bs.p.get("id")) # id属性值:test01 # 4、对象.text 、对象.get_text() 、 对象.string 【获取标签的文本内容】 print("标签内容:" + bs.a.text) # 标签内容:web测试 print("标签内容:" + bs.a.get_text()) # 标签内容:web测试 print("标签内容:" + bs.a.string) # 标签内容:web测试
2、搜索文档树
通过方法 find()
和 find_all(过滤器)
去文档中查找指定标签。
5种过滤器:
亲测使用:字符串、列表
from bs4 import BeautifulSoup html_doc = """ <html> <head> <title>这是标题</title> </head> <body> <p id="test01">测试01</p> <p id="test02">测试02</p> <a href="/web.html" name="123">web测试</a> <div> <a href="/api.html">api测试</a> <a href="/app.html">app测试</a> </div> </body> </html> """ # 获取BeautifulSoup对象 bs = BeautifulSoup(html_doc, "html.parser") # 对象.find("标签名") 【查找一个指定标签,返回标签的区间内容】 print(bs.find('head')) # <head><title>这是标题</title></head> # bs.find_all("标签名") 【查找所有指定标签,返回所有】 print(bs.find_all('a')) # [<a href="/web.html">web测试</a>, <a href="/api.html">api测试</a>, <a href="/app.html">app测试</a>] # 遍历a标签 for i in bs.find_all("a"): # href的属性值 print("href: {}".format(i.get("href"))) ''' 遍历输出: href: /web.html href: /api.html href: /app.html '''