提到爬取网页数据,大家最先想到的常规方式是通过 requests 请求网页数据,然后使用 lxml 解析定位网页节点,从而获取所需数据。
但是对于一些简单的网页表格数据抓取来讲,我们没有必要去研究页面的结构,然后解析页面,甚至通过晦涩难懂的正则表达式去解析数据。
今天我就给大家介绍一个神器 —— 潘大师(Pandas),可以一行代码即刻获取网页中的表格数据。
介绍
Pandas 自带了一个 read_html() 的方法,通过这个方法可以直接获取网页中的所有表格数据。
当然,这个获取方式也是有前提条件的,它要求网页中的表格是我们常见的标准格式:
1 |
|
当你使用 F12 定位页面表格时,如果出现的是这种标准的 HTML 表格,那么我们就可以直接使用 read_html() 这个方法快速地获取页面的表格信息。
实例
下面我们以福布斯 500 强的新闻网页(https://www.fortunechina.com/fortune500/c/2018-07/19/content_311046.htm)为例,这个页面整个是一个新闻网页,在后面穿插一个福布斯排名的表格:
我们来看看这个简洁而暴力的代码实现:
data = pd.read_html('https://www.fortunechina.com/fortune500/c/2018-07/19/content_311046.htm',header=0,encoding='utf-8')
print(data)
打印出来的内容如下:
1 |
|
惊不惊喜,意不意外?就是这么简单,接下来对这个表格数据需要怎么处理直接从 data 里面取就行。
细心的你可能发现这个输出有个问题,好像外面包了一层中括号。
对,你没看错!其实我们的 data 是一个列表,这也就意味着如果网页中有多个表格的话,我们也可以通过这一行代码全部获取。
我们再来看一个实例。
这次我选取的网页是 https://www.boxofficemojo.com/ 。这个网页有好几个表格:
同样地,我们来看我们的代码:
1 |
|
输出是这样子的:
1 |
|
如果我们分别打印出这三个个表格:
1 |
|
输出就将这三个表格的数据分开了:
1 |
|
上面就是 pandas 这个方法的简单使用了。其实 read_html() 这个函数有很多参数可供调整,比如匹配方式、标题所在行、网页属性识别表格等等,具体说明可以参看pandas的官方文档说明: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_html.html
总结
本文介绍的爬虫方式很简单,但是当你只想获取一个网页中的表格数据时,确实最有用最省时省力的方式。以后遇到这种需求,别再傻傻地去做解析了,直接一行代码解决!