【问题标题】:Retrieve comments from website using disqus使用 disqus 从网站检索评论
【发布时间】:2012-01-20 06:53:36
【问题描述】:

我想编写一个抓取脚本来从 cnn 文章中检索 cmets。比如这篇文章:http://www.cnn.com/2012/01/19/politics/gop-debate/index.html?hpt=hp_t1

我意识到 cnn 使用 disqus 进行评论讨论。由于评论加载不是基于网页的(即上一页,下一页)并且是动态的(即需要单击“加载下一个25”),我不知道如何检索本文的所有5000+ cmets。

有什么想法或建议吗?

非常感谢!

【问题讨论】:

  • 你问怎么刮?或者您知道如何使用某个工具进行抓取,并且您需要帮助来抓取基于 disqus 的评论系统?如果是后者,则重新标记您的问题以包含工具的名称
  • 嗨 Boaz.Jan,我在问如何刮。对于基于网页的新闻专线页面,例如guardian.co.uk/politics/2012/jan/10/…,我们只需要将commentpage 替换为2、3、4..,我们可以通过http get 来下载页面并抓取它。使用disqus,似乎没有办法用http get检索所有的cmets...

标签: web-scraping disqus


【解决方案1】:

我需要通过 ajax 抓取包含 disqus cmets 的页面来获取 cmets。因为它们没有在服务器上渲染,所以我不得不调用 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);
    }
});

【讨论】:

    【解决方案2】:

    抓取选项(除了获取页面)可能不太健壮(取决于您的需要),但会为您遇到的问题提供解决方案,是使用某种包装器围绕一个完整的Web 浏览器,对使用模式进行逐字编码并提取相关数据。由于您没有提及您知道哪种编程语言,我将给出 3 个示例:1) Watir - ruby​​,2) Watin - 通过 .net 的 IE 和 Firefox,3) Selenium - 通过 C#/Java/Perl/PHP/ 的 IE 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,但它可能是一个更好的选择,通过循环链接并单击我发布的代码的部分来强制显示所有cmets,直到所有cmets都可见并且刮掉列表元素dsq-cmets

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      相关资源
      最近更新 更多