如何使用 BeautifulSoup 提取网页标题?

如何使用 BeautifulSoup 提取网页标题?

在对爬虫有所了解后,我们再来学习一些如何能够把爬回来的数据进行处理,结合正则表达式进行数据提取有时会显得有些力不足,这时候我们就可以利用 BeautifulSoup 知名的 HTML 解释库 辅助我们进行数据抓取。

更多Python文章,请阅读:Python 教程

下面是一个简单的例子,假设我们需要从指定的 URL 中提取标题:

import requests
from bs4 import BeautifulSoup

url = 'https://www.baidu.com/'
response = requests.get(url)

soup = BeautifulSoup(response.text, 'html.parser')
title = soup.title.string

print(title)

首先,我们需要引入第三方库 requestsBeautifulSoup。对于具体的解释,我们会在之后进行稍作讲解。

接着,我们使用 Pythonrequests 模块来获取指定 URL 的网页内容。解析网页内容则基于 BeautifulSoup 函数。在初始化中,我们使用了参数 'html.parser',这是 BeautifulSoup 中解析器的一种,能够帮助我们有效地解析 HTML 和 XML 。

通过以上代码,我们已经完成了从一个 URL 中提取标题的操作。接下来,我们来进行一些详细的讲解。

网页数据抓取

Python 中,我们一般使用第三方库作为 HTTP 客户端来进行网页请求,这里我们使用的是 requests 库, requests 是一个简单易用的 HTTP 库,提供了 HTTP 的基本功能,并加入了常见的应用级协议的支持。

虽然 requests 常用于访问网页并获取 HTML 文件中的数据,但它同样可以用于访问接口和进行文件上传。

对于使用 requests 库操作,在进行完相关的准备工作后,我们引入 requests ,并使用 request.get() 方法来获取目标 URL 的网页内容,具体语法如下:

import requests

response = requests.get(url)

其中, url 即为目标 URL 的网址。

调用 get 方法后, requests 会向目标 URL 发送一个 GET 请求,并返回 HTTP 的响应结果。常用的响应结果的属性参数如下:

  • response.status_code:HTTP 请求的响应状态码;
  • response.text:HTTP 响应内容的 Unicode 文本,也就是获取到的 HTML 源码;
  • response.content:HTTP 响应内容的二进制形式;
  • response.encoding:HTTP 响应内容编码格式;
  • response.headers:HTTP 响应头信息。

需要注意的是,需要对返回的信息进行捕捉处理,以免因网络、目标网页处理逻辑等原因,导致返回异常。

掌握 BeautifulSoup 语法

在抓取了网页后,我们需要使用 BeautifulSoup 进行数据处理,从而获取我们所需要的数据。有多种解析器可以选择,但其本质是解析器的区别。

其中, html.parser 是 Python 的 built-in library,且执行速度也较快。针对一些较为复杂的 HTML,使用 lxml 以及 html5lib 等库处理就会更佳适用。

获取 beautifulsoup4 后,我们需要导入 BeautifulSoup 模块,示例代码如下:

from bs4 import BeautifulSoup
soup = BeautifulSoup('<html>data</html>', 'html.parser')
soup2 = BeautifulSoup('<html>data</html>', 'lxml')

可以看到,我们通过 from bs4 import BeautifulSoup 将模块引入,然后即可使用 BeautifulSoup 这个类进行解析。

同时,我们还需要查看文档中所获取 HTML 文档的编码格式,获取方法就是观察网页源代码中响应头信息,通过 response.encoding 获取即可。

HTML 数据的提取

在前面的例子中,我们使用 soup.title 获取了文档中的标题信息。实际上,在 BeautifulSoup 中,有多种标签格式用于定位文档节点,这里介绍两种常用方法:标签选择器和 CSS 选择器。

标签选择器

针对简单的 HTML 结构,我们可以直接使用标签选择器,通过对 HTML 标签名称的定位,获取其中的文本信息。

下面是一个使用标签选择器的例子,我们通过 soup.p 获取 HTML 中的段落信息:

import requests
from bs4 import BeautifulSoup

url = 'https://www.baidu.com/'
response = requests.get(url)

soup = BeautifulSoup(response.text, 'html.parser')
paragraph = soup.p.string

print(paragraph)

在以上代码中,我们通过 soup.p 获取了 HTML 中的第一个段落信息,再通过 string 属性获取其中的文本数据。

在标签选择器中,我们还可以通过调用 soup.find_all()soup.select() 方法来获取多个 HTML 标签中的数据。其中,find_all() 方法可以通过指定参数来筛选符合要求的节点,如:

soup.find_all('a')   # 获取 HTML 中所有的链接信息

select() 方法可以使用 CSS 选择器按照样式表中相同的规则进行筛选,如:

soup.select('.class')   # 获取 HTML 中样式为 class 的元素

CSS 选择器

CSS 选择器的使用方式和在 CSS 样式表中类似,通过选择器、类、ID、属性等来选择 HTML 元素。

下面是一个简单的例子,我们通过 soup.select() 获取了 HTML 中 class="title"h1 元素:

import requests
from bs4 import BeautifulSoup

url = 'https://www.baidu.com/'
response = requests.get(url)

soup = BeautifulSoup(response.text, 'html.parser')
title = soup.select('h1.title')[0].get_text()

print(title)

在这个例子里,我们使用了 soup.select() 方法,传入选择器 h1.title,从而选择 class="title"h1 元素。同时,.get_text() 方法获取选中元素的文本信息。

需要注意的是,没有符合选择器的 HTML 元素时,返回的结果为 an empty list,因此在使用时需要进行判断。

结论

在本文中,我们讲述了如何使用 BeautifulSoup 库来提取网页标题信息。通过请求指定 URL,获取 HTML 内容后,我们通过使用 BeautifulSoup 的选择器语法,以及标签选择器和 CSS 选择器的使用方式,成功地从 HTML 中抓取了标题文本信息。通过实例代码的演示,相信大家已经有了一定的了解和掌握。在实际开发过程中,还需要自行发掘和探索,获取更多的数据处理技巧。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程