NekoHtml 解析内容时需要注意的地方
如果需要在HTML頁面中提取數據,那么NekoHTML 是個不錯的工具。因為HTML跟XML不一樣,可能存在一些格式不完整的元素,譬如沒有end tag的table等,這個時候,NekoHTML是個很盡責的清道夫和修理工,可以幫助我們整理這些缺陷數據,最終生成一個DOM Tree。? 得到DOM Tree話,使用XPath就可以輕松獲取所需數據了:-)
? 下面是幾個需要注意的問題:
1、如何使用NekoHTML?
???? 必須在 Java Build Path里加入 nekohtml.jar , xercesImpl.jar 以及xalan.jar。下載的NekoHTML目錄中并沒有xercesImpl.jar和xalan.jar,需要自己下載。
2、如何獲取XPath?
??? 當然大家可以把網頁的代碼下下來,然后使用“人工智能”的方式獲取,但是過程確實讓人眼花繚亂、心力交瘁。使用FireBug吧,可以自動生成XPath。
??? updated:
??? Firebug生成的XPath中如果含有TBODY標簽,需要把TBODY去掉,否則不能正確獲取網頁的內容。如Firebug生成的XPath為/html/body/table/tbody/tr,那么則需要修改為/html/body/table/tr。
4、如何正確結合NekoHTML和XPath?
??? XPath的Tag必須大寫。如
??? String divXpath = "//DIV";//正確
??? String divXpath = "//div";//錯誤
???
??? 節點的屬性按照頁面中實際的大小寫進行書寫
??? 如: //DIV[@class="title"]/EM[@class="right"]/A
?? 意思就是找到頁面中div的class為title的大塊,然后向下找節點為EM,同時其class為right的小塊,再繼續延伸找到此小塊下的A節點。
需要注意的是,你寫的xpath路徑必須得是連續的,比如說
<div class="title">
?? <div>
????? <em class="right"><a></a></em>
?? </div>
</div>
這個時候如果你按照上述的xpath來找a標簽的話,很顯然是找不到的,因為div class=“title”下是沒有em的,對于新手需要特別注意。
對于xpath的寫法,可以參考 http://www.w3school.com.cn/xpath/
5.對于table的處理
需要注意的是如果你給解析器的字符串是下面的這種形式
<tbody>
?? <tr>
????? <td id="tag"><a href="sdfs.html">ABC</a></td>
?? </tr>
</tbody>
如果我現在想要找上述內容中的td,給定XPATH //TD[@id='tag'],你會發現,程序根本無法找到這個node,原因是對于neko來說,對于一個不完整的table,他根本不會將其組裝成一個dom樹,也就是說上面的內容經過解析器轉換之后,就只會保留
<a href='sdfs.html'>
??? ABC
</a>
這一段內容,其他的已經被neko無視掉了。
解決辦法,在這段內容的前后加入一段table的閉合標簽之后再放入解析器中進行解析
<table>
<tbody>
?? <tr>
????? <td id="tag"><a href="sdfs.html">ABC</a></td>
?? </tr>
</tbody>
</table>
總結
以上是生活随笔為你收集整理的NekoHtml 解析内容时需要注意的地方的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(2955):项目中组件的全局注
- 下一篇: 读书笔记:普林斯顿微积分读本