如何安装 Beautiful Soup 并将其用于 Web 抓取项目?

探索数据抓取与Beautiful Soup

在当今这个数据驱动的时代,传统的手动数据收集方式已显得过时。几乎每张办公桌上都配备了能够连接互联网的电脑,这使得网络成为了一个庞大的数据宝库。因此,更高效、更节省时间的现代数据获取方法应运而生,这就是网络抓取。在众多工具中,Python的Beautiful Soup库脱颖而出,成为网络抓取的热门选择。本文将详细介绍如何安装Beautiful Soup,并以此为起点,开始你的网络抓取之旅。

在深入了解Beautiful Soup的安装和使用方法之前,我们先来探讨一下为什么要选择它。

什么是Beautiful Soup?

假设你正在进行一项关于“COVID对人类健康影响”的研究,并且在网络上发现了一些包含相关数据的页面。但是,如果这些网站没有提供直接下载数据的选项,你该怎么办?这时,Beautiful Soup就派上用场了。

Beautiful Soup是Python中一个强大的库,专门用于从目标网站提取数据。它可以轻松地从HTML或XML文件中检索所需的信息。

这个想法最初由伦纳德·理查森在2004年提出,他一直致力于该项目至今。他甚至会在Twitter上自豪地更新每个Beautiful Soup的新版本。

尽管Beautiful Soup最初是使用Python 3.8开发的,但它也能与Python 3和Python 2.4完美兼容。

值得注意的是,网站通常会使用验证码来保护其数据,防止被自动化工具抓取。在这种情况下,可以修改Beautiful Soup中的“用户代理”标头,或者使用验证码解决API,来模拟真实浏览器的行为,从而绕过检测机制。

当然,如果你没有时间深入研究Beautiful Soup,或者想要更便捷地完成抓取任务,那么可以考虑使用一些网络抓取API,你只需提供URL,就能轻松获取所需数据。

对于有编程经验的开发者来说,使用Beautiful Soup进行抓取并不复杂。其语法简洁,易于导航网页,并能根据特定条件解析并提取数据。同时,它对新手也十分友好。

虽然Beautiful Soup可能不适合进行高级抓取,但它在处理标记语言编写的文件时表现出色。

此外,Beautiful Soup还拥有清晰详尽的文档,这无疑是其一大亮点。

接下来,我们来学习如何将Beautiful Soup安装到你的电脑上。

如何安装Beautiful Soup用于网络抓取?

Pip,一个于2008年开发的Python包管理器,现已成为开发者安装Python库和依赖项的标准工具。

通常,Pip会默认安装最新版本的Python。因此,如果你的系统上已经安装了任何最新的Python版本,那么就可以开始安装Beautiful Soup了。

打开命令提示符,然后输入以下pip命令即可安装Beautiful Soup:

pip install beautifulsoup4

你会在屏幕上看到类似下面的截图:

为了避免常见错误,请确保你的PIP安装程序已更新至最新版本。

更新pip安装程序的命令如下:

pip install --upgrade pip

到目前为止,我们已经成功地完成了本文的一半内容。

既然你已经在你的机器上安装了Beautiful Soup,接下来我们将深入研究如何使用它进行网页抓取。

如何导入并使用Beautiful Soup进行网络抓取?

在你的Python IDE中输入以下命令,将Beautiful Soup导入到当前的Python脚本中:

from bs4 import BeautifulSoup

现在,你就可以在你的Python文件中使用Beautiful Soup进行数据抓取了。

让我们来看一个代码示例,了解如何使用Beautiful Soup提取所需的数据。

我们可以告诉Beautiful Soup在目标网站的源代码中搜索特定的HTML标签,并抓取这些标签中包含的数据。

在本文中,我们将使用marketwatch.com网站,该网站会实时更新各公司的股票价格。让我们从该网站中提取一些数据,以便熟悉Beautiful Soup库。

首先,我们需要导入允许我们接收和响应HTTP请求的”requests”包和”urllib”包,以便从URL加载网页:

from urllib.request import urlopen
import requests

将网页链接存储在一个变量中,以便后续轻松访问:

url="https://www.marketwatch.com/investing/stock/amzn"

