我的问题在于两个部分,但我希望解决1会解决另一个问题。我一直在尝试解析一个页面并获得论坛帖子中的所有评论。
使用RegEx模式找到注释,并且想法是注释中的任何内容都将被读入数组,直到没有任何其他注释为止。每个评论div都遵循这种格式
<div id="post_message_480683" style="margin-right:2px;"> something </div>
我正试图找到“post_message_ [some number]”,因为每个数字似乎是随机生成的,然后得到该特定div之间的任何内容。我的第一个问题是我的RegEx似乎没有工作我已经尝试了一些但没有产生任何结果(除非我手动插入消息号),这是迄今为止的代码:
function GetPosts() {
var posts = new Array(60);
var url = "http://forums.blackmesasource.com/showthread.php?p=480683";
var geturl = UrlFetchApp.fetch(url).getContentText().toString();
var post_match = geturl.match(/<div id="post_message_(.+)" style="margin-right:2px;">(\w.+)<\/div>/m);
Logger.log(post_match);
}
编辑:我最初尝试通过GAS的Xml.Parse()类获取此信息,但在抓取URL之后我就不知道自后缀后要做什么
.getElement().getElement('div') (I also tried .getElements('div') and other variations with 'body' & 'html')
会导致错误。这是我在尝试RegEx路由之前尝试的最后一次代码尝试:
function TestArea() {
var url = "http://forums.blackmesasource.com/showthread.php?p=480683";
var geturl = UrlFetchApp.fetch(url).getContentText().toString();
//after this point things stop making sense
var parseurl = Xml.parse(geturl, true);
Logger.log(geturl);
//None of this makes sense because I don't know HOW!
//The idea: Store each cleaned up Message Div in an Array called posts
//(usually it's no more than 50 per page)
//use a for loop to write each message into a row in GoogleSpreasheet
for (var i = 0; i <= parseurl - 1; i++) {
var display = parseurl[i];
Logger.log(parseurl); }
}
感谢阅读!
答案 0 :(得分:0)
一般情况下,评论指出 - 请注意使用RegEx解析HTML。
在我过去的个人经历中,我使用Yahoo的YQL平台来运行HTML并在其服务上使用XPath。对于简单可靠的标记来说似乎工作得很好。然后,您可以将其转换为JSON或XML REST服务,您可以通过UrlFetch获取该服务并处理该简化的响应。这里没有认可,但这可能比将完整的原始HTML降级到Google Apps脚本更容易。请参阅下面的YQL控制台。我也不知道他们的配额是什么 - 你应该检讨一下。
当然,最好的方法是说服网站所有者提供RSS Feed或API。