googlesheet 抓取数据之突破数量限制和强制刷新
googlesheet用importxml、importhtml、importdata、importfeed等函数抓取数据的时候有数量限制。
一张表格里超过50个上述函数,就会提示抓取数据量太大超出了限制,需要等待,显示为loading。这就是所谓的数量限制。
googlesheet抓取的数据是放在缓存里,比如你抓取了股价实时数据,但是这个数据并不会自动刷新,它可能15min刷新一次,在这之前,如果你想要刷新数据,即使把格子里的抓取 公式删掉,再重新填进去,google也只是把缓存中旧的数据直接给你。你可能需要一种强制刷新的手段。
一、怎么突破数量限制
(我自己的投资记录表格原先有大约70个抓取,经过下面这些处理,现在只有6个import函数,再也不会没完没了的loading了。)
1在不同的文件里抓取,然后用importrange函数调用到一个文件里
比如有一个投资组合,你抓取了一些价格和汇率的数据,也抓取了一些pe、pb、eps、财报日期、分红日期等的基本面数据,那么可以考虑把实时的数据的抓取放在本文件里,把基本面数据的抓取放在另一个文件里,然后调用它。
importrange函数的用法见googlesheet函数帮助。
2用尽可能少的import函数来抓取尽可能多的数据
A.
比如从sina抓取两个股票的数据,你下面这样写要用两个importdata
=importdata(“https://hq.sinajs.cn/list=sh600519”)
=importdata(“https://hq.sinajs.cn/list=usr_fb”)
可以直接写成
=importdata(“https://hq.sinajs.cn/list=sh600519,usr_fb“)
如果有很多个,你可以把他们的代码写在b1-b10(注意前面加逗号)
=importdata(“https://hq.sinajs.cn/list=”&b1&b2&b3&b4&b5&b6&b7&b8&b9&b10)
B.
比如用importxml函数抓数据,正常写法是
=importxml(“url”,”xpath”)
如果同一个地址有多个数据需要抓取,可以写成
=importxml(“url”,”xpath1|xpath2|xpath3|xpath4|xpath5″)
C.
比如用importhtml函数抓网页表格数据,你需要表格上的两个数据,可能是这么写的
=index(importhtml(“url”,”table”,1),1,2)
=index(importhtml(“url”,”table”,1),2,4)
可以考虑直接取下整个表格
=importhtml(“url”,”table”,1)
毕竟import函数有限时,而整个取下来再怎么处理都没限制。
D.
不要在一个公式里写多个import函数,比如
=if(importxml(“url”,”xpath”)<>””,importxml(“url”,”xpath”)*100,0)
有什么要计算,要处理格式的,另外去处理,向下面这样
B1格子写 =importxml(“url”,”xpath”)
B2格子写=if(b1<>””,b1*100,0)
二、怎么强制刷新
比如原来你有几个抓取,他们不会自动刷新
=importxml(“url”,”xpath”)
=importdata(“url”)
=importhtml(“url”,”table”,1)
你在A1格子里写上#test
把所有的抓取公式都改成下面这样
=importxml(“url”&A1,”xpath”)
=importdata(“url”&A1)
=importhtml(“url”&A1,”table”,1)
之后,要强制刷新的时候,你只要把A1格子的内容改一下,比如#test1,#test2。
抓取的地址变了,google就不会给你缓存数据了,会重新去抓取,这样就强制刷新了。
三、扩展阅读