我想写一个抓取脚本来从cnn文章中检索评论。例如,这篇文章:http://www.cnn.com/2012/01/19/politics/gop-debate/index.html?hpt=hp_t1
我意识到cnn使用disqus进行评论讨论。由于评论加载不是基于网页的(即上一页,下一页)并且是动态的(即需要点击“下一个加载25”),我不知道如何检索本文的所有5000多条评论。
有任何想法或建议吗?
非常感谢!
答案 0 :(得分:5)
我需要通过ajax抓取有disqus评论的页面来获取评论。因为它们没有在服务器上呈现,所以我不得不调用disqus api。在源代码中,您将需要标识符代码:
UPSERT
另外,查看js源代码以获取页面公钥和论坛名称。将它们放在适当的URL中。
我使用javascript nodejs来测试它,即:
var identifier = "456643" // take note of this from the page source
// this is the ident url query param in the following js request
答案 1 :(得分:2)
抓取的选项(除了获取页面之外)可能不那么强大(取决于你的需要)但是会为你遇到的问题提供一个解决方案,就是在完全成熟的情况下使用某种包装器Web浏览器并按字面编码使用模式并提取相关数据。既然你没有提到你所知道的编程语言,我将给出3个例子:1)Watir - ruby,2)Watin - IE& Firefox通过.net,3)Selenium - IE通过C#/ Java / Perl / PHP / Ruby / Python
我将使用Watin& amp;提供一个小例子。 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