2012-12-05 82 views
0

我想要做的是获得分配给某个维基百科文章的类别以及指定类别的href值。获取维基百科分类链接

例子:

鉴于this article

“面包” & “早餐食品” 是目录 名称和“http://en.wikipedia.org/wiki/Category:面包” & “http://en.wikipedia.org/wiki/Category:Breakfast_foods” 是 categorylinks

我在java中使用Jodd库中的'Jerry'来在java中使用JQuery。

我用下面的代码到目前为止得到的类别名称:

File file = new File(SystemUtil.getTempDir(), "temp"); 
NetUtil.downloadFile(url, file); 
Jerry doc = Jerry.jerry(FileUtil.readString(file)); 
String category=doc.$("div#mw-normal-catlinks").text(); 

它返回catlinks DIV中的纯文本。 因为这个div包含一个ul元素li元素表示一个类别,所以迭代list-item-elements似乎更复杂,以获得类别名称&链接。

要做到这一点我试过如下:

doc.$("div#mw-normal-catlinks").children().each(new CategoryFinder()); 

这里的想法是使用JerryFunction对象来获取名称和链接为每个孩子(每个需要JerryFunction作为参数)。 正如你可能会注意到我呼吁儿童()在div而不是ul元素 - 这是缺乏线索如何做到这一点。

我该如何使这种方法有效?另外,是否有另一种方式获得类别名称&链接?

+0

试图解析维基百科页面的HTML是不是一个好主意。您应该使用[API](https://www.mediawiki.org/wiki/API)。 – svick

回答

1

你或许应该使用维基百科的API,但无论如何,这里是如何将它与Jodd杰里:

File file = FileUtil.createTempFile(); 
    NetUtil.downloadFile("http://en.wikipedia.org/wiki/Toast", file); 
    Jerry doc = Jerry.jerry(FileUtil.readString(file)); 
    Jerry category = doc.$("div#mw-normal-catlinks"); 
    category.$("ul li").each(
     new JerryFunction() { 
      public boolean onNode(Jerry $this, int index) { 
       System.out.println($this.text()); 
       return true; 
      } 
     }); 

这会打印出:

Breads 
Breakfast foods