【问题标题】:How do I use Google Apps Script to scrape a website for specific key words?如何使用 Google Apps 脚本抓取网站的特定关键词?
【发布时间】:2021-11-07 21:32:48
【问题描述】:

我在网上找到了这段代码,但是当我将它“复制并粘贴”到 Google Apps 脚本中时它不起作用:

https://webscraping.pro/scrape-google-app-script/

我必须进行哪些更改才能使其正常工作,或者是否有一种直接的方法可以在网站上搜索特定关键词并在 Google 表格中返回结果?

【问题讨论】:

  • 再具体一点,你遇到了什么样的困难,你能像你一样把剧本抄下来吗?可能有很多反斜杠要清除。
  • 谢谢迈克。我(还)不是编码员,因此使用特定要求向他人学习。上面的脚本返回带有反斜杠的错误(就像你说的那样)并且在每行的末尾 - 添加分号似乎也不起作用。
  • 您需要将它们以及其他问题全部删除。该脚本是为 Google Docs 设计的,而不是为电子表格设计的。但是我正在测试它,脚本无法检索信息。可能是谷歌政策的演变。我将继续尝试寻找另一种解决方案(如果页面不是由 javascript 构建的,因为在这种情况下无法获取信息°。希望其他人有解决方案?

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


【解决方案1】:

在工作表中尝试此代码,然后过滤一些不可用的行

function textOnly() {
  var url='https://stackoverflow.com/questions/69148306/how-do-i-use-google-apps-script-to-scrape-a-website-for-specific-key-words?noredirect=1#comment122219344_69148306'
  var sh=SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
  sh.clear()
  var data=UrlFetchApp.fetch(url).getContentText().replace(/(\r\n|\n|\r|\t)/gm," ").split('>')
  data.forEach(function (part){
    var text = part.split('<')[0]
    if (text.replace(/([ ]+)/gm,"")!='') {
      sh.appendRow([part.split('<')[0].replace(/([ ]{2,})/gm," ").replace(/(^ )/gm,"")])
    }
  })
}

然后,您将能够使用您的特定关键词进行过滤。要将这些关键字包含在脚本中,假设它们位于 keywords 范围内:

function textOnly() {
  var url='https://stackoverflow.com/questions/69148306/how-do-i-use-google-apps-script-to-scrape-a-website-for-specific-key-words?noredirect=1#comment122219344_69148306'
  var sh=SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
  sh.clear()
  var data=UrlFetchApp.fetch(url).getContentText().replace(/(\r\n|\n|\r|\t)/gm," ").split('>')
  var list = SpreadsheetApp.getActiveSpreadsheet().getRangeByName('keywords').getValues().join('|').toLowerCase().split('|')
  var n=0
  data.forEach(function (part){
    var text = part.split('<')[0]
    var myText = part.split('<')[0].replace(/([ ]{2,})/gm," ").replace(/(^ )/gm,"")
    if (text.replace(/([ ]+)/gm,"")!='') {
      list.forEach(function (term){
        if (myText.toLowerCase().includes(term)){
          sh.appendRow([myText])
          n++
        }
      })
    }
  })
  SpreadsheetApp.getActive().toast(n+" item(s) found", "End of script !", 5);
}

【讨论】:

  • 令人印象深刻!您的代码甚至返回图像的元数据,格式为:。这并不重要,但 Google 表格中的某些文本行在文本前有一个“空格”。您知道为什么会发生这种情况或知道如何通过代码将其删除吗?此外,在 if 语句中是否有一行代码仅在包含一系列特定单词(例如问题)时才会将文本推送到 Google 表格、标签和用户?
  • 您可以通过删除.replace(/(\r\n|\n|\r|\t)/gm," ") 来测试以防止出现多余的空格。但有时你会得到额外的行或表格。对于if statment,您可以过滤行。尽管如此,我会努力寻找解决方案。
  • 非常感谢,迈克。我已经尝试过.replace(/(\r\n|\n|\r|\t)/gm," "),但无法删除不需要的空格。一些返回特定关键字并在添加到 Google 表格的任何文本的开头删除空格的代码是理想的。
  • 在 texte sh.appendRow([part.split('&lt;')[0].replace(/([ ]{2,})/gm," ").replace(/(^ )/gm,"")]) 之前删除空格我已经更新了我的答案。对于具体的作品,我会继续努力。
  • 太好了,谢谢。我已经在一堆网站上测试了你修改后的代码,它运行良好。对于特定的词,我可以在 Google 表格中旋转数据并应用过滤器,但它会占用大量资源。
猜你喜欢
  • 2012-11-27
  • 1970-01-01
  • 2020-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多