【问题标题】:How Do I Use IMPORTXML For Hundreds of URL's?如何将 IMPORTXML 用于数百个 URL?
【发布时间】:2023-03-24 12:15:01
【问题描述】:

基本上我有一排 300 多个 URL。

我需要提取下一列中每个 URL 旁边的标题。

所以我尝试了这个:

=IMPORTXML(A1,"//title")

并将它拖到 A300+ - 它可以工作,问题是它调用了太多的东西,谷歌告诉我,我等到最后 2 个,然后意外刷新页面,又重新开始。

我也试过了:

={IMPORTXML(A1,"//title");IMPORTXML(A327,"//title")}  

正如其他人建议的那样,它仍在加载(同样的问题)。

有没有更好的方法来做到这一点?

【问题讨论】:

  • 很遗憾,不可能

标签: google-sheets google-sheets-formula spreadsheet


【解决方案1】:

很遗憾,IMPORTXML does not support ARRAYFORMULA。此外,当有数百个包含 IMPORTXML 函数的单元格时,由于会有多个 IMPORTXML 请求,因此该函数的结果可能会重新加载。

替代选项

您可以在电子表格文件中通过creating a bound script(见下文)尝试此示例,该文件将为您提供自定义菜单:

此脚本将使用UrlFetchApp 代替 IMPORTXML 函数来获取 URL 的标题。

示例脚本:

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('URL titles')
      .addItem('Show URL titles on Column B', 'processTitles')
      .addToUi();
}

function processTitles(){
  var ss = SpreadsheetApp.getActive().getActiveSheet();
  var lastRow = ss.getDataRange().getLastRow();
  var url;
  
  for(row=1; row<= lastRow; row++){ //Script will start getting URL from A1 and beyond
    if(ss.getRange("B"+row).getValue() == ""){
        try{
          url = ss.getRange("A"+row).getValue();
          var response = UrlFetchApp.fetch(url).getContentText();
          ss.getRange("B"+row).setValue(response.match('<title>(.*?)</title>')[1])
          Logger.log(response.match('<title>(.*?)</title>')[1].toString());
          continue;
        }catch(e){
          ss.getRange("B"+row).setValue(response.match('title="(.*?)"')[1]);
          Logger.log(response.match('title="(.*?)"')[1].toString());
          continue;
        }
    }else{
      continue;
    }
  }
}

自定义菜单在 B 列显示 URL 标题 将自动 通过读取 URL 的 HTML 内容来抓取 URL 标题,并将使用 match() 方法查找 &lt;title&gt;&lt;/title&gt; 标签或 title=""。我已使用https://stackoverflow.com/a/12030612 的答案作为参考。

样本结果:

A 列带有 URL 的示例工作表文件:

从编辑器运行脚本后,返回电子表格文件并单击自定义菜单Show URL titles on Column B

这是运行自定义菜单后的结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多