2012-01-20 10 views
4

私はcnn記事からコメントを取得するためにスクレイピングスクリプトを書いています。たとえば、この記事:http://www.cnn.com/2012/01/19/politics/gop-debate/index.html?hpt=hp_t1disqusを使用してウェブサイトからのコメントを取得する

私は、cnnがコメントの議論にdisqusを使用することを認識しています。コメントの読み込みはウェブページベースではなく(前のページ、次のページ)、動的であるため(つまり、次の25の読み込みをクリックする必要があるため)、この記事の5000以上のコメントをすべて取得する方法はわかりません。

アイデアやご提案はありますか?

ありがとうございます!

+0

あなたはこすりする方法を求めていますか?または特定のツールを使用してスクレープする方法を知っていますか?ディスカスベースのコメントシステムをスクラップするための支援が必要ですか?後者の場合は、ツールの名前を含めるように質問してください – Boaz

+0

こんにちはBoaz.Jan、私は掻きする方法を求めています。 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)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 

お知らせ: 私はディスカスに慣れていないんだけど、すべてのコメントを強制するためのより良い選択肢かもしれませんがすべてのコメントが表示され、List要素dsq-commentsをこするまで投稿されたコードの部分をクリックしてください。

5

私はajaxを使ってdisqusのコメントを持ったページを掻き集めることでコメントを得る必要がありました。彼らはサーバー上でレンダリングされなかったので、私はdisqus APIを呼び出さなければなりませんでした。ページの公開鍵、およびフォーラムの名前を取得するためのJSのソースコードで見て、また

var identifier = "456643" // take note of this from the page source 
// this is the ident url query param in the following js request 

:ソースコードでは、識別コードが必要になります。適切な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); 
    } 
}); 
関連する問題