从使用 JavaScript 的网站将数据抓取到 Google 表格

2024-03-04

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

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

我努力了importxml and importhtml,但似乎这不起作用,因为该网站使用 JavaScript。我也尝试过使用Apipheny https://apipheny.io/support/#features没有任何成功。

使用Apipheny时,错误信息为

“无法获取数据 - 请验证您的 API 请求:{DNS 错误”


Tl;Dr

Adapted from my answer https://webapps.stackexchange.com/a/115665/88163 to How to know if Google Sheets IMPORTDATA, IMPORTFEED, IMPORTHTML or IMPORTXML functions are able to get data from a resource hosted on a website? https://webapps.stackexchange.com/q/115664/88163 (also posted by me)

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

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

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

  1. 打开源代码,看看是否包含了需要的数据。有时,数据以 JSON 形式包含并使用 JavaScript 添加到 DOM。在这种情况下,可以使用 Google Sheets 函数或网址获取服务 https://developers.google.com/apps-script/reference/url-fetch/来自 Google Apps 脚本。
  2. 假设您使用 Chrome。打开开发工具,然后查看“元素”选项卡。在那里你会看到 DOM。确定除了可见元素之外您想要导入的数据是否包含在隐藏/不可见元素中可能会有所帮助,例如<script> tags.
  3. 查看 Source,您也许可以看到 JavaScript 代码。它可能包括您想要作为 JavaScript 对象(通常称为 JSON)导入的数据。

有很多关于谷歌表格 /questions/tagged/google-sheets +网络抓取 /questions/tagged/web-scraping其中提到了使用 importhtml 和/或 importxml 的问题,这些问题已经有了答案,甚至许多都包含代码(JavaScript 片段、Google Apps 脚本函数等),这可能会让您不必使用具有更阶梯式学习的专门网页抓取工具曲线。在这个答案的底部有一个关于使用 Google Sheets 内置函数的问题列表,包括建议的解决方法的注释。

On 有没有一种方法可以在不使用事件侦听器的情况下从文本/事件流获取单个响应? https://stackoverflow.com/q/69654650/1595451询问使用情况事件源 https://developer.mozilla.org/en-US/docs/Web/API/EventSource。虽然这不能在服务器端代码上使用,但答案显示了如何使用html服务 https://developers.google.com/apps-script/guides/html在客户端代码上使用它并将结果检索到 Google 表格。


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

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


如何判断内容是否是动态添加的

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

  1. 打开源数据的 URL。
  2. Press F12 to open Chrome Developer Tools
  3. Press Control+Shift+P to open the Command Menu.
  4. Start typing javascript, select Disable JavaScript, and then press Enter to run the command. JavaScript is now disabled.

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

重新加载页面,查看是否显示了您要导入的内容,如果显示则可以导入通过使用 Google Sheets 内置函数,否则这是不可能的,但通过使用其他方法可能是可能的网页抓取.

根据维基百科 https://en.wikipedia.org/wiki/Web_scraping, 网页抓取, 网络收获, or 网络数据提取 is 数据抓取 https://en.wikipedia.org/wiki/Data_scraping用于提取数据 https://en.wikipedia.org/wiki/Data_extraction from websites https://en.wikipedia.org/wiki/Website.

使用robots.txt阻止网络爬虫

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

用户代理的使用

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


下面有关于 Google Sheets 内置“网络抓取”功能如何工作的更多详细信息

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

  • 公开可用。这意味着该资源不需要授权/登录任何服务即可访问它。
  • The content is "static". This mean that if you open the resource using the view source code option of modern web browsers it will be displayed as plain text.
    • 注意:Chrome 的 Inspect 工具显示解析后的 DOM;在其他作品中,网页的实际结构/内容可以通过 JavaScript 代码或浏览器扩展/插件动态修改。
  • The content has the appropriated structure.
    • IMPORTDATA 适用于结构化内容csv or tsv与资源的文件扩展名无关。
    • IMPORTFEED 适用于 ATOM/RSS 等标记内容
    • IMPORTHTML 使用 HTML 形式的标记内容,其中包括正确标记的列表或表格。
    • IMPORTXML 使用 XML 或其任何变体(如 XHTML)的标记内容。
  • The content doesn't exceeds the maximum size. Google haven't disclosed this limit but the below error will be shown when the content exceeds the maximum size:

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

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

On W3C 标记验证器 https://validator.w3.org有几种工具可以检查资源是否已正确标记。

关于 CSV 签出是否有已知的服务来验证 CSV 文件 https://stackoverflow.com/q/6738996/1595451

值得注意的是,电子表格

  • 应有足够的空间容纳导入的内容; Google Sheets 的电子表格单元格限制为 1000 万个这个帖子 https://webapps.stackexchange.com/a/106508/88163列数限制为 18278,单元格内容(即使是值或公式)也有 5 万个字符。
  • 它不能很好地处理大量的单元内内容; “限制”取决于用户屏幕尺寸和分辨率,因为现在可以放大/缩小。

参考

  • https://developers.google.com/web/tools/chrome-devtools/javascript/disable https://developers.google.com/web/tools/chrome-devtools/javascript/disable
  • https://en.wikipedia.org/wiki/Web_scraping https://en.wikipedia.org/wiki/Web_scraping

Related

  • 使用 Google Apps 脚本抓取动态网页 https://stackoverflow.com/q/13788353/1595451
  • 使用vba从网站抓取数据 https://stackoverflow.com/q/27066963/1595451
  • 通过 Google Docs 阻止网站抓取 https://stackoverflow.com/q/41830988/1595451
  • 有没有一种方法可以在不使用事件侦听器的情况下从文本/事件流获取单个响应? https://stackoverflow.com/q/69654650/1595451

软件推荐

  • 免费提供网页抓取工具/软件吗? https://softwarerecs.stackexchange.com/q/55071/14228
  • 需要最少安装的网络抓取工具的推荐 https://softwarerecs.stackexchange.com/q/60424/14228

网络应用程序

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

  • 无法使用IMPORTHTML在 Google 表格中 https://webapps.stackexchange.com/q/110150/88163

类似问题

Some of this questions might be closed as duplicate of this one

  • 将 javascript 表导入 Google 文档电子表格 https://stackoverflow.com/q/32020041/1595451
  • Importxml 导入内容为空 https://stackoverflow.com/q/34217955/1595451
  • scrape table using google app scripts https://stackoverflow.com/q/46416667/1595451
    • 一种答案包括使用 URL Fetch Service 的 Google Apps 脚本代码
  • 使用 ImportXML 和 XPath 捕获元素 https://stackoverflow.com/q/47908176/1595451
  • 如何将 Javascript 表格导入 Google 电子表格? https://stackoverflow.com/q/49149751/1595451
  • Scrape the current share price data from the ASX https://stackoverflow.com/q/50636351/1595451
    • 答案之一包括用于从 JSON 源获取数据的 Google Apps 脚本代码
  • 使用 Google 表格进行网页抓取的指南 https://stackoverflow.com/q/58425429/1595451
  • 如何通过 IMPORTXML 公式从 Google 表格中的 Indiegogo.com 抓取数据 https://stackoverflow.com/q/58745060/1595451
  • 为什么 importxml 和 importhtml 在这里不起作用? https://stackoverflow.com/q/58842048/1595451
  • Google Sheet use Importxml error could not fetch url https://stackoverflow.com/q/61027957/1595451
      • 一种答案包括使用 URL Fetch Service 的 Google Apps 脚本代码
  • Google Sheets - 提取投资组合数据 https://stackoverflow.com/q/65781683/1595451
  • 从 API/网页中提取价值 https://stackoverflow.com/q/66506865/1595451
  • IMPORTXML shows an error while scraping data from website https://stackoverflow.com/q/67758527/1595451
    • 一个答案表明xhr https://en.wikipedia.org/wiki/XMLHttpRequest使用浏览器开发工具发现请求
  • Replacing =ImportHTML with URLFetchApp https://stackoverflow.com/q/67790221/1595451
    • 一种答案包括使用 URL Fetch Service 的 Google Apps 脚本代码
  • 如何使用IMPORTXML导入隐藏的div标签? https://stackoverflow.com/q/69093513/1595451
  • Google Sheet Web-scraping ImportXml Xpath on Yahoo Finance doesn't works with french stock https://stackoverflow.com/q/70813962/1595451
    • 答案之一包括用于从 JSON 源获取数据的 Google Apps 脚本代码。截至 2023 年 1 月 4 日,它不再有效,很可能是因为 Yahoo!财务部门现在正在对 JSON 进行加密。请参阅泰纳克的回答 https://stackoverflow.com/a/74872266/1595451 to 如何使用 Google Apps 脚本从其对象中提取雅虎财经历史价格数据? https://stackoverflow.com/q/74871762/1595451使用 Crypto.js 的脚本来处理这个问题。
  • How to fetch data which is loaded by the ajax (asynchronous) method after the web page has already been loaded using apps script? https://stackoverflow.com/q/70269171/1595451
    • 一个答案建议从服务器读取数据,而不是从网页抓取数据。
  • 使用 ImportXML 提取数据 https://stackoverflow.com/q/70914071/1595451
  • Extracting data from web page using Cheerio Library https://stackoverflow.com/q/72673558/1595451
    • 一个答案建议使用 API 和 Google Apps 脚本
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从使用 JavaScript 的网站将数据抓取到 Google 表格 的相关文章

随机推荐

  • 在 MSBuild 配置文件中指定记录器

    我已经为我的 MSBuild 进程编写了一些自定义记录器 并且它在命令行中工作正常 msbuild
  • [SPLoaderError.loadComponentError]:***无法加载组件

    我在 Sharepoint Framework 中开发了一个 webpart 当我使用 gulp build 编译它时 它编译得很好 但是当我执行 gulpserve 并将 webpart 添加到工作台时 我收到此错误 SPLoaderEr
  • 如何解决“致命错误:未找到类‘MySQLi’”?

    我正在做教程并收到此错误 致命错误 第 8 行未找到类 MySQLi 长 URL 第 8 行的代码是 mysqli new MySQLi db server db user db pass db name 我在网上看到有人说看看我的 php
  • 规则引擎 - 优点和缺点

    我正在审核一个使用所谓的规则引擎 http en wikipedia org wiki Business rules engine 简而言之 这是一种从应用程序代码外部化业务逻辑的方法 这个概念对我来说是全新的 我对此非常怀疑 听到人们谈论
  • 如何使用react-router从hash URL获取参数?

    使用react router从HASH URL获取URL参数的任何方法 您应该能够访问您的位置
  • Openpyxl - 复制和粘贴数据时出现空行

    我编写了一个脚本 将数据从一个工作簿复制到另一个工作簿 我唯一的问题是数据之间添加了空单元格 谁能理解为什么 看起来脚本正在跳过不满足 if 语句条件的值 但仍然复制空白单元格 from openpyxl import load workb
  • 我可以在 Emacs 中使用 ido 模式风格完成搜索标签吗?

    是否可以使用 ido 模式补全来查找 TAGS 文件中的定义 我怀疑 ido completing read 是答案的一部分 这是我的非工作代码 它显示了一个未填充的 ido 模式迷你缓冲区 defun ido choose from ta
  • JAR 和包有什么区别?

    JAR 文件和包之间有什么区别吗 包是一种方式逻辑上组织你的课程 例如 您可以声明package com foo 在每个源文件的顶部 这些源文件相关性足以驻留在com foo打包在一起 Java 编译器和运行时也会期望您将此类文件放置在路径
  • 如何将 Excel 文件转换为 .csv 文件?

    我正在为 Honeywell Dolphin 6100 开发一个应用程序 这是一款带有条形码扫描仪的移动计算机 使用 Windows CE 5 0 等操作系统 我想创建一个小应用程序 负责将 excel 文件转换为 csv 文件 在Win
  • 可点击的SVG图像来运行方法

    我创建了一个需要交互的地图 火车 的 SVG 图像 当单击地图的一部分时 颜色将会改变 并且将执行控制事物的方法 通过树莓派 将按钮连接到插槽很简单 我猜想 self path clicked connect self some func
  • 你能让mockito(1.10.17)使用接口中的默认方法吗?

    我是mockito的忠实粉丝 不幸的是我的项目之一 https github com fge throwing lambdas它使用 Java 8 它对我来说失败了 设想 public final class MockTest Test p
  • 使用谷歌日历 API oauth2 服务帐户(node.js)模拟用户

    我正在尝试通过 google calendar API 使用服务器进行服务器身份验证 他们在文档中提到您可以冒充用户 我已向我想要模拟的帐户添加了所有者权限 并确保启用了域范围的委派 据我所知 user example 应该指定模仿者 但它
  • WPF 中是否有类似于 DataTemplate 的 Style.BasedOn 的东西?

    目前 我有两个非常大的 DataTemplate 对象来在两个列表框中显示两组项目 DataTemplate 在两个 ListBox 的 ItemContainerStyle 属性中设置的两个 Style 的 ContentTemplate
  • 要求 CLI 部署到不同的环境?

    是否可以使用 Alexa Skill Kit 的ASK CLI https developer amazon com docs smapi ask cli command reference html deploy command depl
  • R 中的多重随机采样

    我目前有一个名为 Liquidation 的数据框 我想在其中运行 30 个随机样本 每个样本有 1000 个观察值 指定哪个帐户来自哪个样本 然后将其合并到一个新的数据框中 其中包含所有 30 个样本 以下是我在使用 dplyr 包进行随
  • 如何获取已登录的本地 Windows 用户列表?

    我正在尝试为 Windows 编写一个更快的用户切换应用程序 Win L 选择用户非常麻烦 如果我以管理员身份启动任务管理器 它会显示活动用户 我可以选择一个用户并 连接 如果我输入他们的密码 如何获取所有用户 或所有活跃用户 的列表 我正
  • 如何在 VS Code 中设置 Julia?

    我拥有纯 Windows Visual Studio 编程背景 几乎没有 Linux 经验 似乎可以使用VS Code https code visualstudio com 在 Julia 中编程 但我不知道如何正确设置 有人有好的例子吗
  • Printf 未在此范围内声明

    我刚刚开始学习 C 但是我提到的书中的第一个程序会生成一个错误 printf 未在此范围内声明 I am typing the code exactly as it is given in the book Still the error
  • 升级到 Angular 13 后的 Mixins / Webpack 问题

    将我的项目升级到 Angular 13 后 我在运行时收到以下错误ng serve 我也包括两者package json and webpack config js以下文件 我已经尝试删除node modules文件夹并运行npm inst
  • 从使用 JavaScript 的网站将数据抓取到 Google 表格

    我正在尝试将数据从以下网站导入到 Google 表格 我想导入当天的所有比赛 https www tournamentsoftware com tournament b731fdcd a0c8 4558 9344 2a14c267ee8b