如何使用Jsoup只获得维基百科文章中其他文章的链接?

时间:2015-07-10 21:25:16

标签: java jsoup wikipedia

我想使用维基百科中的文章链接创建图表。所以我需要从父页面提取超链接到下一个节点 - 文章。

我怎样才能使用Jsoup呢?我的问题是我知道如何提取所有链接但不仅仅需要。

提前谢谢你。

2 个答案:

答案 0 :(得分:0)

试试这个,

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();
                }
            }
        }
    }
}
}

答案 1 :(得分:0)

我为我的个人项目做过类似的事情。

请参阅:

    try {
            doc = Jsoup.connect("http://www.wikipedia.org/").get();
            links = doc.select("a");
        } catch (IOException e) {
            e.printStackTrace();
        }

        String[] temp = new String[100]; //Should use ArrayList for this due to unknown number of URLS, I'm just giving an example
        if (links != null) {
            for(Element link : links){
                String temp = link.attr("href");
            }
        }

doc.select("a")会在页面上选择<a ..... />的所有代码。

link.attr("href")获取这些标记内的文章的网址。

考虑在isValidLink循环中添加for函数,以确保您抓取的Wikipedia链接实际上是一篇文章,而不仅仅是一个随机链接。对于我的项目,我的isValidLink如下:

private boolean isValidURL(String temp){
        if(temp.contains("thestar.com") && temp.length() > 75 && (temp.contains("/news/") || temp.contains("/business/") || temp.contains("/sports/") || temp.contains("/entertainment/") || temp.contains("/life/"))){
            return true;
        }
        return false;
    }

希望有所帮助