2012-01-20 2 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

Привет, Боаз. Я спрашиваю, как очистить. Для веб-страницы с новостями, например http://www.guardian.co.uk/politics/2012/jan/10/scottish-independence-referendum-autumn-2014?commentpage=1, нам просто нужно заменить комментарий на 2 , 3, 4 .. и мы можем сделать http, чтобы загрузить страницу и очистить ее. С disqus, кажется, что нет способа получить все комментарии с http get ... – qwertyl

ответ

2

Возможность соскабливания (другое, чем получение страницы), которое может быть менее надежным (в зависимости от ваших потребностей), но предложит решение проблемы, которое у вас есть, - это использовать какую-то оболочку вокруг полной и буквально кодировать шаблон использования и извлекать соответствующие данные. Поскольку вы не указали, какой язык программирования вы знаете, я приведу 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, но это может быть лучшим вариантом, чтобы заставить все замечания показать, перебирая ссылку & щелкнуть части кода, который я опубликовал, пока все комментарии не будут видны, и очистить элемент списка dsq-comments

5

Мне нужно было получить комментарии с помощью соскабливания страницы с комментариями 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); 
    } 
}); 
Смежные вопросы