无法使用 Apps 脚本从网页中抓取静态名称

Can't scrape a static name from a webpage using Apps script

当我尝试使用以下基于 google 应用程序构建的脚本从此 webpage 中抓取 Kerri Hughes 时,我总是得到 Info 作为结果。该名称是静态的,可在页面源代码 (ctrl + u) 中使用,但脚本仍然无法获取它。我该如何解决?

function myFunction() {
  var options = {
     "method" : "GET",
     "headers" : {
       "User-Agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like  Gecko) Chrome/88.0.4324.150 Safari/537.36",
     }
   };

  var webURL = "https://pubs.acs.org/doi/abs/10.1021/acschembio.1c00993";
  var response = UrlFetchApp.fetch(webURL,options);
  var $ = Cheerio.load(response.getContentText()); 

  var sName = $("span.hlFld-ContribAuthor").first().text();
  console.log(sName);
}

我猜想在您的URL中,可能需要使用cookie。所以,当你的脚本修改后,就变成了下面这样。

修改脚本。

function myFunction() {
  var webURL = "https://pubs.acs.org/doi/abs/10.1021/acschembio.1c00993";
  var res = UrlFetchApp.fetch(webURL, { followRedirects: false });
  var options = { headers: { "Cookie": JSON.stringify(res.getAllHeaders()["Set-Cookie"]) } };
  var response = UrlFetchApp.fetch(webURL, options);
  var $ = Cheerio.load(response.getContentText());
  var sName = $("span.hlFld-ContribAuthor").first().text();
  console.log(sName); // Kerri Hughes
}

结果:

当我测试上面的脚本时,我在日志中确认了Kerri Hughes的值。

注:

  • 作为另一种修改,也可以使用如下修改。在此修改中,使用了从第一个请求中检索到的重定向 URL 和 cookie。这么看来,反应速度还是有点快的。得到相同的结果。

      function myFunction() {
        var webURL = "https://pubs.acs.org/doi/abs/10.1021/acschembio.1c00993";
        var res = UrlFetchApp.fetch(webURL, { followRedirects: false });
        var resHead = res.getHeaders();
        var options = { headers: { "Cookie": resHead["Set-Cookie"] } };
        var response = UrlFetchApp.fetch(resHead["Location"], options);
        var $ = Cheerio.load(response.getContentText());
        var sName = $("span.hlFld-ContribAuthor").first().text();
        console.log(sName); // Kerri Hughes
      }
    

参考: