2012-12-05 427 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