如何用Python Beautiful Soup解析HTML内容

 更新时间:2023年05月15日 11:03:28   作者:naer_chongya  
Beautiful Soup是一种Python的解析库,主要用于解析和处理HTML/XML内容,详细介绍Beautiful Soup的使用方式和应用场景,本文给大家介绍的非常详细,需要的朋友可以参考下

Beautiful Soup是一种Python的解析库,主要用于解析和处理HTML/XML内容。它是基于Python的标准库和第三方库的结合,能够提供简便的方式实现文本的查找、修改和提取操作。

HTML指的是超文本标记语言(Hypertext Markup Language),即一种用于描述网页内容的标记语言。在我们访问一个网页的时候,浏览器便会将HTML内容下载到本地并以可视化的形式展示给我们。但是,在程序员的世界里我们需要能够对HTML内容进行更多的操作,而Beautiful Soup就是这种工具之一。

Beautiful Soup能够解析HTML内容并转化成一个复杂的树结构,然后可以通过标签名、属性名等多种方式进行内容的查找和修改。使用Beautiful Soup不仅能够让我们更高效地处理HTML内容,而且还能避免很多手动操作引起的误差。

下面我们来详细介绍Beautiful Soup的使用方式和应用场景。

Beautiful Soup的使用

Beautiful Soup提供的解析器有bs3、bs4,其中bs3逐渐被弃用,目前bs4为最新版。我们主要介绍bs4的使用。

首先,我们需要安装Beautiful Soup库。在终端输入以下命令:

pip install beautifulsoup4

安装成功后,我们通过import语句将Beautiful Soup库引入程序中。

from bs4 import BeautifulSoup

接下来假设我们有一个HTML文本:

<html>
  <head>
    <title>Beautiful Soup Tutorial</title>
  </head>
  <body>
    <div class="article">
      <h1>Python BeautifulSoup Tutorial</h1>
      <p class="intro">这是一篇Beautiful Soup入门教程</p>
      <p class="content">它将介绍Beautiful Soup的基本用法以及一些高级的应用场景</p>
      <a class="link" href="http://www.example.com">点击访问示例网站</a>
    </div>
  </body>
</html>

我们可以通过以下语句将HTML文本解析成BeautifulSoup对象:

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

其中,html_doc为上述HTML文本,'html.parser’为指定的解析器。

标签选择器

Beautiful Soup提供了多种标签选择器,能够便捷地从HTML文本中选择需要的内容。

选择标签名为h1的元素:

soup.select('h1')

结果为:

[<h1>Python BeautifulSoup Tutorial</h1>]

选择标签名为p且class属性为“intro”的元素:

soup.select('p.intro')

结果为:

[<p class="intro">这是一篇Beautiful Soup入门教程</p>]

选择标签名为a且class属性为“link”的元素,其href属性的值为"http://www.example.com":

soup.select('a.link[href="http://www.example.com"]')

结果为:

[<a class="link" href="http://www.example.com">点击访问示例网站</a>]

标签树操作

我们可以通过Beautiful Soup的树型结构,对HTML文本进行各种查找与修改操作。

嵌套选择标签

可以通过嵌套选择标签,定位到HTML文本中需要的标签,例如选择“div”标签下的所有“p”标签。

content = soup.select('div.article > p')

可以看到,选择结果为两个“p”标签。

[<p class="intro">这是一篇Beautiful Soup入门教程</p>, 
 <p class="content">它将介绍Beautiful Soup的基本用法以及一些高级的应用场景</p>]

.string/.text属性获取标签内容

可以通过.string属性或.text属性获取标签内的文本内容。

例如,获取标题“h1”标签内的文本内容:

title = soup.select('h1')[0].string
print(title)

输出结果为:

Python BeautifulSoup Tutorial

可以看到,.string相比于.text属性更加精确,可以避免获取到标签内的其他内容干扰。

.get()方法获取标签属性值

可以通过.get()方法获取标签内的属性值。例如,获取“a”标签的href属性值:

link = soup.select('a.link')[0].get('href')
print(link)

输出结果为:

http://www.example.com

修改HTML文本

除了查找与获取HTML文本的内容,我们还可以使用Beautiful Soup对HTML文本进行修改操作。

修改标签属性值

通过tag对象的.attrs属性可以获取标签的属性,使用该属性进行修改操作。

例如,将“a”标签的href属性值修改为“http://www.newexample.com”:

link_tag = soup.select('a.link')[0]
link_tag['href'] = 'http://www.newexample.com'
print(link_tag)

可以看到,输出结果中href属性值已经被修改。

<a class = "link" href = "http://www.newexample.com">点击访问示例网站</a>

修改标签文本内容

通过tag对象的.string属性或replace_with()方法可以修改标签的文本内容。

例如,将第一个“p”标签的文本修改为“欢迎来到Beautiful Soup教程”:

p_tag = soup.select('p.intro')[0]
p_tag.string = '欢迎来到Beautiful Soup教程'
print(p_tag)

输出结果为:

<p class = "intro">欢迎来到Beautiful Soup教程</p>

增加标签和删除标签

我们可以使用Beautiful Soup提供的函数,例如new_tag()、new_string()、append()和insert()等方法,创建新标签或文本,并插入HTML文本当中。

