网页表格抓取(小五书接上文,让你的网页满足条件read_html)

优采云 发布时间: 2021-12-11 06:03

  网页表格抓取(小五书接上文,让你的网页满足条件read_html)

  大家好,我是小吴?

  书在上面,我们可以,文末我说对应的read_html()也是神器!

  PS:大家也都很好,我点了30个赞,小吴赶紧安排了

  最简单的爬虫:用Pandas爬取表数据

  有一点不得不承认,使用Pandas爬取表格数据有一定的局限性。

  只适合抓取Table数据,那么我们先看看什么样的网页符合条件?

  什么样的网页结构?

  用浏览器打开网页,F12查看HTML结构,你会发现符合条件的网页结构有一个共同特征。

  如果你发现 HTML 结构是下面的 Table 格式,你可以直接使用 Pandas 上手。

  

...

...

...

...

...

...

...

  这看起来不直观。开启北京空气质量网站。

  F12,左边是网页质量指标表,其网页结构与Table表格数据网页结构完美匹配。

  非常适合使用pandas爬取。

  pd.read_html()

  Pandas 提供了两个函数:read_html() 和 to_html() 用于读写 html 格式的文件。这两个功能非常有用。可以轻松地将复杂的数据结构(例如 DataFrame)转换为 HTML 表格;另一个不需要复杂的爬虫,几行代码就可以抓取Table表数据,简直就是神器! [1]

  具体的pd.read_html()参数可以查看官方文档:

  我们把刚才的网页打开看看吧!

  import pandas as pd

df = pd.read_html("http://www.air-level.com/air/beijing/", encoding='utf-8',header=0)[0]

  这里只添加了几个参数,header就是指定列标题的那一行。使用guide包,只需要两行代码。

  df.head()

  对比结果,可以看到已经成功获取到表数据。

  多表

  之前的情况,不知道有没有人注意到

  pd.read_html()[0]

  对于pd.read_html(),在得到网页结果后,还要加上一个[0]。这是因为网页上可能有多个表格。这时候就需要通过列表的分片tables[x]来指定获取哪个表。

  比如刚才的网站,空气质量排名网页明显是由两张表组成的。

  此时如果使用pd.read_html()得到右边的表格,只需稍微修改即可。

  import pandas as pd

df = pd.read_html("http://www.air-level.com/rank", encoding='utf-8',header=0)[1]

  相反,可以看到页面右侧的表格已经成功获取。

  以上就是简单的使用pd.read_html()抓取静态网页。但是我们之所以使用Python,其实是为了提高效率。但是如果只有一个网页,用鼠标选择复制不是更容易吗?所以Python操作的最大优势会体现在批量操作上。

  批量抓取

  给大家演示一下如何使用Pandas批量抓取网络表格数据?

  以新浪金融机构持股汇总数据为例:

  一共47个页面,47个网页网址通过一个for循环构造,然后通过pd.read_html()循环抓取。

  df = pd.DataFrame()

for i in range(1, 48):

url = f'http://vip.stock.finance.sina.com.cn/q/go.php/vComStockHold/kind/jgcg/index.phtml?p={i}'

df = pd.concat([df, pd.read_html(url)[0]]) # 爬取+合并DataFrame

  几行代码,轻松解决。

  共获取47页1738条数据。

  通过上面的小案例,相信你可以轻松掌握Pandas对表数据的批量抓取了吗?

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线