网页抓取 加密html( Python中如何使用Pandas_html方法从HTML中获取数据 )
优采云 发布时间: 2021-10-11 18:12网页抓取 加密html(
Python中如何使用Pandas_html方法从HTML中获取数据
)
在本 Pandas 教程中,我们将详细介绍如何使用 Pandas 的 read_html 方法从 HTML 中获取数据。首先,在最简单的示例中,我们将使用 Pandas 从字符串中读取 HTML。其次,我们将通过几个示例使用 Pandas read_html 从维基百科表格中获取数据。在上一篇文章(Python中的探索性数据分析)中,我们也使用了Pandas从HTML表格中读取数据。
在 Python 中导入数据
在开始学习 Python 和 Pandas 的时候,为了进行数据分析和可视化,我们通常会从导入数据的实践开始。在前面的文章中,我们已经了解到我们可以直接在Python中输入值(例如,从Python字典创建一个Pandas数据框)。但是,通过从可用来源导入数据来获取数据当然更为常见。这通常通过从 CSV 文件或 Excel 文件中读取数据来完成。例如,要从 .csv 文件导入数据,我们可以使用 Pandas read_csv 方法。这是如何使用此方法的快速示例,但请务必查看主题 文章 的博客以获取更多信息。
现在,上述方法仅在我们已经拥有合适格式(例如 csv 或 JSON)的数据时才有用(请参阅 文章 了解如何使用 Python 和 Pandas 解析 JSON 文件)。
我们大多数人都会使用维基百科来了解我们感兴趣的主题。此外,这些维基百科文章 通常收录 HTML 表格。
要使用 Pandas 在 Python 中获取这些表格,我们可以将它们剪切并粘贴到电子表格中,然后例如使用 read_excel 将它们读入 Python。现在,这个任务当然可以用更少的步骤完成:我们可以通过网络抓取来自动化它。一定要检查什么是网页抓取。
先决条件
当然,这个 Pandas 阅读 HTML 教程需要我们安装 Pandas 及其依赖项。例如,我们可以使用 pip 安装 Python 包,例如 Pandas,或安装 Python 发行版(例如,Anaconda、ActivePython)。以下是使用 pip 安装 Pandas 的方法:pip install pandas。
请注意,如果有消息说有更新版本的 pip 可用,请查看此 文章 以了解如何升级 pip。请注意,我们还需要安装 lxml 或 BeautifulSoup4。当然,这些包也可以使用 pip 安装:pip install lxml。
熊猫 read_html 语法
以下是如何使用 Pandas read_html 从 HTML 表中获取数据的最简单语法:
现在我们知道了使用 Pandas 读取 HTML 表格的简单语法,我们可以看看 read_html 的一些例子。
熊猫 read_html 示例 1:
第一个例子是关于如何使用 Pandas read_html 方法。我们将从一个字符串中读取一个 HTML 表格。
现在,我们得到的结果不是 Pandas DataFrame,而是 Python 列表。换句话说,如果我们使用 type() 函数,我们可以看到:
如果我们想要得到表,我们可以使用列表的第一个索引(0)
熊猫 read_html 示例 2:
在第二个 Pandas read_html 示例中,我们将从维基百科中抓取数据。其实我们会得到python(也叫python)的HTML表格。
现在,我们有一个收录 7 个表的列表 (len(df))。如果我们转到维基百科页面,我们可以看到第一个表格是右边的表格。然而,在这个例子中,我们可能对第二个表更感兴趣。
熊猫 read_html 示例 3:
在第三个示例中,我们将从瑞典的 covid-19 案例中读取 HTML 表格。在这里,我们将使用 read_html 方法的一些附加参数。具体来说,我们将使用 match 参数。在此之后,我们还需要对数据进行清洗,最后,我们将进行一些简单的数据可视化操作。
使用 Pandas read_html 和匹配参数抓取数据:
如上图所示,表格的标题是:“瑞典各县的新 COVID-19 病例”。现在,我们可以使用 match 参数并将其作为字符串输入:
这样,我们只得到了这个表,但它仍然是一个数据框列表。现在,如上图所示,在底部,我们需要删除三行。因此,我们要删除最后三行。
使用 Pandas iloc 删除最后一行
现在,我们将使用 Pandas iloc 删除最后 3 行。请注意,我们使用 -3 作为第二个参数(请确保查看此 Panda iloc 教程以获取更多信息)。最后,我们还创建了此数据帧的副本。
在下一节中,我们将学习如何将多索引列名更改为单索引。
将多个索引更改为单个索引并删除不需要的字符
现在,我们要删除多索引列。换句话说,我们将 2 列索引(名称)变成唯一的列名称。在这里,我们将使用 DataFrame.columns 和 DataFrame.columns,get_level_values():
最后,正如您在“日期”列中看到的,我们使用 Pandas read_html 从 WikiPedia 表中获取一些评论。接下来,我们将使用 str.replace 方法和正则表达式来删除它们:
使用 Pandas set_index 更改索引
现在,我们继续使用 Pandas set_index 将日期列变成索引。这样,我们以后就可以轻松创建时间序列图了。
现在,为了能够绘制这个时间序列图,我们需要用0填充缺失值并将这些列的数据类型更改为数字。这里我们也使用了apply方法。最后,我们使用 cumsum() 方法获取列中每个新值的累加值:
HTML 表中的时间序列图
在上一个例子中,我们使用 Pandas read_html 来获取我们爬取的数据并创建了一个时间序列图。现在,我们还导入了 matplotlib,以便我们可以更改 Pandas 图例标题的位置:
结论:如何将 HTML 读入 Pandas DataFrame
在本 Pandas 教程中,我们学习了如何使用 Pandas read_html 方法从 HTML 中抓取数据。此外,我们使用来自维基百科文章 的数据来创建时间序列图。最后,我们还可以使用 Pandas read_html 通过参数 index_col 将 'Date' 列设置为索引列。
英文原文:
译者:片刻