利用Dataframe.read_html函数爬取表格型数据

在爬虫中我们经常需要爬取一些表格型数据,例如:
利用Dataframe.read_html函数爬取表格型数据_第1张图片

针对这样的表格型数据,我们可以通过Pandas模块中的.read_html函数进行快速的抓取。

在使用.read_html函数前需要满足两个条件:

  • 网页为静态网页
  • 表格为HTML 表格样式

对于第一个条件,我们需要右键-查看源代码,并选取一个表格中的数据查找。如果在源代码中找到即可说明是静态网页格式

对于第二个条件我们同样需要在源代码中查找table class确定是否有table表格样式。一般table类型的表格网页结构大致如下:

<table class="..." id="...">
    <thead>
    <tr>
    <th>...th>
    tr>
    thead>
    <tbody>
        <tr>
            <td>...td>
        tr>
        <tr>...tr>
        <tr>...tr>
        <tr>...tr>
        <tr>...tr>
        ...
        <tr>...tr>
        <tr>...tr>
        <tr>...tr>
        <tr>...tr>        
    tbody>
table>

先来简单解释一下上文出现的几种标签含义:

    : 定义表格
    : 定义表格的页眉
    : 定义表格的主体
    : 定义表格的行
: 定义表格的表头 : 定义表格单元

这样的表格数据,就可以利用pandas模块里的read_html函数方便快捷地抓取。

现在我们来抓取虎扑NBA球星的数据.登录网站并查看网页源码,可以确定这是一个静态网页并且含有HTML表格样式,同时网页后的数字为页数,所以直接构造一个循环进行抓取
https://nba.hupu.com/stats/players/pts/1

table = []
for i in range(1,4):
    table.append(pd.read_html('https://nba.hupu.com/stats/players/pts/%d' %i)[0])
print(table)

爬取后结果为

[    0             1     2      3   ...           8      9   10     11
0   排名            球员    球队     得分  ...        命中-罚球  罚球命中率  场次   上场时间
1    1       多诺万-米切尔    爵士  36.30  ...    7.90-8.30  94.8%   7  37.70
2    2        卢卡-东契奇   独行侠  31.00  ...   7.00-10.70  65.6%   6  35.80
3    3        乔尔-恩比德   76人  30.00  ...  12.00-14.80  81.4%   4  36.30
4    4        科怀-伦纳德    快船  29.80  ...    6.80-7.90  86.2%  11  38.70
5    5        詹姆斯-哈登    火箭  29.50  ...   8.60-10.20  83.9%  11  36.80
6    6       安东尼-戴维斯    湖人  29.20  ...    7.10-9.60  74.4%   9  35.00
7    7      尼古拉-武切维奇    魔术  28.00  ...    2.00-2.20  90.9%   5  37.00
8    8     扬尼斯-阿德托昆博    雄鹿  26.70  ...    5.20-9.00    58%   9  30.80
9    9        贾马尔-默里    掘金  26.50  ...    3.00-3.20  92.3%  12  38.50
10  10       勒布朗-詹姆斯    湖人  26.30  ...    5.20-7.30  71.2%   9  34.60
.........

可以看到已经抓取了全部数据,只需要再进行数据清洗即可

#连接所有数据
players = pd.concat(table)
# 更改列名
columns=['排名','球员','球队','得分','命中-出手','命中率','命中-三分','三分命中率','命中-罚球','罚球命中率','场次','上场时间']
players.columns=columns

# 删除行标签为0的记录
players.drop(0,inplace=True)

#保存文件
players.to_csv('hupu_players_info.csv',index=None,encoding='utf_8_sig')

这样我们就爬取了虎扑NBA球员的得分情况,同样也可以根据其他数据的URL去爬取投篮,三分,助攻等数据。

源代码与结果数据文件:
https://github.com/smilecoc/python_spider_allproject/tree/master/hupu_playersinfo_readhtml

更多文章请关注个人公众号:Smilecoc的杂货铺
利用Dataframe.read_html函数爬取表格型数据_第2张图片

你可能感兴趣的:(python爬虫,python,html)