我想写一个从cnn文章中检索评论的抓取脚本。例如,这篇文章:http://www.cnn.com/2012/01/19/politics/gop-debate/index.html?hpt=hp_t1
我意识到cnn在他们的评论讨论中使用disqus。由于评论加载不是基于网页的(即,上一页,下一页),并且是动态的(即,需要单击“加载下一页25"),我不知道如何检索本文的所有5000+评论。
有什么想法或建议吗?
非常感谢!
发布于 2012-01-20 10:20:00
抓取(而不是获取页面)的选择可能不那么健壮(取决于你的需求),但可以为你的问题提供一个解决方案,就是在一个完全成熟的web浏览器周围使用某种包装器,从字面上编码使用模式并提取相关数据。既然你没有提到你知道哪种编程语言,我就举3个例子: 1) Watir - ruby,2) Watin - IE & Firefox通过.net,3) Selenium - IE通过C#/Java/Perl/PHP/Ruby/Python
我将提供一个使用Watin &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,但是强制显示所有评论可能是一个更好的选择,方法是循环链接并单击我发布的代码的一部分,直到所有评论都可见,并抓取列表元素dsq-comments
发布于 2015-06-16 21:09:57
我需要通过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);
}
});
https://stackoverflow.com/questions/8937785
复制