常见的各种官网都有这样一种情况:
网站中很多表格,我们想对这些表格进行整理汇总、或者是筛选,或者是处理分析。
于是我们需要考虑:如何将网页表格数据使用python保存为Excel文件?
- 如果需要抓的表格很少或只需要抓一次,那么推荐快速抓取法
[引文1]
。 - 如果页数比较多,推荐完整爬虫抓取法
[引文2]
。解析函数用了BeautifulSoup和css选择器,这种方法定位提取表格所在的id为#myTable04的table代码段,更为准确。
0 基础知识
table类型的表格网页结构
一般情况下,网页的表格数据主要是在<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>
简单解释上文出现的几种标签含义:
<table> : 定义表格
<thead> : 定义表格的页眉
<tbody> : 定义表格的主体
<tr> : 定义表格的行
<th> : 定义表格的表头
<td> : 定义表格单元
使用pandas的read_html()
方法就可以读取标签中的内容。
read_html()函数
pandas.read_html(io,
match='.+',
flavor=None,
header=None,
index_col=None,
skiprows=None,
attrs=None,
parse_dates=False,
tupleize_cols=None,
thousands=', ',
encoding=None,
decimal='.',
converters=None,
na_values=None,
keep_default_na=True,
displayed_only=True)
常用的参数:
- io:可以是url、html文本、本地文件等
- flavor:解析器;
- header:标题行;
- skiprows:跳过的行;
- attrs:属性,比如 attrs = {‘id’: ‘table’};
- parse_dates:解析日期
注意:返回的结果是DataFrame组成的list。
1 快速抓取法
1.1 思路
这里以NBA Player Salaries - 2020-2021为例,具体步骤如下:
- step0:查看网页元素。 在目标网页中,右键“审查元素”,发现是
<table>
类型的网页结构,可以用read_html()
抓取。
- step1:确定抓取数据量和网页类型。 表数据共14页,数据量不大;且1-14页的网址只有page的变化,属于静态网页。