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

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

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

什么是pd.read_html

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

**pandas.read_html()的语法 **

语法:

pandas.read_htlm(io)
Python

其中,

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
Python

输出:

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

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

df_1[0].info()
Python

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

例2: 从URL读取HTML数据

在这个例子中,让我们尝试从一个网页上读取HTML。我们使用一个维基百科的页面,其网址为 “Demographics_of_India”。从这个网页中,我想抓取以下表格的内容,我们需要提取下面的高亮列。

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

网页上有近37个表,为了找到一个特定的表,我们可以使用参数 “匹配”。为了找出数据框的长度,我们使用len()函数,如下所示。

import pandas as pd
import numpy as np
  
dfs = pd.read_html('https://en.wikipedia.org\
/wiki/Demographics_of_India')
len(dfs)
Python

输出:

37
Python

例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()
Python

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

例4:获取列数据

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

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

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

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

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

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

例5:合并两列

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

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

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

例6: 丢弃行数据

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

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

输出:

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

例7:表格的数据可视化

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

import matplotlib.pyplot as plt
  
df1.plot(x='State',y='Population',
         kind="barh",figsize=(10,8))
Python

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

例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')
Python

输出:

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

例9:渲染HTML页面时出错

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

import pandas as pd
import numpy as np
  
dfs=pd.read_html('https://codebestway.\
wordpress.com/')
Python

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册