重复尝试后,importxml无法获取网址

时间:2020-08-13 23:01:48

标签: web-scraping google-sheets google-sheets-formula google-sheets-importxml

我正在尝试在Google表格中导入多个日期和一个邮政编码的天气数据。我在以下基本公式中为此使用importxml:

=importxml("https://www.almanac.com/weather/history/zipcode/89118/2020-01-21","//*")

在某些邮政编码和特定时间使用此公式时,它将返回页面的全文,然后我查询其平均温度和平均露点。但是,在上面的示例以及许多其他情况下,它在单元格中返回“无法获取URL”和#N / A。

因此,问题是,它可以工作很多次,但是到第五个日期左右,它会引发“无法获取URL”错误。当我更改邮政编码时,它也会失败。基于读取许多线程的唯一猜测是,由于我经常从Sheets请求URL,因此最终被阻止了。还有其他人看到的错误吗?我必须多次使用该公式来计算相对湿度和其他相关信息,因此我需要多次使用它。是否有可能会有更好的方法来使用脚本来完成此工作?还是其他可能导致这种情况的? 这是有问题的电子表格(只是一项工作正在进行中,但是天气问题是我的问题):https://docs.google.com/spreadsheets/d/1WPyyMZjmMykQ5RH3FCRVqBHPSom9Vo0eaLlff-1z58w/edit?usp=sharing

引发错误的公式从N列开始。 如果您想查看更多问题示例,此工作表包含使用上述基本公式的许多公式。

谢谢!

1 个答案:

答案 0 :(得分:2)

经过大量的反复试验,我找到了解决自己问题的方法。我正在为需要通过邮政编码和日期查找天气信息的任何人详细解答。 我改用importdata,将其转置以加快查询速度,并使用帮助器单元格保存每个日期的结果。然后,我在帮助器单元格的结果中搜索其他公式,而不是在整个过程中多次调用import ***。有时速度很慢,但是可以。这是更新的帮助程序公式(其中O3包含“ YYYY-MM-DD”格式的日期,O5包含URL“ https://www.almanac.com/weather/history/”,O4包含邮政编码:

=if(O3="",,query(transpose(IMPORTdata($O$5&$O$4&"/"&O3)),"select Col487 where Col487 contains 'Mean'"))

然后获取温度(其中O3包含日期,O8包含以上公式):

=if(O3="",,iferror(text(mid(O$8,find("Mean Temperature",O$8)+53,4),"0.0° F"),"Loading..."))

最后,要计算相对湿度:

=if(O3="",,iferror(if(now()=0,,exp(((17.625*243.04)*((mid(O$8,find("Mean Dew Point",O$8)+51,4)-32)/1.8-(mid(O$8,find("Mean Temperature",O$8)+53,4)-32)/1.8))/((243.04+(mid(O$8,find("Mean Temperature",O$8)+53,4)-32)/1.8)*(243.04+(mid(O$8,find("Mean Dew Point",O$8)+51,4)-32)/1.8)))),"Loading..."))

最重要的是,importdata从未抛出过“无法获取URL”错误,因此对于该特定站点,它似乎是一种更好的获取方法。

希望这可以帮助需要输入历史天气数据的其他人:)