通过网络抓取获取雅虎评论

Get yahoo comments with web scraping

我正在尝试获取 yahoo 上的新闻评论,其中有一个 link "See reactions",具有以下 ID:"caascommtbar-wide" 并尝试使用 CasperJS 获取该元素、Selenium、ScrapySharp,点击 link 并显示评论,但在这些工具中你永远找不到元素,我什至尝试过使用 XPath

CasperJS:

       casper.then (function () {
            if (this.exists ('a.caascommtbar-anchor')) {
                  this.echo ("It exists");
            } else
                 this.echo ("It Does not Exist");
       });

       casper.then (function () {
       // Click on 1st result link
            this.click ('a.caascommtbar-anchor');
      });

硒:

driver.FindElement (By.Id ("caascommtbar-anchor")). Click ();

有谁知道为什么您无法访问评论所在的 HTML 代码部分?

应该注意的是,当我尝试访问新闻论坛中包含的 Facebook 评论时,同样的事情发生在我身上。

正如 Isaac 所说,部分页面是异步加载的,因此您应该在代码中实现 waitFor 步骤。这是执行此操作的代码。

var url = "https://es-us.vida-estilo.yahoo.com/instagram-cierra-la-cuenta-de-una-modelo-por-ser-gorda-103756072.html";
var casper = require('casper').create({
  viewportSize: {width: 1280, height: 800},
});

casper.start(url, function() {
  this.echo('Opened page');
});

casper.waitForSelector('a.comments-title', function() {
  this.click('.comments-title');
});

casper.waitForSelector('ul.comments-list > li', function() {
  this.echo(this.getHTML('ul.comments-list'));
});

casper.run();

希望对您有所帮助

问题是为什么页面还没有加载,我不得不等待,我是 casperjs 的新手。

现在我在尝试删除所有评论及其答案时遇到了问题,但找不到可以帮助我的算法。尝试按下所有的回答按钮,但只得到第一个评论的第一个答案。

casper.waitForSelector('button.showMore', function () {
     this.click('.showMore');
}, function onWaitTimeout() {        
});

var buttons;
casper.waitForSelector('ul.comments-list', function getLinks() {
buttons = this.evaluate(function ()
{         
   var buttons = document.getElementsByClassName('replies-button');
   buttons = Array.prototype.map.call(buttons, function (button) {
   button.click();      
   casper.waitForSelector('ul.comments-list', function () {
         casper.wait(3000, function () {
        });
   });
   return button.getAttribute('class');
   });
        return buttons;
   });
}, function onWaitTimeout() {

});

function wait5seconds() {
   casper.wait(3000, function () {      
   });
}
casper.waitForSelector('ul.comments-list > li', function () {  
   var x = this.getHTML('ul.comments-list');    
   this.echo(x);
}, function onWaitTimeout() {        
});

casper.run();