【问题标题】:Morningstar xpath return empty in Google Sheet (Imported content is empty)Morningstar xpath 在 Google 表格中返回空(导入的内容为空)
【发布时间】:2020-03-22 11:45:16
【问题描述】:

我正在尝试使用 XPath 从晨星“现金流”页面中提取任意股票代码。我已经通过 XPath 测试人员在 Morningstar 网站上测试了 XPath,它返回了所需的值。但是,当我想在 google 工作表中使用此值时,它会返回 #N/A(导入的内容为空。)。

=IMPORTXML("http://financials.morningstar.com/cash-flow/cf.html?t=fb&region=usa&culture=en-US", "//div[@id='data_tts1']/div")

我对此做了一些研究,发现这些网站中的数据是动态生成的,并且分阶段下载内容,因此需要先加载页面才能从中提取任何数据!

我想知道这个问题是否有任何解决方案? 您的帮助将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    它应该是空的,因为您尝试抓取的内容来自 JavaScript。 Google 表格不支持导入 JS 元素。您始终可以通过禁用给定站点的 JS 来测试这一点,并且只能抓取剩下的内容:

    【讨论】:

      【解决方案2】:

      这也许是可能的。但是您必须准备一个自定义工作表来提取数据。使用 IMPORTDATA 解析包含数据的 .json :

      http://financials.morningstar.com/ajax/ReportProcess4HtmlAjax.html?&t=XNAS:FB&region=usa&culture=en-US&cur=&reportType=cf&period=12&dataType=A&order=asc&columnYear=5&curYearPart=1st5year&rounding=3&view=raw&r=672024&callback=jsonp1585016592836&_=1585016593002
      

      AFAIK,您无法直接导入 .csv 版本(需要特定标头,因此需要 curl 或其他特定工具)。

      http://financials.morningstar.com/ajax/ReportProcess4CSV.html?&t=XNAS:FB&region=usa&culture=en-US&cur=&reportType=cf&period=12&dataType=A&order=asc&columnYear=5&curYearPart=1st5year&rounding=3&view=raw&r=764423&denominatorView=raw&number=3
      

      由于这个 .json 非常特殊(包含 html 标签),我认为 GoogleSheets 的自定义脚本无法正确导入它。因此,一旦 .json 在 GoogleSheets 中加载,将行转置为列并使用公式来定位您的数据(例如,定位包含 data_s1 和 data_s2 的单元格)。使用 CONCAT 合并感兴趣的单元格。然后将结果拆分为列(使用自定义分隔符)。搜索您想要的数据并使用 SUBSTITUTE 清理结果。该方法很脏,但我认为它可以在整个过程中实现自动化。

      【讨论】:

      • 非常感谢。您能否提供一个示例,以便我可以修改和使用。
      • 当然。这里的概念证明:docs.google.com/spreadsheets/d/… 正则表达式部分归功于@max-makhrov。检查黄色单元格中的公式。结果从 G33 开始。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多