【问题标题】:How can I extract specific links in Wikipedia articles using jsoup?如何使用 jsoup 提取维基百科文章中的特定链接?
【发布时间】:2012-02-27 23:11:24
【问题描述】:

我正在做一个 NLP 项目,我需要知道如何提取仅在此维基百科页面的“简介”部分和“地理”部分中的链接:http://en.wikipedia.org/wiki/Boston

你能帮帮我吗?

【问题讨论】:

  • 不是您问题的答案,但也许您使用 Wikimedia 下载 Database backup dumps 会更简单
  • 你试过什么?看起来您必须遍历元素,直到找到另一个 <h3>,表示节标题。
  • @beerbajay 虽然它是相关的,但它显然不是重复的,因为它专门询问单个元素。
  • @beerbajay 这不是重复的!我想知道如何使用 select() 方法从维基百科文章的特定部分提取链接

标签: java hyperlink jsoup wikipedia extraction


【解决方案1】:

维基百科并没有让这变得容易。我不认为这是优雅的,甚至是非常可重复使用的。

    Document doc = Jsoup.connect("http://en.wikipedia.org/wiki/Boston").timeout(5000).get();

    Element intro = doc.body().select("p").first();
    while (intro.tagName().equals("p")) {
        //here you will get an Elements object which you can
        //iterate through to get the links in the intro
        System.out.println(intro.select("a"));
        intro = intro.nextElementSibling();
    }

    for (Element h2 : doc.body().select("h2")) {
        if(h2.select("span").size() == 2) {
            if (h2.select("span").get(1).text().equals("Geography")) {
                Element nextsib = h2.nextElementSibling();
                while (nextsib != null) {
                    if (nextsib.tagName().equals("p")) {
                        //here you will get an Elements object which you
                        //can iterate through to get the links in the 
                        //geography section
                        System.out.println(nextsib.select("a"));
                        nextsib = nextsib.nextElementSibling();
                    } else if (nextsib.tagName().equals("h2")) {
                        nextsib = null;
                    } else {
                        nextsib = nextsib.nextElementSibling();
                    }
                }
            }
        }
    }
}

【讨论】:

  • 谢谢!!!我尝试了您的代码,并且介绍部分工作正常......我不能对地理部分说同样的话:有些链接丢失了,有些来自气候部分!但无论如何是一个很好的步骤!非常感谢您,如果您找到解决方案,请告诉我!我也会这样做! :)
  • 我移动了行 nextsib = nextsib.nextElementSibling();下面 System.out.println(nextsib.select("a"));那应该可以解决它。
  • 嗯...我认为是一样的!现在我明白错过了什么!地理部分开头的链接(地理的第一段)。
  • 嘿抱歉第一个版本正在运行!!!这是我的错误......现在我正在查看维基百科的其他页面!
  • 所以...我看到您的代码适用于波士顿、马萨诸塞州、新英格兰等一些文章,但不适用于伦敦!我会试着理解为什么! :) 再次感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-09
相关资源
最近更新 更多