本指南将介绍以下内容:
- Jupyter Notebook 是什么
- 为什么使用 Jupyter Notebook 抓取网页
- 如何通过分步教程学习使用 Jupyter Notebook
- Jupyter Notebook 在网络数据抓取中的具体应用
现在就来一探究竟吧!
Jupyter Notebook 是什么?
在 Jupyter 语境中,notebook 是“一种可共享的文档,结合了计算机代码、简明语言描述、数据、图表、图形和交互式控件”。
Notebook 提供了交互式环境,用于代码原型设计和讲解、数据探索和可视化,以及想法分享。具体来说,由 Jupyter Notebook 应用创建的 notebook 称为 Jupyter Notebook。
Jupyter Notebook 应用是一款服务器-客户端应用,支持通过网页浏览器编辑和运行 notebook 文档,既可以在本地桌面上执行,也可以安装在远程服务器上。
Jupyter Notebook 可提供所谓的“内核”,即用于执行 Notebook 文档中代码的“计算引擎”。具体来说,ipython
内核负责执行 Python 代码(但也有其他语言的内核):
Jupyter Notebook 应用包含一个控制面板,支持显示本地文件、打开现有 notebook 文档、管理文档内核等常见操作:
为什么使用 Jupyter Notebook 抓取网页?
Jupyter Notebook 专为数据分析和研发目的而设计,在网页抓取方面具有以下优势:
- 交互式开发:可以将代码分成易管理的小型代码块(称为“单元格”)来编写和执行。所有单元格相互独立运行。这大大简化了测试和调试的过程。
- 组织性:可以在单元格中使用 markdown 来记录代码、解释逻辑并添加注释或说明。
- 与数据分析工具的集成:由于 Jupyter Notebook 集成了
pandas
、matplotlib
、seaborn
等库,抓取数据后,您可以立即在 Python 中进行数据清洗、处理和分析。 - 可重复性和共享性:Jupyter Notebook 既可以通过
.ipynb
文件(标准格式)轻松分享给他人,也可以转换为 ReST、Markdown 等其他格式。
优缺点
使用 Jupyter Notebook 抓取数据的优缺点如下:
👍优点:
- 逐步调试:由于每个单元格都能独立运行,您可以将数据提取代码分解到不同的单元格中分别运行。通过这种方式,您可以分块调试代码,逐个运行单元格并在这一层面捕获错误。
- 文档撰写:在单元格中使用 Markdown 创建文件,记录抓取代码的工作原理,并描述所做选择背后的逻辑。
- 灵活性:在 Jupyter Notebook 中,您可以在同一环境下完成网页抓取、数据清洗和分析等工作。这种设计方便您在不同环境之间灵活切换,既可以在 IDE 中编写抓取脚本,也可以在其他平台分析数据。
👎缺点:
- 不适合大型项目:Jupyter Notebook 容易变成冗长文档,因此在大规模数据抓取项目中并非最佳选择。
- 性能限制:在处理大型数据集或运行长脚本时,Notebook 可能会变得缓慢或无响应。详细了解如何提高网页抓取的效率。
- 不适合自动化:如果您需要定期运行抓取工具或将其部署为大型系统的一部分,Jupyter Notebook 并非最佳选择,这是因为 Jupyter Notebook 主要是为以交互方式手动执行单元格而设计。
如何使用 Jupyter Notebook 抓取网页:分步教程
想必您现已了解为什么使用 Jupyter Notebook 抓取网页。接下来,让我们看看如何在实际抓取场景中运用 Jupyter Notebook!
先决条件
要跟随本教程操作,请确保您的系统满足以下先决条件:
- Python 3.6 或更高版本:3.6 以上的 Python 版本都可以。具体来说,我们将通过
pip
安装依赖项,pip 已预装在所有 3.4 以上版本的 Python 中。
第 1 步:设置环境并安装依赖项
假设您的项目主文件夹名为 scraper/
。完成这一步后,文件夹结构如下:
scraper/
├── analysis.ipynb
└── venv/
其中:
analysis.ipynb
是包含所有代码的 Jupyter Notebook 文档。venv/
包含虚拟环境。
您可以按如下方式创建 venv/
虚拟环境目录:
python -m venv venv
如为 Windows 系统,要激活虚拟环境,请运行以下命令:
venv\Scripts\activate
相应地,如为 macOS/Linux 系统,请执行以下命令:
source venv/bin/activate
在激活的虚拟环境中,安装本教程所需的全部库:
pip install requests beautifulsoup4 pandas jupyter seaborn
这些库的用途如下:
requests
:执行 HTTP 请求。beautifulsoup4
:解析 HTML 和 XML 文档。pandas
:功能强大的数据操作和分析库,非常适合处理 CSV 文件或表格等结构化数据。jupyter
:基于网页的交互式开发环境,用于运行和共享 Python 代码,非常适合数据分析和可视化。seaborn
:基于 Matplotlib 的 Python 数据可视化库。
要创建 analysis.ipynb
文件,首先需要进入 scraper/
文件夹:
cd scraper
然后,使用以下命令创建全新 Jupyter Notebook:
jupyter notebook
现在,您可以通过 locahost8888
访问 Jupyter Notebook 应用了。
点击“新建 > Python 3”选项创建新文件:
新文件将自动命名为 untitled.ipynb
。您可以在控制面板中重命名新文件:
非常好!至此,Jupyter Notebook 已充分设置,可以抓取网页了。
第 2 步:确定目标页面
本教程将指导您如何从 worldometer 网站抓取数据。具体来说,目标页面是展示美国每年二氧化碳排放量的表格数据页面:
第 3 步:获取数据
您可以按照以下方式从目标页面获取数据并保存为 CSV 文件:
import requests
from bs4 import BeautifulSoup
import csv
# URL of the website
url = "https://www.worldometers.info/co2-emissions/us-co2-emissions/"
# Send a GET request to the website
response = requests.get(url)
response.raise_for_status()
# Parse the HTML content
soup = BeautifulSoup(response.text, "html.parser")
# Locate the table
table = soup.find("table")
# Extract table headers
headers = [header.text.strip() for header in table.find_all("th")]
# Extract table rows
rows = []
for row in table.find_all("tr")[1:]: # Skip the header row
cells = row.find_all("td")
row_data = [cell.text.strip() for cell in cells]
rows.append(row_data)
# Save the data to a CSV file
csv_file = "emissions.csv"
with open(csv_file, mode="w", newline="", encoding="utf-8") as file:
writer = csv.writer(file)
writer.writerow(headers) # Write headers
writer.writerows(rows) # Write rows
print(f"Data has been saved to {csv_file}")
这段代码的作用如下:
- 它使用
requests
库中的requests.get()
方法向目标页面发送 GET 请求,然后通过response.raise_for_status()
方法检查请求是否成功。 - 它使用
BeautifulSoup
解析 HTML 内容,具体方法为:创建BeautifulSoup
类的实例,然后使用soup.find()
方法查找表格
选择器。此方法尤其适合用来查找存放数据的表格。如果您不熟悉此语法,请阅读我们的 BeautifulSoup 网页抓取指南。 - 它使用列表推导式来提取表格的标题。
- 它使用
for
循环来获取表格中的所有数据,同时跳过标题行。 - 最后,它会打开新的 CVS 文件并将获取的所有数据添加进去。
您可以将这段代码粘贴到单元格中,然后按 SHIFT+ENTER
运行。
运行单元格的另一种方法是选中单元格并按下控制面板中的“运行”按钮:
太棒了!看到“数据已保存至 emissions.csv”,即表示数据已成功提取。
第 4 步:确保数据正确无误
您已将数据保存到 CVS 文件中。打开 CSV 并查看一切是否正常,数据转换过程中有时会出现问题。为此,您可以在新单元格中输入以下代码:
import pandas as pd
# Load the CSV file into a pandas DataFrame
csv_file = "emissions.csv"
df = pd.read_csv(csv_file)
# Print the DataFrame
df.head()
这段代码的功能如下:
- 通过
pandas
库的pd.read_csv()
方法,将 CSV 文件打开为数据框格式。 - 使用
df.head()
方法打印数据框的前 5 行。
预期结果如下:
太棒了!接下来只剩下展示所提取的数据了。
第 5 步:直观展示数据
现在,您可以按照自己的需求来分析数据。例如,您可以使用 seaborn
创建折线图来展示二氧化碳排放量随时间的变化趋势。具体操作如下:
import seaborn as sns
import matplotlib.pyplot as plt
# Load the CSV file into a pandas DataFrame
csv_file = "emissions.csv"
df = pd.read_csv(csv_file)
# Clean column names be removing extra spaces
df.columns = df.columns.str.strip().str.replace(' ', ' ')
# Convert 'Fossil CO2 Emissions (tons)' to numeric
df['Fossil CO2 Emissions (tons)'] = df['Fossil CO2 Emissions (tons)'].str.replace(',', '').astype(float)
# Ensure the 'Year' column is numeric
df['Year'] = pd.to_numeric(df['Year'], errors='coerce')
df = df.sort_values(by='Year')
# Create the line plot
plt.figure(figsize=(10, 6))
sns.lineplot(data=df, x='Year', y='Fossil CO2 Emissions (tons)', marker='o')
# Add labels and title
plt.title('Trend of Fossil CO2 Emissions Over the Years', fontsize=16)
plt.xlabel('Year', fontsize=12)
plt.ylabel('Fossil CO2 Emissions (tons)', fontsize=12)
plt.grid(True)
plt.show()
这段代码的作用如下:
- 它使用
pandas
实现以下目的:- 打开 CSV 文件。
- 使用
df.columns.str.strip().str.replace(' ', ' ')
方法清理列名,去除多余的空格(如果不使用该方法,本例中的代码可能会出现错误)。 - 访问“化石燃料二氧化碳排放量(吨)”这一列,并使用
df['Fossil CO2 Emissions (tons)'].str.replace(',', '').astype(float)
方法将数据转换为数字。 - 访问“年份”这一列,使用
pd.to_numeric()
方法将值转换为数字,并使用df.sort_values()
方法将值按升序排列。
- 它使用
matplotlib
和seaborn
库(seaborn 基于matplotlib
构建,因此在安装seaborn
时也会自动安装 matplotlib)创建实际图表。
预期结果如下:
太棒了!这就是 Jupyter Notebook 抓取的强大之处。
第 6 步:整合所有代码
最终的 Jupyter Notebook 网页抓取文档如下所示:
请注意不同的代码块及其各自的输出结果。
Jupyter Notebook 在网页抓取中的具体应用
接下来,我们将讨论 Jupyter Notebook 在网页抓取中的具体应用!
教程
请记住,Jupyter Notebook 中的每个单元格都可以独立执行。再加上对 Markdown 的支持,该库可谓创建分步教程的绝佳工具。
例如,您可以交替使用代码单元格和解释其背后逻辑和推理的单元格。在网页抓取方面,Jupyter Notebook 特别有用。它可以用来为初级开发人员创建教程,指导他们逐步完成整个过程。
科研(研发)
Jupyter Notebook 具有交互性强且便于导出协作的特点,非常适合用于科研和研发工作。这一点在网页抓取方面尤为明显。例如,在抓取需要多次尝试的网站时,您可以在同一个 Notebook 中保存所有测试,并用 Markdown 标注成功的测试。
数据探索
Jupyter 库专为数据探索和分析而设计,因此成为机器学习网页抓取的理想工具。
这种应用场景正好适用于您之前编写的示例。您能够在同一个编程环境中既抓取网站数据,又立即进行分析。
结语
本文介绍了 Jupyter Notebook 在网页抓取方面的强大功能,该工具可为数据提取和分析提供灵活的交互式环境。然而,如果要进行大规模的数据抓取或自动化任务,Jupyter Notebook 可能不是最高效的解决方案。
这正是我们的网页抓取工具的用武之地。无论您是寻求基于 API 的解决方案的开发人员,还是寻找无需编程方案的用户,我们的网页抓取工具都能助您简化数据收集并提升效率。借助 100 多个域名的专用端点、批量请求处理、自动 IP 轮换和验证码破解等功能,您可以轻松实现大规模的结构化数据提取。立即创建免费 Bright Data 账户,体验我们的抓取解决方案并测试我们的代理!