问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

用Pandas的read_html()来抓取维基百科的表格

创作时间:
2025-03-21 09:18:06
作者:
@小白创作中心

用Pandas的read_html()来抓取维基百科的表格

引用
1
来源
1.
https://geek-docs.com/pandas/pandas-tutorials/scraping-wikipedia-table-with-pandas-using-read_html.html

Pandas库是Python中一个强大的数据处理工具,而read_html()函数则是Pandas库中用于从网页中读取HTML表格到DataFrame中的一个特殊函数。这个函数可以让你无需了解如何刮取网站的HTML,就能快速组合来自众多网站的表格数据。虽然这些数据需要进一步清理,但通过本文的介绍,你将学会如何处理这些数据。

在这篇文章中,我们将讨论一个名为read_html()的特殊函数,该函数用于直接从网页中读取HTML表格到Pandas DataFrame中,而不需要知道如何刮取网站的HTML,这个工具对于迅速组合来自众多网站的表格非常有用。然而,这些数据必须要进一步清理,所以让我们看看如何处理这些数据。

什么是pd.read_html

Pandas read_html()是刮取网络数据的最简单方法之一。这些数据可以根据用户的要求进一步清理。

pandas.read_html()的语法

语法:

pandas.read_html(io)

其中,
io可以是一个HTML字符串,一个文件,或一个URL。

例1:使用Html字符串

在这个例子中,我们使用符号”’将一个多行字符串存储在一个名为html_string的变量中。然后,我们调用函数 read_html 并将 html_string 传给它。这个函数提取所有的HTML表格,并返回一个所有表格的列表。

import pandas as pd

html_string = '''
  <table>
  <tr>     
    <th>Company</th>
    <th>Contact</th>
    <th>Country</th>
  </tr>
  <tr>
    <td>Alfreds Futterkiste</td>
    <td>Maria Anders</td>
    <td>Germany</td>
  </tr>
  <tr>
    <td>Centro comercial Moctezuma</td>
    <td>Francisco Chang</td>
    <td>Mexico</td>
  </tr>
</table>
'''
df_1 = pd.read_html(html_string)
df_1

输出:

此外,如果你想看一下数据类型,你可以通过调用info()函数来实现,方法如下。

df_1[0].info()

例2: 从URL读取HTML数据

在这个例子中,让我们尝试从一个网页上读取HTML。我们使用一个维基百科的页面,其网址为 “Demographics_of_India”。从这个网页中,我想抓取以下表格的内容,我们需要提取下面的高亮列。
网页上有近37个表,为了找到一个特定的表,我们可以使用参数 “匹配”。为了找出数据框的长度,我们使用len()函数,如下所示。

import pandas as pd
import numpy as np

dfs = pd.read_html('https://en.wikipedia.org/wiki/Demographics_of_India')
len(dfs)

输出:

37

例3:从一个网页上找到特定的表格

让我们把 “各州/联邦区的人口分布(2011年)”这个值传递给参数匹配。

my_table = pd.read_html('https://en.wikipedia.org/wiki/Demographics_of_India',
 match='Population distribution by states/union territories')
my_table[0].head()

例4:获取列数据

因此,我们必须获得 “州/中央直辖区 “列和 “人口 “列。

states = my_table[0]['State/UT']
states

同样地,我们得到了列人口

population = my_table[0]['Population[57]']
population

例5:合并两列

让我们在一个新的DataFrame中存储这两列。

df1 = pd.DataFrame({'State': states, 
 'Population': population})
df1

例6:丢弃行数据

让我们尝试在Pandas中使用drop()的帮助下删除最后一行,即总数。

df1.drop(df1.tail(1).index,
 inplace = True)
df1

输出:

例7:表格的数据可视化

这里我们使用Matplotlib模块将给定的HTML数据绘制成图形格式。

import matplotlib.pyplot as plt

df1.plot(x='State',y='Population',
 kind="barh",figsize=(10,8))

例8:用Python的Pandas编写HTML表

在这里,我们创建了一个DataFrame,并将其转换为一个HTML文件,我们还传递了一些HTML属性,使其成为一个漂亮的表格。

import pandas as pd

df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df.to_html('write_html.html', index=False, 
 border=3, justify='center')

输出:

例9:渲染HTML页面时出错

如果HTML页面不包含任何表格,将返回一个值错误。

import pandas as pd
import numpy as np

dfs=pd.read_html('https://codebestway.wordpress.com/')
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号