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

时间:2018-02-02 01:42:59

标签: javascript selenium web-scraping phantomjs casperjs

我正试图在雅虎上获得新闻评论,其中有一个链接“查看反应”,其中包含以下内容:“caascommtbar-wide”并试图通过CasperJS,Selenium,ScrapySharp获取该元素,点击在链接上显示评论,但在那些工具中你永远找不到元素,我甚至尝试过使用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评论时,我发生了同样的事情。

2 个答案:

答案 0 :(得分:0)

正如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();

希望有所帮助

答案 1 :(得分:0)

问题是为什么页面还没有加载,我不得不等待,我是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();