python3解析库BeautifulSoup4的安装配置与基本用法

Python3解析库BeautifulSoup4的安装配置与基本用法

什么是BeautifulSoup4

BeautifulSoup4 是一个 HTML 或 XML 的解析库,可以将复杂的 HTML 或 XML 文档转换成一个树形结构,提供简单的、Python 风格的 API 来遍历文档。它可以解析 HTML 和 XML 标记文档,支持 HTML5 标准,同时还支持在其中查找标记、修改标签属性和添加新标记等操作,是爬虫中常用的一个库。

安装BeautifulSoup4

使用 pip 命令来安装 BeautifulSoup4,打开命令行,输入以下命令:

pip install beautifulsoup4

如果出现权限问题,使用管理员权限运行命令行窗口。

基本使用

首先导入 Beautiful Soup 库:

from bs4 import BeautifulSoup

解析静态 HTML 页面

使用 BeautifulSoup 类的 soup = BeautifulSoup(html_doc, 'html.parser') 方法解析静态 HTML 页面,其中 html_doc 是要解析的 HTML 页面。

例如:

from bs4 import BeautifulSoup

html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>

<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>

<p class="story">...</p>
"""

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

运行结果:

<html>
 <head>
  <title>
   The Dormouse's story
  </title>
 </head>
 <body>
  <p class="title">
   <b>
    The Dormouse's story
   </b>
  </p>
  <p class="story">
   Once upon a time there were three little sisters; and their names were
   <a class="sister" href="http://example.com/elsie" id="link1">
    Elsie
   </a>
   ,
   <a class="sister" href="http://example.com/lacie" id="link2">
    Lacie
   </a>
   and
   <a class="sister" href="http://example.com/tillie" id="link3">
    Tillie
   </a>
   ;
and they lived at the bottom of a well.
  </p>
  <p class="story">
   ...
  </p>
 </body>
</html>

使用 prettify() 方法可以打印出解析后的 HTML 页面的结构,更加清晰明了。

解析动态 HTML 页面

解析动态 HTML 页面需要使用 Python 的 Requests 库等第三方库来获取 HTML 代码。例如:

import requests
from bs4 import BeautifulSoup

url = 'https://www.zhihu.com/explore'

r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
print(soup.prettify())

运行结果:

<!DOCTYPE doctype html>
<html data-theme="light" lang="zh">
 <head>
  <title>
   发现 - 知乎
  </title>
  <meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible"/>
  <meta content="default" name="apple-mobile-web-app-status-bar-style"/>
  <meta charset="utf-8"/>
  <meta content="yes" name="apple-mobile-web-app-capable"/>
...

可以看到,这样就可以获取到动态 HTML 页面的代码,然后通过 BeautifulSoup 进行解析。

BeautifulSoup4 常用方法

find 和 find_all

find() 方法可以搜索文档树,查找符合条件的第一个元素,例如:

from bs4 import BeautifulSoup

html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>

<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>

<p class="story">...</p>
"""

soup = BeautifulSoup(html_doc, 'html.parser')
print(soup.find_all('a'))

运行结果:

[<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]

find_all() 方法可以查找文档中所有符合条件的元素,例如:

from bs4 import BeautifulSoup

html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>

<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>

<p class="story">...</p>
"""

soup = BeautifulSoup(html_doc, 'html.parser')
for link in soup.find_all('a'):
    print(link.get('href'))

运行结果:

http://example.com/elsie
http://example.com/lacie
http://example.com/tillie

select

select() 方法可以支持一些 CSS 选择器的功能,例如:

from bs4 import BeautifulSoup

html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>

<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>

<p class="story">...</p>
"""

soup = BeautifulSoup(html_doc, 'html.parser')
print(soup.select('title'))

运行结果:

