Получить комментарии с сайта, используя disqus - PullRequest
5 голосов
/ 20 января 2012

Я бы хотел написать скрипт для извлечения комментариев из статей cnn. Например, эта статья: http://www.cnn.com/2012/01/19/politics/gop-debate/index.html?hpt=hp_t1

Я понимаю, что cnn использует disqus для обсуждения комментариев. Поскольку загрузка комментариев не основана на веб-страницах (т. Е. Предыдущая страница, следующая страница) и является динамической (т. Е. Нужно нажать «загрузить следующие 25»), я не знаю, как получить все 5000+ комментариев для этой статьи.

Любая идея или предложение?

Большое спасибо!

Ответы [ 2 ]

5 голосов
/ 17 июня 2015

Мне нужно было получить комментарии через очистку страницы с комментариями disqus через ajax. Поскольку они не были отображены на сервере, мне пришлось вызвать 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 голосов
/ 20 января 2012

Вариант для очистки (кроме получения страницы), который может быть менее надежным (зависит от ваших потребностей), но предложит решение для вашей проблемы, заключается в использовании какой-либо обертки вокруг полноценного веб-браузер и буквально кодировать шаблон использования и извлекать соответствующие данные. Поскольку вы не упомянули, какой язык программирования вы знаете, я приведу 3 примера: 1) Watir - ruby, 2) Watin - IE и Firefox через .net, 3) Selenium - IE через C # / Java / Perl / PHP / Рубин / 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, но это может быть лучшим вариантом для принудительного отображения всех комментариев, зацикливая части кода Link & click в коде, который я разместил, пока все комментарии не станут видны, и очистите элемент List dsq-comments

...