这基本上是我在做什么。我从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