0

我的问题在于 2 个部分,但我希望解决 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); }
}  

谢谢阅读!

4

1 回答 1

0

一般来说,就像评论指出的那样——注意用 RegEx 解析 HTML。

在我过去的个人经验中,我使用 Yahoo 的 YQL 平台来运行 HTML,并在他们的服务上使用 XPath。对于简单可靠的标记,似乎工作得很好。然后,您可以将其转换为 JSON 或 XML REST 服务,您可以通过 UrlFetch 获取并处理该简化响应。这里没有背书,但这可能比将完整的原始 HTML 放入 Google Apps 脚本更容易。有关 YQL 控制台,请参见下文。我也不知道他们的配额是多少——你应该检查一下。

当然,最好的办法是说服网站所有者提供 RSS 提要或 API。

YQL 控制台

于 2012-10-16T14:11:53.330 回答