无法使用 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
}
参考:
当我尝试使用以下基于 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 }