📜  标记对象 - Python Beautifulsoup(1)

📅  最后修改于: 2023-12-03 15:40:27.064000             🧑  作者: Mango

标记对象 - Python Beautifulsoup

BeautifulSoup是Python中最受欢迎的标记对象解析库之一。它能够从HTML和XML文档中提取数据并解析它们。它可以处理不良格式的文档,并且通过CSS选择器或一些特定的标记名称找到特定标记。

安装

可以使用pip命令安装:

pip install beautifulsoup4
解析HTML文档

使用BeautifulSoup解析HTML文档非常简单,只需要传入HTML字符串和解析器,即可创建一个解析对象:

from bs4 import BeautifulSoup

html_doc = '''
<html>
  <head>
    <title>标题</title>
  </head>
  <body>
    <p class="title"><b>文章标题</b></p>
    
    <p class="content">文章内容</p>
    <a href="http://example.com">链接</a>
  </body>
</html>
'''

soup = BeautifulSoup(html_doc, 'html.parser')

print(soup.prettify())

以上代码将把html_doc字符串解析成标记对象,并打印出来。其中,prettify()方法用于美化输出。输出结果如下:

<html>
 <head>
  <title>
   标题
  </title>
 </head>
 <body>
  <p class="title">
   <b>
    文章标题
   </b>
  </p>
  <p class="content">
   文章内容
  </p>
  <a href="http://example.com">
   链接
  </a>
 </body>
</html>
根据标记名获取标记对象

可以使用类似于字典的方式通过标记名称来获得标记对象:

title_tag = soup['title']
print(title_tag)

# 输出:<title>标题</title>

如果有多个标记,可以通过find_all()方法获取所有的标记,并返回一个列表:

p_tags = soup.find_all('p')
for tag in p_tags:
    print(tag)
根据属性获取标记对象

可以使用CSS选择器来根据属性获取标记对象:

tag = soup.select_one('p.title')
print(tag)

以上代码将获得属性classtitlep标记对象。如果有多个标记,则可以使用select()方法来获得一个列表。

从标记对象中获取信息

BeautifulSoup允许从标记对象中获取各种信息,包括标记对象的名称、属性、文本和子元素。

获取标记名称

可以使用name属性来获取标记对象的名称:

tag = soup.find('p')
print(tag.name)

以上代码将输出p

获取标记属性

可以使用attrs属性来获取标记对象的属性,该属性返回一个字典:

tag = soup.find('p')
print(tag.attrs)

以上代码将输出{'class': ['title']}

获取标记文本

可以使用string属性来获取标记对象的文本:

tag = soup.find('p', class_='title')
print(tag.string)

以上代码将输出文章标题

获取嵌套标记

可以使用children属性来获取标记对象的嵌套标记,并返回一个生成器:

tag = soup.find('body')
for child in tag.children:
    print(child)

以上代码将输出<p class="title"><b>文章标题</b></p><p class="content">文章内容</p><a href="http://example.com">链接</a>

定位特定标记

可以使用find()方法定位特定标记,该方法接受一个标记名称和一组属性作为参数。

tag = soup.find('p', {'class': 'title'})
print(tag)

以上代码将输出属性classtitlep标记对象。

修改标记对象

可以修改标记对象的文本或属性:

tag = soup.find('p', {'class': 'title'})
tag.string = '新的文章标题'
print(tag)

以上代码将把属性classtitlep标记对象的文本修改为新的文章标题

删除标记对象

可以使用extract()方法删除标记对象:

tag = soup.find('p', {'class': 'content'})
tag.extract()

以上代码将删除属性classcontentp标记对象。

总结

BeautifulSoup是一个强大的标记对象解析库,它能够轻松地解析HTML和XML文档,并提供了许多便捷的方法来获取标记对象、标记属性、标记文本和子元素。在Python开发过程中,BeautifulSoup经常被用来处理HTML和XML数据,因为它易于使用、功能强大和高效。