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

您好Boaz.Jan,我問如何刮。對於基於網頁的新聞通訊頁面,例如http://www.guardian.co.uk/politics/2012/jan/10/scottish-independence-referendum-autumn-2014?commentpage=1,我們只需要將評論頁面替換爲2 ,3,4 ..我們可以做一個http get來下載頁面並刮掉它。使用disqus,似乎沒有辦法檢索所有評論與http get ... – qwertyl

回答

2

抓取(其他然後獲取頁面)的選項,可能不太健壯(取決於你的需要),但會提供一個解決方案,你有問題,是使用某種包裝滿周圍成熟的網絡瀏覽器,並從字面上編碼使用模式並提取相關數據。因爲你沒有提到你知道哪種編程語言,所以我給出3個例子:1)Watir - ruby​​,2)Watin - IE & Firefox via .net,3)Selenium - IE通過C#/ Java/Perl/PHP /拼音/ Python

我將使用華廷& 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

5

我需要通過刮取通過ajax發佈disqus評論的頁面來獲得評論。因爲它們不在服務器上呈現,所以我不得不調用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); 
    } 
});