2012-01-20 167 views
4

我想写一个抓取脚本来检索cnn文章的评论。例如,这篇文章:http://www.cnn.com/2012/01/19/politics/gop-debate/index.html?hpt=hp_t1使用disqus从网站检索评论

我知道cnn使用disqus进行评论讨论。由于评论加载不是基于网页(即上一页,下一页)并且是动态的(即需要点击“加载下一个25”),我不知道如何检索这篇文章的所有5000多条评论。

任何想法或建议?

非常感谢!

+0

你问如何凑?或者你知道如何使用某种工具来刮擦,并且你需要帮助来挖掘一个基于disqus的评论系统?如果它的后者然后重新提出您的问题,包括工具的名称 – Boaz

+0

您好Boaz.Jan,我问如何刮。对于基于网页的新闻通讯页面,例如http://www.guardian.co.uk/politics/2012/jan/10/scottish-independence-referendum-autumn-2014?commentpage=1,我们只需要将评论页面替换为2 ,3,4 ..我们可以做一个http get来下载页面并刮掉它。使用disqus,似乎没有办法检索所有评论与http get ... – qwertyl

回答

2

抓取(其他然后获取页面)的选项,可能不太健壮(取决于你的需要),但会提供一个解决方案,你有问题,是使用某种包装满周围成熟的网络浏览器,并从字面上编码使用模式并提取相关数据。因为你没有提到你知道哪种编程语言,所以我给出3个例子:1)Watir - ruby​​,2)Watin - IE & Firefox via .net,3)Selenium - IE通过C#/ Java/Perl/PHP /拼音/ Python

我将使用华廷& C#提供了一个小例子:

IE browser = new IE(); 
browser.GoTo(YOUR CNN URL); 
List visibleComments = Browser.List(Find.ById("dsq-comments")); 
//do your scraping thing 
Link moreComments = Browser.Link(Find.ByClass("dsq-paginate-append-text"); 
moreComments.click(); 
//wait util ajax ended by searching for some indicator 
Browser.WaitUntilContainsText(SOME TEXT); 
//do your scraping thing 

注意: 我不熟悉disqus,但它可能是一个更好的选择,迫使所有的评论通过循环显示链接&点击我发布的部分代码,直到所有评论都可见并且清除List元素dsq-comments

5

我需要通过刮取通过ajax发布disqus评论的页面来获得评论。因为它们不在服务器上呈现,所以我不得不调用disqus api。在源代码中,您需要标识码:

var identifier = "456643" // take note of this from the page source 
// this is the ident url query param in the following js request 

另外,请在js源代码中查看页面的公钥和论坛名称。将这些放在适当的URL中。

我使用的JavaScript来的NodeJS测试这一点,即:

var request = require("request"); 

var publicKey = "pILMw27bsbJsdfsdQDh9Eh0MzAgFL6xx0hYdsdsdfaIfBHRvLGqFFQ09st"; 

var disqusUri = "https://disqus.com/api/3.0/threads/listPosts.json?&api_key=" + publicKey + "&thread:ident=456643&forum=nameOfForumFromSource"; 

request(disqusUri, function(res,status,err){ 
    console.log(res.body); 

    if(err){ 
     console.log("ERR: " + err); 
    } 
});