网页表格抓取(小五书接上文,让你的网页满足条件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对表数据的批量抓取了吗?