[<title>The Dormouse's story</title>]

获取标签属性

使用标签对象的 tag['attribute'] 可以获取标签属性的值,例如:

from bs4 import BeautifulSoup

html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>

<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>

<p class="story">...</p>
"""

soup = BeautifulSoup(html_doc, 'html.parser')
tag = soup.a
print(tag['href'])

运行结果:

http://example.com/elsie

修改标签属性和字符串

例如:

from bs4 import BeautifulSoup

html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>

<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>

<p class="story">...</p>
"""

soup = BeautifulSoup(html_doc, 'html.parser')
soup.a['href'] = 'http://new-link.com'
soup.a.string = 'New Link'
print(soup.prettify())

运行结果:

<html>
 <head>
  <title>
   The Dormouse's story
  </title>
 </head>
 <body>
  <p class="title">
   <b>
    The Dormouse's story
   </b>
  </p>
  <p class="story">
   Once upon a time there were three little sisters; and their names were
   <a class="sister" href="http://new-link.com" id="link1">
    New Link
   </a>
   ,
   <a class="sister" href="http://example.com/lacie" id="link2">
    Lacie
   </a>
   and
   <a class="sister" href="http://example.com/tillie" id="link3">
    Tillie
   </a>
   ;
and they lived at the bottom of a well.
  </p>
  <p class="story">
   ...
  </p>
 </body>
</html>

以上就是 BeautifulSoup4 库的安装配置及基本用法的详细攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python3解析库BeautifulSoup4的安装配置与基本用法 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 设置链接颜色的伪类选择符的顺序为LVHA

    设置链接颜色的伪类选择符的顺序为LVHA,其中L、V、H、A分别代表的是Link、Visited、Hover、Active,即链接的默认状态、已访问状态、鼠标悬停状态、被点击状态。按照这个顺序,可以对链接状态进行不同的样式设置。 下面是设置链接颜色的伪类选择符的完整攻略: 1. 设置默认状态的链接颜色 对于链接的默认状态,使用a:link来进行设置。例如,下…

    css 2023年6月9日
    00
  • CSS——float属性及Clear:both备忘笔记

    CSS——float属性及Clear:both备忘笔记 float属性 float属性用于控制元素的浮动方向,可以让元素向左或向右浮动,但是要注意的是浮动的元素会脱离文档流,对其他元素的布局会有一定的影响。 语法: float: none | left | right; none:默认值,元素不进行浮动。 left:使元素向左浮动。 right:使元素向右浮…

    css 2023年6月10日
    00
  • vue滚动固定顶部及修改样式的实例代码

    下面是关于“vue滚动固定顶部及修改样式的实例代码”的完整攻略: 一、思路梳理 本文实例通过自定义指令来实现 vue 滚动固定顶部及修改样式的效果,核心步骤如下: 在指令 bind 钩子中获取当前元素的 offsetTop 和 scrollTop,记录在对象中。 在指令 inserted 钩子中添加滚动事件,判断当前元素是否到达顶部,如果到达顶部则设置该元素…

    css 2023年6月10日
    00
  • HTML5 manifest离线缓存的示例代码

    HTML5的manifest文件可以使得网站变得离线可用,并且可以提高网站的速度和性能。下面将会为大家介绍到如何使用HTML5 manifest离线缓存,并且给出两个示例代码。 HTML5 Manifest离线缓存的完整攻略 1. 创建manifest文件 在网站的根目录下创建一个文件名为manifest.appcache的文件,示例代码如下: CACHE …

    css 2023年6月9日
    00
  • 详解微信小程序-canvas绘制文字实现自动换行

    下面是详解“详解微信小程序-canvas绘制文字实现自动换行”的完整攻略: 1. 背景介绍 在微信小程序中,开发者可以使用canvas组件进行图形绘制。但是,canvas无法直接支持文字的自动换行,需要通过代码进行处理。 2. 实现思路 要实现自动换行,我们需要分析文字的长度和canvas的尺寸,然后在适当的位置加入换行符。 具体实现思路如下: 获取文本的宽…

    css 2023年6月11日
    00
  • DIV常见任务(上) —常规任务(显示滚动条/隐藏div/禁止事件冒泡等等)

    DIV常见任务(上) —常规任务(显示滚动条/隐藏div/禁止事件冒泡等等) 在网页设计过程中,我们常常需要对页面进行一些操作,如显示滚动条、隐藏 div、禁止事件冒泡等等。HTML 和 CSS 提供了丰富的标签和属性,可以方便地实现这些操作。以下是一些常见任务及对应的解决方案。 1. 显示滚动条 有时,我们会想要在页面显示滚动条,以便用户能够滚动页面。为此…

    css 2023年6月9日
    00
  • jquery实现图片切换代码

    下面我将提供一个完整的jquery实现图片切换的攻略。 步骤一:HTML结构 首先需要创建一个HTML结构,例如: <div class="slideshow"> <img src="img1.jpg" alt="Image 1" class="active"&…

    css 2023年6月11日
    00
  • 详解CSS的table-layout属性的用法

    下面是详解CSS的table-layout属性的用法的完整攻略。 什么是table-layout属性? 在CSS中,table-layout属性用来控制HTML表格的自动调整方式。table-layout属性有两个可能的值:auto和fixed。 如果table-layout设置为auto,则浏览器会根据内容自动设置列宽和表格宽度,这通常会导致表格大小不一。…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部