google sheets 采集数据的实践

google sheets 提供了插件的开放方式,其实相当于 Excel 的 VBA 宏,但是这个 app script 其实是在服务器端运行的,并不是浏览器本地运行。所以 google 有两套 api 接口,一个提供给其他开发语言的 REST 接口,一套就是 app script 在服务器端运行的脚本,但是这个脚本又提供了服务端脚本方法的代理,让 html 承当 UI 接口来开发插件。这样客户端的 javascript 就可以调用服务器端的 app script。

这样就可以用油猴脚本来调用客户端 javascript,然后代理到 app script 来更新 sheet 的数据,这样就可以把 sheet 当成一个简单的数据表来更新,但是并不是 SQL 表那样操作,google seet 类似于 excel,都是以行和列来定位 range,然后再操作。没有什么字段定位,查找更新。但是有 Range 查找,进而定位到 Row 和 Column,然后定位单元格来更新。

但是就算能这样更新,因为 app script 是服务端脚本,每次更新一条就进行一次网络交互,显然是不合适的,拖慢了采集的速度,所以就需要批量更新。具体做法就是把数据先放到内存中,先累计够了,再批更新。另外就是在 sheet 中查找数据不要想着用 excel 那种公式来查找, app script 不提供这样的接口,直接将这个 sheet 的数据转成 javascript 数组,直接根据逻辑遍历会更好,然后处理完再回写到 sheet。如果单 sheet 数据不多话,这样最好。另外就是每次取一批来处理。

因为 google sheet 是用行索引来定位,但是第一行往往被定义成字段说明,况且有时并不从第二行读整个表,这样返回的 javascript 数组并不能简单相对的偏移来定位 sheet 行所以,所以最好加一列,用公式 =ROW() ,这样返回的 javascript 数组能有个行索引,等着后续更新时使用。

另外 google 每个单元格存储的最大的字符是 50000 个,这样并不能用来存储图片的 base64。而 insertImage 就算能插入 Blob 类的图片,其实也是不占用单元格内容。等想批量删除时,有没有删除的 api。这样就非常不适合存图片。而 =IMAGE 这样的公式,是从远程加载一个图片到单元格,更合适一点。

总结

  1. 大部分时候从网络上采集数据,不用在本地建什么数据库,直接入 google sheets,方便过滤,还可以用数据透视表。然后再加上插件开发,直接针对数据可以做一个 dashboard 来展示数据和数据可视化。
  2. 大部分时候也不需要用 python 脚本和各种库来采集数据,油猴脚本很强大,直接跨域请求会更方便,还可以自动化 tab 页操作 dom。可以一套脚本套两个域,GM_setValue / GM_getValue 和 GM_addValueChangeListener 组合操作。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