Google Sheets如何自动抓取网页内容制作看板
我们制作报表的时候通常都会使用到一些动态的外部数据。这些数据有时候可以通过API获取,更多时候是在第三方的网页上。而且这些数据往往是动态的,需要经常刷新。那么有什么好方法可以自动地抓取这些数据呢?本篇马老师将利用Google Sheets的内置函数,分享一个实用的心得。
抓取网页中的表格或列表
Google Sheets提供了ImportHTML函数。这个函数有三个参数,分别是
- URL
- “table”或者”list”
- 从1开始的序号
用法也非常简单,输入要抓取的网页的URL,指明是第几个表格或者列表即可。
上图我们导入了百度上海本地新闻网页中的前11个列表。我们可以提取出那些有用的并汇总在一起。这里的列表实际上对应了HTML里的有序列表<ol>和无序列表<ul>,按照在HTML文件中出现的顺序排列。
上图我们从一个第三方网站导入了两个表格。这里提取的是该网页的第一和第二个表格。
有了上面这些抓取的数据我们就可以把该Google Sheet作为数据源去搭建Data Studio的看板了。
但是我们还有一步未完成,就是让数字在Sheets中刷新。为此我们要在Google Sheets的File>Settings中选择Calculation,并在Recalculation中选择On change and every hour。
抓取网页中任意内容
Google Sheets中的另一个函数ImportXML提供了我们抓取任意网页内容的能力。ImportXML有3个参数 ,其中第三个可以忽略。前两个是URL和XPATH。URL自不必解释,那什么是XPATH呢?
XPATH用来表示XML文档中某个元素的路径。HTML也是一种XML文档,因此HTML中的任意元素也都可以使用XPATH来定位。
比如:
//title | 页面的标题元素的内容<title>标题内容</title> |
//div/span[@class=’nav’] | 一个<div>元素内的class为nav的<span>元素的内容 |
XPATH和CSS Selector类似。现在有了ChatGPT,我们写XPATH方便了许多。
你甚至可以导入某个关键字的百度首页结果:
=IMPORTXML("https://www.baidu.com/s?wd=关键字", "//div[(contains(@class, 'result-op') and contains(@class, 'c-container') and @mu) or (contains(@class, 'result') and contains(@class, 'c-container') and @mu)]")
需要注意的是,Google Sheets抓取的IP来自Google,因此如果你的内容因为IP而变化则未必适用。另外这些函数的抓取并不会对目标URL页面进行渲染,如果服务器伺服的HTML中未包含内容,那么这些内容无法抓取。
至此,马老师是否打开了你的思路呢?
如果你会用Chrome的DevTools你可以在Elements工具中复制XPath。赶紧试试吧!