Cal*_*res 1 php c# http data-mining
这基本上就是我在做的事情.我从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&目标= 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();
}
Run Code Online (Sandbox Code Playgroud)
是否有更快和/或更容易的替代方案?也许这里有一个数据库?(我不确定维基媒体是否有关于用户贡献的统计数据).
另外,我正在使用C#因为我最熟悉它.我可能会切换到java以允许跨平台,但我愿意接受任何其他建议.
| 归档时间: |
|
| 查看次数: |
1381 次 |
| 最近记录: |