例如,我们通过append()方法在“body”标签的末尾增加一个“div”标签:

new_div = soup.new_tag('div')
new_div.string = '这是Beautiful Soup教程的结尾'
soup.select('body')[0].append(new_div)
print(soup)

可以看到,输出结果中的HTML文本结尾增加了一个新的“div”标签。

应用场景

美食网站信息爬取

我们将以美食网站中的“热门排行榜”为例进行演示。

首先,我们需要通过requests库获取HTML文本。以“热门排行榜”页面为例:

import requests
from bs4 import BeautifulSoup
url = 'https://www.meishij.net/chufang/diy/diy_rmphb/'
html = requests.get(url)
soup = BeautifulSoup(html.text, 'html.parser')

我们可以通过观察HTML文本,发现热门排行榜的信息在“div”标签中,具体位置在“div.zg_wrap”标签中,而餐品名称在“div.zg_wrap > li > div > p > a”标签中。因此,我们可以使用以下语句提取美食名称:

for i, li in enumerate(soup.select('div.zg_wrap > li')):
    name = li.select('div > p > a')[0].get('title')
    print(f'{i+1}. {name}')

可以看到,我们已成功提取出了美食名称,输出结果如下:

1. 汉堡
2. 糯米饭
3. 明炉烤鸭
4. 龙虾
5. 火锅
6. 美式薯条
7. 叉烧肉
8. 红烧肉
9. 快手美食
10. 韩国泡菜

至此,我们已经成功通过Beautiful Soup解析库,提取出了美食网站的热门排行榜信息,演示了Beautiful Soup在爬虫数据抓取和处理中的重要应用。

总结

Beautiful Soup作为一种解析库,能够方便地解析HTML/XML文本,提供多种标签选择器并支持树型结构操作,可以快速定位和处理HTML/XML中需要的内容,提高了爬虫数据抓取和处理的效率。对于Python爬虫初学者来说,掌握Beautiful Soup的使用是十分重要的。同时需要注意的是,在使用Beautiful Soup时需要遵循网络道德规范,遵守网站的规定,避免对网站造成过度访问和其他影响。

到此这篇关于如何用Beautiful Soup解析HTML内容的文章就介绍到这了,更多相关Beautiful Soup解析HTML内容内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python 面向切面编程 AOP 及装饰器

    Python 面向切面编程 AOP 及装饰器

    这篇文章主要介绍了Python 面向切面编程 AOP 及装饰器,AOP,就是面向切面编程,简单的说,就是动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程,更多相关资需要的小伙伴可以参考下面文章内容
    2022-05-05
  • django数据库自动重连的方法实例

    django数据库自动重连的方法实例

    这篇文章主要给大家介绍了关于django数据库自动重连的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用django具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • Pycharm汉化两种方法(pycharm改为中文版)

    Pycharm汉化两种方法(pycharm改为中文版)

    PyCharm是一款流行的Python开发环境,提供了丰富的功能和工具,使得Python的开发和调试变得更加方便和高效,下面这篇文章主要给大家介绍了Pycharm汉化的两种方法,所谓汉化就是将pycharm改为中文版,需要的朋友可以参考下
    2023-06-06
  • pytorch GPU和CPU模型相互加载方式

    pytorch GPU和CPU模型相互加载方式

    在PyTorch中,保存和加载模型有两种主要方式:直接保存整个模型结构加权重,或者只保存模型的参数,直接保存整个模型的方法简单,但不够灵活,且可能存在模型结构不一致的风险,推荐的做法是只保存模型参数,这种方法需要在加载前定义与原模型结构相同的模型
    2024-09-09
  • 解决yum对python依赖版本问题

    解决yum对python依赖版本问题

    这篇文章主要介绍了解决yum对python依赖版本问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • Django admin实现图书管理系统菜鸟级教程完整实例

    Django admin实现图书管理系统菜鸟级教程完整实例

    这篇文章主要介绍了Django admin实现图书管理系统菜鸟级教程完整实例,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • Python搭建APNS苹果推送通知推送服务的相关模块使用指南

    Python搭建APNS苹果推送通知推送服务的相关模块使用指南

    这里总结了一份Python搭建苹果推送通知推送服务的相关模块使用指南,包括PyAPNs、基于twisted框架的pyapns以及apns-client三个模块的介绍,需要的朋友可以参考下
    2016-06-06
  • python利用hook技术破解https的实例代码

    python利用hook技术破解https的实例代码

    python利用hook技术破解https的实例代码,需要的朋友可以参考一下
    2013-03-03
  • Python 2.6.6升级到Python2.7.15的详细步骤

    Python 2.6.6升级到Python2.7.15的详细步骤

    这篇文章主要介绍了Python 2.6.6升级到Python2.7.15的详细步骤,本文分步骤给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • 关于python变量的引用以及在底层存储原理

    关于python变量的引用以及在底层存储原理

    Python的变量,简单来说有数值型,布尔型,字符串类型,列表,元组,字典等6大类。那么不同变量类型在底层是如何存储的,关系到变量的引用,能否正确的掌握变量的相关操作?接下来小编就来为大家讲解python变量的引用以及在底层存储原理,需要的朋友可以参考一下
    2021-09-09

最新评论