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
'''

感谢原博主的文章:BeautifulSoup4的使用 - Mr-Yang` - 博客园 (cnblogs.com)

posted @ 2023-11-18 01:09  鹿先森JIAN  阅读(24)  评论(0编辑  收藏  举报