现在我们已经搭建好环境,并对 HTML 表格有了基本了解,可以开始构建一个从 HTML 表格中提取数据的网络爬虫了。在本节中,我们将逐步演示如何构建一个简单的爬虫,它能够从表格中提取数据并以结构化格式存储。
第一步是使用 requests 库向包含目标 HTML 表格的网页发送 HTTP 请求。
您可以像安装其他 Python 包一样,通过 pip 安装它:
$ pip install requests
该库允许我们将网页的 HTML 内容作为字符串获取:
import requests
url = 'https://www.w3schools.com/html/html_tables.asp'
html = requests.get(url).text
接下来,我们将使用 BeautifulSoup 库来解析 HTML 内容并从表格中提取数据。BeautifulSoup 提供了多种方法和属性,使我们能够轻松地遍历 HTML 文档并从中提取数据。以下是一个示例,展示如何使用它来查找表格元素并从单元格中提取数据:
soup = BeautifulSoup(html, 'html.parser')
# Find the table element
table = soup.find('table')
# Extract the data from the cells
data = []
for row in table.find_all('tr'):
cols = row.find_all('td')
# Extracting the table headers
if len(cols) == 0:
cols = row.find_all('th')
cols = [ele.text.strip() for ele in cols]
data.append([ele for ele in cols if ele]) # Get rid of empty values
print(data)
现在,二维数据数组已填充了表格的行和列值。为了便于我们阅读,现在我们可以非常轻松地将内容转换为 Pandas DataFrame:
import pandas as pd
# Getting the headers from the data array
# It is important to remove them from the data array afterwards in order to be parsed correctly by Pandas
headers = data.pop(0)
df = pd.DataFrame(data, columns=headers)
print(df)
从表格中提取数据后,您可以将其用于多种用途,例如数据分析、机器学习,或将其存储在数据库中。您还可以修改代码,从同一网页或多个网页中抓取多个表格。
请注意,并非所有网站都像这样容易抓取数据。许多网站实施了高级防护措施来防止抓取,例如验证码(CAPTCHA)和IP地址封禁,但幸运的是,有第三方服务(如WebScrapingAPI)提供IP轮换和验证码绕过功能,使您能够抓取这些目标。
希望本节内容能为您提供关于使用 Python 从 HTML 表格中抓取数据流程的实用概述。在下一节中,我们将探讨一些优化此流程的方法以及最佳的网页抓取实践。