我想使用维基百科中的文章链接创建图表。所以我需要从父页面提取超链接到下一个节点 - 文章。
我怎样才能使用Jsoup呢?我的问题是我知道如何提取所有链接但不仅仅需要。
提前谢谢你。
答案 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;
}
希望有所帮助