【发布时间】:2019-07-06 18:53:12
【问题描述】:
我在 Google Sheets 脚本中运行了这个函数,该脚本从 subreddits 中提取 HTML 并将它们返回到电子表格。它在某些/大部分时间对我有用,但其他时候我收到一个错误“无法解析文本。(第 13 行)”这是 var doc = Xml.parse(page, true); 的行。知道为什么会发生这种情况,或者这只是 Google Scripts 的一个错误吗?这是有效的代码……有时。
function getRedditHTML() {
var entries_array = [];
var subreddit_array = ['https://www.reddit.com/r/news/','https://www.reddit.com/r/funny/','https://www.reddit.com/r/science/'];
for (var s = 0; s < subreddit_array.length; s++) {
var page = UrlFetchApp.fetch(subreddit_array[s]);
//this is Line 13 that is breaking
var doc = Xml.parse(page, true);
var bodyHtml = doc.html.body.toXmlString();
doc = XmlService.parse(bodyHtml);
var root = doc.getRootElement();
var entries = getElementsByClassName(root,'thing');
for (var i = 0; i < entries.length; i++) {
var title = getElementsByClassName(entries[i],'title');
title = XmlService.getRawFormat().format(title[1]).replace(/<[^>]*>/g, "");
var link = getElementsByClassName(entries[i],'comments');
link = link[0].getAttribute('href').getValue();
var rank = getElementsByClassName(entries[i],'rank');
rank = rank[0].getValue();
var likes = getElementsByClassName(entries[i],'likes');
likes = likes[0].getValue();
entries_array.push([rank, likes, title, link]);
}
}
return entries_array.sort(function (a, b) {
return b[1] - a[1];
});
}
【问题讨论】:
-
您的脚本在我尝试时根本不起作用 - 我也没有看到任何名为
thing的类 - 有诸如thing_id之类的标签 - 是否必须这样做它通过应用程序脚本为您服务?因为我还有其他几种非常简单的方法可以将其直接导入工作表中 -
刚刚在 Google 表格脚本中尝试了上述代码,它对我有用。
thing类位于每个包含 HTML 帖子的 div 上。每个 div 也有一个唯一的 id,但我想提取所有帖子,这就是我按类名提取的原因。我尝试了 Google Sheets 中的其他内置函数(例如IMPORTFEED),但它不能给我想要的特定值,比如“排名”或“喜欢”,所以我决定制作这个脚本。如果您有其他方法,请告诉我。
标签: google-apps-script google-sheets xml-parsing reddit