在当今数据驱动的世界中,传统的手动数据收集方法已经过时。 每张桌子上都有一台可以连接互联网的电脑,使网络成为一个巨大的数据来源。 因此,更高效、更省时的现代数据收集方法是网络抓取。 在网络抓取方面,Python 有一个名为 Beautiful Soup 的工具。 在这篇文章中,我将引导您完成 Beautiful Soup 的安装步骤,以开始网络抓取。
在安装和使用 Beautiful Soup 之前,让我们找出为什么要使用它。
什么是美汤?
假设您正在研究“COVID 对人们健康的影响”,并找到了一些包含相关数据的网页。 但是,如果他们不为您提供单击下载选项来借用他们的数据怎么办? Beautiful Soup 来了。
Beautiful Soup 是从目标站点提取数据的 Python 库的索引之一。 从 HTML 或 XML 页面检索数据会更舒服。
伦纳德·理查森 (Leonard Richardson) 于 2004 年提出了用于抓取网络的 Beautiful Soup 的想法。但他对该项目的贡献一直持续到今天。 他自豪地在他的 Twitter 帐户上更新每个 Beautiful Soup 的新版本。
虽然用于网络抓取的 Beautiful Soup 是使用 Python 3.8 开发的,但它也可以与 Python 3 和 Python 2.4 完美配合。
网站通常使用验证码保护从 AI 工具中拯救他们的数据。 在这种情况下,对 Beautiful Soup 中的“用户代理”标头进行一些更改或使用验证码解决 API 可以模仿可靠的浏览器并欺骗检测工具。
但是,如果您没有时间探索 Beautiful Soup 或希望高效轻松地完成抓取,那么您不应该错过检查这个网络抓取 API,您只需提供一个 URL 并在其中获取数据你的双手。
如果您已经是一名程序员,那么使用 Beautiful Soup 进行抓取不会令人生畏,因为它在导航网页和基于条件解析提取所需数据方面的语法非常简单。 同时,它对新手也很友好。
尽管 Beautiful Soup 不适用于高级抓取,但它最适合从以标记语言编写的文件中抓取数据。
清晰详细的文档是 Beautiful Soup 的另一个亮点。
让我们找到一种将漂亮的 Soup 放入您的机器的简单方法。
如何为网页抓取安装 Beautiful Soup?
Pip – 2008 年开发的一款轻松的 Python 包管理器,现在已成为开发人员安装任何 Python 库或依赖项的标准工具。
Pip 默认安装最新的 Python 版本。 因此,如果您的系统上安装了任何最新的 Python 版本,那么您就可以开始了。
打开命令提示符并键入以下 pip 命令以立即安装漂亮的 Soup。
pip install beautifulsoup4
您将在显示屏上看到类似于以下屏幕截图的内容。
确保您已将 PIP 安装程序更新到最新版本以避免常见错误。
将 pip 安装程序更新到最新版本的命令是:
pip install --upgrade pip
我们已经成功地涵盖了这篇文章的一半内容。
现在你已经在你的机器上安装了 Beautiful Soup,让我们深入了解如何使用它进行网页抓取。
如何导入和使用 Beautiful Soup 进行 Web 抓取?
在您的 Python IDE 中键入以下命令,将漂亮的 Soup 导入当前的 Python 脚本。
from bs4 import BeautifulSoup
现在 Beautiful Soup 已在您的 Python 文件中用于抓取。
让我们看一个代码示例,了解如何使用漂亮的 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 中的“查找”方法允许我们搜索请求的 HTML 标签并检索数据。 为此,我们将类名和标签赋予提取特定数据的方法。
例如,“Amazon.com Inc.”。 网页上显示的类名:“h1”下标记的“company__name”。 我们可以将此信息输入到“查找”方法中,以将相关的 HTML 片段提取到一个变量中。
name = soup_obj.find('h1', attrs={'class': 'company__name'})
让我们在屏幕上输出存储在变量“name”中的 HTML 脚本和所需的文本。
print(name) print(name.text)
您可以看到屏幕上打印的提取数据。
Web 抓取 IMDb 网站
我们中的许多人在看电影之前都会在 IMBb 的网站上查找电影评级。 此演示将为您提供收视率最高的电影列表,并帮助您习惯使用漂亮的 Soup 进行网络抓取。
第 1 步:导入漂亮的 Soup 和 requests 库。
from bs4 import BeautifulSoup import requests
第 2 步:让我们将要抓取的 URL 分配给名为“url”的变量,以便在代码中轻松访问。
“请求”包用于从 URL 获取 HTML 页面。
url = requests.get('https://www.imdb.com/search/title/?count=100&groups=top_1000&sort=user_rating')
第三步:在下面的代码片段中,我们将解析当前URL的HTML页面,创建一个美丽的Soup对象。
soup_obj = BeautifulSoup(url.text, 'html.parser')
变量“soup_obj”现在包含所需网页的整个 HTML 脚本,如下图所示。
让我们检查网页的源代码,找到我们要抓取的数据的 HTML 脚本。
将光标悬停在要提取的网页元素上。 接下来,右键单击它并使用检查选项查看该特定元素的源代码。 以下视觉效果将更好地指导您。
类“lister-list”包含所有与评分最高的电影相关的数据,作为连续 div 标签中的子部分。
在每张电影卡的 HTML 脚本中,在“lister-item mode-advanced”类下,我们有一个标签“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”中的电影列表,并使用以下代码从其 HTML 脚本中以文本格式提取每部电影的名称、排名和年份。
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 表中,并将其用于您的分析。
最后的话
这篇文章将指导您安装漂亮的 Soup 以进行网络抓取。 此外,我展示的抓取示例应该可以帮助您开始使用 Beautiful Soup。
由于您对如何安装 Beautiful Soup 进行网络抓取感兴趣,我强烈建议您查看这个易于理解的指南,以了解有关使用 Python 进行网络抓取的更多信息。