用Pandas的read_html()来抓取维基百科的表格
用Pandas的read_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/')