【问题标题】:Scraping data to google sheets from a website that uses JavaScript从使用 JavaScript 的网站将数据抓取到谷歌表格
【发布时间】:2022-10-31 11:14:05
【问题描述】:

我正在尝试将数据从以下网站导入谷歌表格。我想导入当天的所有比赛。

https://www.tournamentsoftware.com/tournament/b731fdcd-a0c8-4558-9344-2a14c267ee8b/Matches

我试过importxmlimporthtml 但似乎这不起作用,因为该网站使用JavaScript。我也尝试过使用 Aphipheny,但没有成功。

使用 Apipheny 时,错误消息是

'未能获取数据 - 请验证您的 API 请求:{DNS 错误'

【问题讨论】:

  • 指定您需要哪些数据?每行包含大量数据,例如:BS U13 Semi final : [W] Uvin Gunawardena [5] - Pubudu Sathsara Melon [6] : 15-13 15-4

标签: javascript google-apps-script google-sheets web-scraping


【解决方案1】:

铊;博士

改编自我的answerHow to know if Google Sheets IMPORTDATA, IMPORTFEED, IMPORTHTML or IMPORTXML functions are able to get data from a resource hosted on a website?(也是我发的)

请花一些时间学习如何使用浏览器开发人员工具,以便您能够识别

  • 如果数据已经作为 JSON / 文字 JavaScript 对象或其他形式包含在网页的源代码中
  • 如果网页正在执行 GET 或 POST 请求以检索数据以及这些请求何时完成(即作为页面解析的某个点,或在事件中)
  • 如果请求需要来自 cookie 的数据

关于如何使用网络浏览器查找有关要导入的网页/数据的有用详细信息的简要指南

  1. 打开源代码并查看是否包含所需的数据。有时数据以 JSON 格式包含在内,并使用 JavaScript 添加到 DOM。在这种情况下,可以使用 Google 表格函数或 Google Apps 脚本中的 Url Fetch Service 检索数据。
  2. 假设您使用 Chrome。打开开发工具,然后查看元素选项卡。在那里你会看到 DOM。确定除了可见元素之外要导入的数据是否包含在隐藏/不可见元素中(如 <script> 标记)可能会有所帮助。
  3. 查看源代码,您可能会看到 JavaScript 代码。它可能包括您要作为 JavaScript 对象(通常称为 JSON)导入的数据。

    有很多关于 + 的问题提到了使用 importhtml 和/或 importxml 的问题,这些问题已经有了答案,甚至许多包含代码(JS snipets、Google Apps 脚本函数等)可能会让你不必使用具有更阶梯式学习曲线的专业网络抓取工具。在这个答案的底部,有一个关于使用 Google 表格内置功能的问题列表,包括对建议的解决方法的注释。

    Is there a way to get a single response from a text/event-stream without using event listeners? 上询问使用EventSource。虽然这不能用于服务器端代码,但答案显示了如何使用HtmlService 在客户端代码上使用它并将结果检索到 Google 表格。


    正如您已经意识到的那样,Google 表格内置函数 importhtml()importxml()importdata()importfeed() 仅适用于不需要登录或其他形式的身份验证的静态页面。

    当使用 JavaScript 动态创建公共页面的内容时,无法使用这些功能访问它,另一方面,网站的站长也可能故意阻止网络抓取。


    如何识别内容是否是动态添加的

    要检查内容是否是动态添加的,使用 Chrome,

    1. 打开源数据的 URL。
    2. F12打开 Chrome 开发者工具
    3. 控制+转移+打开命令菜单。
    4. 开始输入javascript,选择禁用 JavaScript,然后按进入运行命令。 JavaScript 现在已禁用。

      只要您打开 DevTools,JavaScript 将在此选项卡中保持禁用状态。

      重新加载页面看是否显示了你要导入的内容,如果显示了就可以导入了通过使用 Google 表格内置功能,否则这是不可能的,但可能通过使用其他方式来做网页抓取.

      <1234565 class="剧透">

      根据Wikipedia网页抓取,网络收获, 或者网络数据提取data scraping 用于extracting data 来自websites

      使用 robots.txt 阻止网络爬虫

      网站管理员可以使用 robots.txt 文件来阻止对网站的访问。在这种情况下,结果将是#N/A Could not fetch url

      用户代理的使用

      该网页可以设计为返回特殊的自定义消息而不是数据。


      下面有更多关于谷歌表格内置“网络抓取”功能如何工作的细节

      IMPORTDATA、IMPORTFEED、IMPORTHTML 和 IMPORTXML 能够从以下网站上托管的资源中获取内容:

      • 公开可用。这意味着该资源不需要授权 / 登录到任何服务即可访问它。
      • 内容是“静态的”。这意味着如果您使用现代 Web 浏览器的查看源代码选项打开资源,它将显示为纯文本。
        • 注意:Chrome 的 Inspect 工具会显示已解析的 DOM;在其他作品中,网页的实际结构/内容可以通过 JavaScript 代码或浏览器扩展/插件动态修改。
      • 内容具有适当的结构。
        • IMPORTDATA 使用结构化内容作为csvtsv 与资源的文件扩展名无关。
        • IMPORTFEED 将标记的内容作为 ATOM/RSS 工作
        • IMPORTHTML 将标记内容作为 HTML 使用,其中包括正确标记的列表或表格。
        • IMPORTXML 与标记为 XML 的内容或其任何变体(如 XHTML)一起工作。
      • 内容不超过最大大小。 Google 尚未披露此限制,但当内容超过最大大小时会显示以下错误:

        url 内容中的资源超出了最大大小。

      • Google 服务器不会被 robots.txt 或用户代理阻止。

      W3C Markup Validator 上有几个工具可以检查资源是否已正确标记。

      关于 CSV,请查看 Are there known services to validate CSV files

      值得注意的是,电子表格

      • 应该有足够的空间容纳导入的内容;根据this post,Google 表格的电子表格有 1000 万个单元格限制,列限制为 18278,单元格内容有 50000 个字符,即使是值或公式也是如此。
      • 它不能很好地处理大的单元内内容; “限制”取决于用户屏幕尺寸和分辨率,因为现在可以放大/缩小。

      参考

      有关的

      软件推荐

      网络应用程序

      下面的问题是关于不同的结果,#N/A Could not fetch url


      类似问题

      其中一些问题可能会作为这个问题的重复而关闭

【讨论】:

  • 当返回内容类型为text/event-stream的值时,当前阶段UrlFetchApp、IMPORTXML、IMPORTHTML和IMPORTDATA因超时问题无法使用。我认为检查响应内容类型和/或使用text/event-stream 的内容类型从服务器检索值的解决方法可能在您的答案中包含它时也很有用。 Ref
猜你喜欢
  • 2023-01-02
  • 2023-01-02
  • 1970-01-01
  • 2023-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多