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日

相关文章

  • CSS伪类/伪元素选择器整理

    对于“CSS伪类/伪元素选择器整理”的完整攻略,我会详细讲解以下内容: 一、什么是CSS伪类/伪元素? 在CSS中,伪类和伪元素是两种不同的选择器类型,它们可以在某些特定情况下用来选择HTML中的元素,并应用相应的CSS样式。以下是它们的定义: 伪类:表示一些HTML元素的特定状态,例如:hover(鼠标悬停状态)、:active(执行点击操作时的状态)等。…

    css 2023年6月10日
    00
  • thinkphp jquery实现图片上传和预览效果

    下面是详细的攻略。首先,我们需要明确一下需要具备的技能和环境: 技能要求:- 熟悉thinkphp的基本操作和使用- 掌握jquery的基本操作和使用- 能够使用HTML5的FormData和FileReader对象实现文件上传和预览功能 环境要求:- PHP环境- 浏览器支持HTML5- 支持jquery的Web开发环境 接下来,我们将分步骤引导您完成整个…

    css 2023年6月11日
    00
  • 设计适用于打印的CSS样式

    设计适用于打印的 CSS 样式的攻略,可以分为以下几步: 1. 定义样式表 在 HTML 文件中,定义一个新的样式表,该样式表仅应用于打印界面。可以通过以下方式实现: <link rel="stylesheet" type="text/css" media="print" href=&quot…

    css 2023年6月9日
    00
  • CSS去除列表默认边距的简单方法

    当使用标准的HTML列表标签(如 ul 和 ol)时,它们通常会有默认的内边距和外边距,这可能会破坏你的页面设计。如果你想完全控制你的列表的样式,你需要消除默认边距。下面是CSS去除列表默认边距的简单方法的攻略: 方法一:使用通配符选择器 可以使用通配符选择器来影响所有的列表,然后清除所有的内边距和外边距。这是最简单的方法,但也可能会影响到所有其他元素的样式…

    css 2023年6月9日
    00
  • Angular4 中常用的指令入门总结

    Angular4 中常用的指令入门总结可以帮助初学者快速掌握 Angular4 中常用的指令知识,包括结构指令、属性指令、双向绑定等内容。下面是一个完整的攻略: 目录 结构指令 ngIf ngFor 属性指令 ngClass ngStyle 双向绑定 ngModel 1. 结构指令 在 Angular4 中,结构指令用于控制 HTML 元素的显示和隐藏,以及…

    css 2023年6月9日
    00
  • 实现表格中行点击时的渐扩效果!

    要实现表格中行点击时的渐扩效果,可以采用以下步骤: 在HTML页面中创建一个表格,并将每一行封装在一个<tr>标签内: <table> <tr> <td>行1, 列1</td> <td>行1, 列2</td> </tr> <tr> <td>…

    css 2023年6月11日
    00
  • Javascript Bootstrap的网格系统,导航栏和轮播详解

    关于Javascript Bootstrap的网格系统、导航栏和轮播的完整攻略,我将从以下几个方面进行详细讲解: 什么是Bootstrap Bootstrap网格系统 Bootstrap导航栏 Bootstrap轮播 1. 什么是Bootstrap Bootstrap是Twitter开源的用于前端开发的HTML、CSS和JS框架,它的主要目标是让开发人员快速…

    css 2023年6月10日
    00
  • 利用div+jquery自定义滚动条样式的2种方法

    可能出于演示的需要,这个问题的格式不够规范,我先做一些处理再回答: 详细讲解 “利用 div + jQuery 自定义滚动条样式的 2 种方法” 的完整攻略 引言 使用自定义滚动条可以让你的网站看上去更现代化,在提高用户体验的同时也可以增强网站风格的统一性。本文将会详细讲解两种方法: 利用 ::-webkit-scrollbar 伪元素(需要使用 -webk…

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