提问人:ali izadi 提问时间:11/15/2023 更新时间:11/15/2023 访问量:37
在 Google 表格中使用 IMPORTXML 从 Google 支持页面中提取元素时遇到问题
Trouble Extracting Elements from Google Support Pages Using IMPORTXML in Google Sheets
问:
我正在尝试使用 Google 表格中的 IMPORTXML 函数从特定的 Google 支持页面中提取元素。该公式适用于其他 URL,但是当我在 Google 支持页面上使用它时,它会返回 Could not fetch url 错误:
=IMPORTXML("https://support.google.com/looker-studio/answer/11521624?hl=en", "//h2")
- 标题肯定存在于页面上。
- 该页面不需要登录,并且可以公开访问。
- IMPORTXML 函数可成功与其他非 Google 网站配合使用。
- 我更愿意使用IMPORTXML本身来解决此问题,而不是Google Apps Script或手动复制等其他方法。
这是 IMPORTXML 对 Google 自己的网页的特定限制吗?是否有任何已知的解决方法或对 IMPORTXML 查询的特定调整可能会绕过此问题,同时仍在使用 IMPORTXML?
答:
存在一些限制。IMPORTXML
IMPORTXML
只能从任何各种结构化数据类型(包括 XML、HTML、CSV、TSV 以及 RSS 和 ATOM XML 源)导入数据。
您尝试导入的数据似乎是由 JavaScript 动态加载或格式错误的,因此 IMPORTXML 无法检索它。
评论更新:
如果您对脚本持开放态度,通常总会有另一种选择。有很多关于获取和网络抓取的例子。例如,您可以使用以下脚本提取指定 URL 处标记之间的所有内容,并返回一个数组。
只需导航到“扩展”>“应用脚本”,将其发布到 Code.gs 文件中,然后单击“保存”。
function fetchAllH2Text(url) {
const html = UrlFetchApp.fetch(url).getContentText();
// Use regular expression to match content between <h2> tags
const h2Matches = html.match(/<h2[^>]*>([\s\S]*?)<\/h2>/g);
if (h2Matches) {
// Extract text content from the matches
const h2TextArray = h2Matches.map(match => match.replace(/<\/?h2[^>]*>/g, '').trim());
return h2TextArray;
} else {
return ["No <h2> tags found"];
}
}
这将允许您使用如下所示的自定义函数:
=fetchAllH2Text("https://support.google.com/looker-studio/answer/11521624?hl=en")
由于 URL 没有格式良好的 XML,这是一开始不起作用的原因,我们使用正则表达式来提取标签之间的文本。这会导致某些内容仍包含在该标记内的标记中。从这里,您可以使用标准公式来清理您要查找的内容。IMPORTXML
更新2:
或者,如果您想通过正则表达式清理数据,您可以使用此脚本,该脚本将仅从匹配项中返回长日期。
function fetchDatesFromH2Tags(url) {
const html = UrlFetchApp.fetch(url).getContentText();
// Use regular expression to match content between <h2> tags
const h2Matches = html.match(/<h2[^>]*>(?:<a[^>]*>.*?<\/a>)?(?:January|February|March|April|May|June|July|August|September|October|November|December) \d{1,2}, \d{4}<\/h2>/gi);
if (h2Matches) {
// Extract text content from the matches
const h2TextArray = h2Matches.map(match => match.replace(/<\/?h2[^>]*>|<a[^>]*>|<\/a>/g, '').trim());
return h2TextArray;
} else {
return ["No <h2> tags found"];
}
}
请务必使用新的函数名称=fetchDatesFromH2Tags("https://support.google.com/looker-studio/answer/11521624?hl=en")
评论