下载部分网页-数据挖掘

本文关键字:数据挖掘 网页 下载部 | 更新日期: 2023-09-27 17:52:53

这就是我所做的。我从en.wikipedia.org上选择一篇科学文章,然后得到一个编辑过这篇文章的用户列表,以及他们编辑过这篇文章的次数。为了得到这个,我从页面上的链接得到,把我带到toolserver。我使用此页面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();
    }

是否有更快和/或更容易的替代方案?也许有这样的数据库?(我不确定维基媒体是否有用户贡献的统计数据)。

另外,我使用c#是因为我最熟悉它。我可能会切换到java来允许跨平台,但我愿意接受任何其他建议。

下载部分网页-数据挖掘

我认为维基百科提供了他们的数据供下载(所以你不必从HTML页面中删除它)。

见:http://dumps.wikimedia.org/enwiki/

HTH

选择文档的特定部分可以通过范围请求来完成,这在RFC 2616 Section 14.16中有记录。

例如:

$ curl -H"range: bytes=1-20" www.apache.org
!DOCTYPE HTML PUBLIC
$

我认为您可以将WIKI处理为XML,这样您就可以使用xpath来获取所需的数据。