如何抓取网页中的表格

如何抓取网页中的表格_第1张图片

之前,我在搜索vscode的快捷键的时候,找到一个页面是以表格的形式呈现vscode的各种快捷键操作的(如下图)。自从学了Python爬虫后,就形成了一个惯性思维,看到网页中有什么比较好的内容,但是复制起来又不是很方便的时候,就会想着如何用Python快速的抓取下来。下面,我就来简单的介绍下我的一些抓取表格的思路和方法。


如何抓取网页中的表格_第2张图片

1.在IE浏览器中直接使用导出EXCLE

微软的这个设计还是很人性化的,对于网页中以表格呈现的内容,以这种方式存取特别方便。我们需要做的仅仅是在页面中点击右键选择导出到EXCEL,就能把页面中的内容导出到单元格中。
这种方式的缺陷是:

  • 页面内容比较多时会比较慢,会给人导出失败的错觉
  • 除了表格中的数据,页面中其他的所有内容也会导进EXCEL,需要后续整理
  • 虽然,没任何技术要求。但是如果要处理大量页面时,需要一个个页面去操作,还是比较繁琐的

2.利用Python抓取网页中的表格

接下来,就是本文的重点了,直接先上代码。

from bs4 import BeautifulSoup
import requests
import pandas as pd
url = 'https://segmentfault.com/a/1190000007688656'
res = requests.get(url)
soup = BeautifulSoup(res.text, 'lxml')
tables = soup.select('table')
df_list = []
for table in tables:
    df_list.append(pd.concat(pd.read_html(table.prettify())))
df = pd.concat(df_list)
df.to_excel('vscode快捷键大全.xlsx')

我知道对于许多没学过编程知识的人,可能看到代码就会望而却步,我之前也是这样,因为这对于没接触过的人来说是一个相当不舒适的区域。但是,这也就是10行代码,就能完成一个简单的爬虫,重要的是这些代码是可以复用的,只需要修改传入的连接地址。
下面就简单介绍下代码的含义:

  • 主要用到三个库:requests,BeautifulSoup和pandas(1-3行)
  • 用BeautifulSoup取得table标签下的表格内容(4-7行)
  • pd.read_html直接把HTML中内容读取为DataFrame (8-11行)
    这一步是关键,pd.read_html方法省去了许多解析HTML的步骤,否则要用BeautifulSoup一个个抓取表格中内容会很繁琐。里面还用到了prettify()方法,可以把BeautifulSoup对象变成字符串,因为pd.read_html处理的是字符串对象
  • 最后就是把DataFrame导出到EXCEL(12行)

这样就完成了一个简单的抓取一个网页中所有表格的爬虫

3.关于选择方法的建议

最后,我想强调的一点是,方法不是我们最终的目的,我们只是想通过更便捷的方式达到学习内容的目的,所以不要为了追求高大上的方法而迷失了方向。
拿本文的为列,其实获得vscode快捷键操作表格的最好方法是直接在浏览器中导出到EXCEL,甚至是直接复制粘贴。这样我们就能把精力专注于学习vscode快捷键操作,而不是获取这个表格的方法。
如果,换个场景,假设这个表格的内容分散在很多很多的网页中,那我们还是需要编个爬虫,这样会更快。而且,如果是基于学习python的目的,培养这种挖掘资料的思维也是很重要的。
所以,关键我们要明确自己的目的,根据相应的目标,选择最适合的方式。

下期预告:下篇文章我将介绍运用正则表达式从地方的统计公报中抓取结构化的数据

搜索公众号:Python__R,回复vscode快捷键大全获取vscode快捷键大全.xlsl

你可能感兴趣的:(如何抓取网页中的表格)