這基本上是我在做什麼。我從en.wikipedia.org中選擇一篇科學文章,並獲取編輯過的用戶列表以及他們編輯文章的次數。爲了得到這個,我按照頁面中的鏈接來獲取,並將其引導至工具服務器。我使用此頁http://toolserver.org/~daniel/WikiSense/Contributors.php?wikilang=en&wikifam=.wikipedia.org&page=Quantum_mechanics&since=&until=&grouped=on&hideanons=on&order=-edit_count&max=100&order=-edit_count&format=wiki來檢索排序列表中的編輯器,並排除匿名。這很好,因爲它有一個很好格式化的列表(儘管它有我不需要的日期)。下載網頁的一部分 - 數據挖掘
但是,爲了評判他們的可信度,我需要查看頂級用戶並查看他們貢獻的熱門文章,看看他們是編輯了大量科學文章還是隨機垃圾。我很難獲取每個用戶的數據,因爲目前我唯一可以找到的網站顯示用戶歷史記錄爲http://en.wikipedia.org/w/index.php?title=Special:Contributions&limit=5000&target=Aquirata
但是,獲取單個用戶的網頁需要相當長的時間,至少20秒,然後我仍然必須分析無用的數據等等。我不需要接近儘可能多的數據,因爲我不得不下載數據。這是到目前爲止我的代碼用於獲取用戶的數據:
static string getWebPage(string url)
{
WebClient client = new WebClient();
client.Headers.Add("user-agent",
"Mozilla/5.0 (Windows; Windows NT 5.1; rv:1.9.2.4) Gecko/20100611 Firefox/3.6.4");
return client.DownloadString(url);
}
static void Main(string[] args)
{
string url = "http://en.wikipedia.org/w/index.php?title=Special:Contributions&limit=50&target=Aquirata";
string page = getWebPage(url);
var lines = page.Split('\n', '\r');
var edits = lines.Where(t => t.StartsWith("<li class"));
foreach (string s in edits)
Console.WriteLine(s);
Console.ReadLine();
}
是否有一種可能的選擇,這將是更快和/或更容易?也許有一個數據庫在這個地方? (我不確定wikimedia是否有用戶貢獻的統計數據)。
此外,我使用C#是因爲我最熟悉它。我可能會切換到Java允許跨平臺,但我打開任何其他建議。
不錯的一個。我學到新東西! – sdolgy 2011-04-21 21:12:41