接下来,使用”urllib”库中的”urlopen”方法,将HTML页面存储在一个变量中。 将URL传递给”urlopen”函数,并将结果保存在变量中:

page = urlopen(url)

创建一个Beautiful Soup对象,并使用”html.parser”解析所需的网页:

soup_obj = BeautifulSoup(page, 'html.parser')

现在,目标网页的整个HTML脚本都已存储在”soup_obj”变量中。

在继续之前,让我们先查看目标页面的源代码,以便更好地了解HTML脚本和标签。

在网页上的任意位置单击鼠标右键。你会看到一个“检查”选项,如下图所示:

点击“检查”即可查看源代码:

在上面的源代码中,你可以找到关于网站界面上每个可见元素的标签、类和更具体的信息。

Beautiful Soup中的”find”方法允许我们搜索请求的HTML标签并检索数据。 为此,我们需要向该方法提供类名和标签,以便提取特定的数据。

例如,”Amazon.com Inc.”这个公司名称在网页源代码中被标记在”h1″标签下,并且类名为”company__name”。 我们可以将这些信息输入到”find”方法中,从而将相关的HTML代码片段提取到一个变量中:

name = soup_obj.find('h1', attrs={'class': 'company__name'})

接下来,让我们在屏幕上输出存储在变量”name”中的HTML脚本和相应的文本内容:

print(name)

print(name.text)

你将看到屏幕上打印了提取的数据,如下图所示:

抓取IMDb网站数据

很多人在观看电影之前,都会在IMDb网站上查看电影评分。接下来的示例将展示如何抓取IMDb网站上评分最高的电影列表,这将有助于你更熟悉如何使用Beautiful Soup进行网络抓取。

步骤1:导入Beautiful Soup和requests库:

from bs4 import BeautifulSoup
import requests

步骤2:将要抓取的URL分配给一个名为”url”的变量,以便在代码中轻松访问:

“requests”包用于从URL获取HTML页面:

url = requests.get('https://www.imdb.com/search/title/?count=100&groups=top_1000&sort=user_rating')

步骤3:在下面的代码片段中,我们将解析当前URL的HTML页面,并创建一个Beautiful Soup对象:

soup_obj = BeautifulSoup(url.text, 'html.parser')

变量”soup_obj”现在包含了所需网页的整个HTML脚本,如下图所示:

接下来,我们需要检查网页的源代码,找到我们要抓取的数据对应的HTML代码。

将鼠标光标悬停在要提取的网页元素上,然后右键单击,使用“检查”选项查看该特定元素的源代码。以下可视化图可以帮助你更好地理解:

你会发现,类名为”lister-list”的div标签包含了所有与评分最高的电影相关的数据,这些数据以连续的子div标签形式存在。

在每张电影卡的HTML代码中,在类名为”lister-item mode-advanced”的div标签下,我们找到一个”h3″标签,其中包含了电影的名称、排名和发行年份,如下图所示:

注意:Beautiful Soup中的”find”方法只会搜索第一个与给定输入名称相匹配的标签。 与”find”不同,”find_all”方法会查找所有与给定输入匹配的标签。

步骤4:使用”find”和”find_all”方法,将每部电影的名称、等级和年份的HTML代码片段存储在一个列表变量中:

top_movies = soup_obj.find('div',attrs={'class': 'lister-list'}).find_all('h3')

步骤5:循环遍历存储在变量”top_movies”中的电影列表,并使用以下代码,以文本格式提取每部电影的名称、排名和年份:

for movie in top_movies:
    movi_name = movie.a.text
    rank = movie.span.text.rstrip('.')
    year = movie.find('span', attrs={'class': 'lister-item-year text-muted unbold'})
    year = year.text.strip('()')
    print(movi_name + " ", rank+ " ", year+ " ")

在输出结果中,你会看到电影列表及其名称、排名和发行年份:

通过一些简单的Python代码,你可以轻松地将这些提取的数据导出到Excel表格中,以便进行后续的分析。

总结

本文详细介绍了如何安装Beautiful Soup进行网络抓取。此外,我提供的抓取示例应该可以帮助你快速上手使用Beautiful Soup。

既然你对如何安装Beautiful Soup进行网络抓取感兴趣,我强烈建议你阅读这篇易于理解的指南,以便更深入地了解如何使用Python进行网络抓取。