『壹』 誰教我用java遍歷網頁裡面的所有超鏈接,把這些超鏈接鏈接到得網頁下載下來。
有一個開源的褲:htmlparser足夠你用的了!
1、 簡介
htmlparser是一個純的java寫的html解析的庫,它不依賴於其它的java庫文件,主要用於改造或提取html。它提供了介面,支持線性和嵌套HTML文本。在實際的項目中只需要將htmlparser.jar 導入classpath中,就可以使用HTMLParser提供的API了。
2、 主要應用
HTML Parser項目主要可以用在以下兩個方面:
1. 信息提取
· 文本信息抽取,例如對HTML進行有效信息搜索
· 鏈接提取,用於自動給頁面的鏈接文本加上鏈接的標簽
· 資源提取,例如對一些圖片、聲音的資源的處理
· 鏈接檢查,用於檢查HTML中的鏈接是否有效
· 頁面內容的監控
2. 信息轉換
· 鏈接重寫,用於修改頁面中的所有超鏈接
· 網頁內容拷貝,用於將網頁內容保存到本地
· 內容檢驗,可以用來過濾網頁上一些令人不愉快的字詞
· HTML信息清洗,把本來亂七八糟的HTML信息格式化
· 轉成XML格式數據
3、 數據組織分析
HTML有3種類型的節點:RemarkNode:html中的注釋,TagNode:標簽節點,TextNode:文本節點。HTMLParser將讀取的二進制數據流,進行編碼轉換、詞法分析等操作,生成樹形層次結構的Node節點集合。
HtmlParser主要靠Node和Tag來表達Html。
Node是形成樹結構表示HTML的基礎,所有的數據表示都是介面Node的實現,Node定義了與頁面樹結構所表達的頁面Page對象,定義了獲取父、子、兄弟節點的方法,定義了節點到對應html文本的方法,定義了該節點對應的起止位置,定義了過濾方法 ,定義了Visitor訪問機制。AbstractNode是Node的一種具體的類實現,起到構成樹形結構的作用,除了同具體Node相關的accetp方法,toString,toHtml,toPlainTextString方法以外,AbstractNode實現了大多基本的方 法,使得它的子類,不用理會具體的樹操作。
Node分成三類:
§ RemarkNode:代表Html中的注釋
§ TagNode:標簽節點,是種類最多的節點類型,上述Tag的具體節點類都是TagNode的實現。
§ TextNode:文本節點
Tag是具體分析的主要內容。Tag分成composite的Tag和不能包含其他Tag的簡單Tag兩類,其中前者的基類是CompositeTag,其子類包含BodyTag,Div,FrameSetTag,OptionTag,等27個子類 ;而簡單Tag有BaseHrefTag、DoctypeTag,FrameTag,ImageTag,InputTag,JspTag,MetaTag,ProcessingInstructionTag這八類。
4、Visitor方式訪問Html:
(1)、整體解析過程
§ 用一個URL或頁面String做一個Parser
§ 用這個Parser做一個Visitor
§ 使用Parser.visitAllNodeWith(Visitor)來遍歷節點
§ 獲取Visitor遍歷後得到的數據
(2)、系統Visitor功能簡介:
§ ObjectFindingVisitor:用來找出所有指定類型的節點,採用getTags()來獲取結果。
§ StringBean:用來從一個指定的URL獲取移除了<SCRIPT></SCRIPT>和<PRE></PRE>之間代碼的Html代碼,也可以用做Visitor,用來移除這兩種標簽內部的代碼,採用StringBean.getStrings()來獲取結果。
§ HtmlPage:提取Title,body中的節點和頁面中的TableTag節點。
§ LinkFindingVisitor:找出節點中包含某個鏈接的總個數。
§ StringFindingVisitor:找出遍歷的TextNode中含有指定字元串的個數。
§ TagFindingVisitor:找出指定Tag的所有節點,可以指定多種類型。
§ TextExtractingVisitor:從網頁中把所有標簽去掉來提取文本,這個提取文本的Visitor有時是很實用的 ,只是注意在提取文本時將標簽的屬性也去掉了,也就是說只剩下標簽之間的文本,例如<a>中的鏈接也去掉了。
§ UrlModifyingVisitor:用來修改網頁中的鏈接。
(3)、Filter
如果說visitor是遍歷提取信息,當然這個信息可以包括某些節點或者從節點分析出來的更有效的信息,這都取決於我們的Visitor做成什麼樣子,那麼Filter則目標很明確,就是用來提取節點的。
系統定義了17種具體的Filter,包括依據節點父子關系的Filter,連接Filter組合的Filter,依據網頁內容匹配情況的filter,等等。我們也可以implement Filter來做自己的Filter來提取節點。
Filter的調用是同Visitor獨立的,因為也無需先filter出一些NodeList,再用Visitor來訪問。調用Filter的方法是:
NodeList nodeList = myParser.parse(someFilter);
解析之後,我們可以採用:
Node[] nodes = nodeList.toNodeArray();
來獲取節點數組,也可以直接訪問:
Node node = nodeList.elementAt(i)來獲取Node。
另外,在Filter後得到NodeList以後,我們仍然可以使用NodeList的extractAllNodesThatMatch (someFilter)來進一步過濾,同時又可以用NodeList的isitAllNodesWith(someVisitor)來做進一步的訪問。
這樣,我們可以看到HtmlParser為我們提供了非常方便的Html解析方式,針對不同的應用可以採用visitor來遍歷Html節點提取數據,也可以用Filter來過濾節點,提取出我們所關注的節點,再對節點進行處理。通過這樣的組合,一定能夠找出我們所需要的信息。
5、亂碼問題
對於HTMLParser 工具包我們需要修改其中的htmlparser.java文件使其適用中文的html文件分析。htmlparser.java文件中具體實現細節就不再介紹。這里主要是把protected static final String DEFAULT_CHARSET = "ISO-8859-1";修改成protected static final String DEFAULT_CHARSET = "gb2312";因為採用默認的字元集"ISO-8859-1"對含有中文的html文件進行分析的時候就會出現亂碼。必須進行new String(str.getBytes("ISO-8859-1"),"GB2312")的轉換工作。對於修改好的htmlparser工具包,需要重新壓縮成.jar文件,放到jdk的工作環境中。
6、自定義標簽:
注意這個類PrototyicalNodeFactory,首先創建一個它的實例,然後注冊你說自定義的Tag,再將這個工廠放置到你的parser中:
factory.registerTag(new IFrameTag());
parser.setNodeFactory(factory);
然後你再試試看,保證能夠解析到你想要得那些標准htmlparser不支持的tag。
『貳』 java可以開發手機端網頁嗎
Java是可以開發手機端網頁的,可以使用htmlParser對新聞的鏈接進行解析,然後呈現出來:
1、要爬蟲一個html數據在之前可以使用HtmlParser,見鏈接http://www.cnblogs.com/loveyakamoz/archive/2011/07/27/2118937.html 但自從jsoup誕生後,使用比HtmlParser更方面。此處就是利用jsoup解析html的,需要載入lib文件夾下的jsoup-1.7.2.jar、jsoup-1.7.2-sources.jar,自己add to build path即可。後者是源碼,可以查看,真正的包就第一個。
2、jsoup可以直接打開一個網頁url,此處為了方便已經寫了從url獲取string類型的html代碼了。所以可以直接利用Document doc = Jsoup.parse(htmlStr); 得到Document類。
以業界新聞為例,http://news.csdn.net/news/1,按快捷鍵ctrl+u查看其源碼,搜索關鍵字unit可以看到:
每一個新聞就是以關鍵字「unit」來標識的,第一頁一共有10條新聞所以有10個unit。Elements units = doc.getElementsByClass("unit"); 得到這10個新聞item的集合。
3、接下來就是對一個新聞提取具體信息
『叄』 Java將字元串轉化為html然後解析
一、如果你是用的servlet,直接用
PrintWriter out = response.getWriter();
String strss="<input type='checkbox' name='proTest' id='proc74155' value='優逸系列之鼎富122002號(第11期)人民幣' onclick=floatTip.check(this,'proc74155')></label></td><td class='dr' align='left'><b><a href='74155.shtml' alt='優逸系列之鼎富122002號(第11期)人民幣' title='優逸系列之鼎富122002號(第11期)人民幣' target='_blank'>優逸系列之鼎富1..</a></b><font class='cred'>[預售]</font></td><td class='hl' align=\"left\">包商銀行</td><td class='on'>2013-12-09</td><td >2014-02-10</td><td class='hl'>人民幣</td><td class='hl'>2.00</td><td class='hl'>混合型</td><td class='hl'>--</td><td class='hl'>--</td></tr><tr align='center'><td align='center'>";
out.println(strss);
就ok了
二、如果你是在jsp中,直接 out.println(strss);
『肆』 使用java怎麼讀取html文件內容
java可以使用jsoup、htmlparser等工具進行html的讀取和解析,以下是詳細說明:
1、jsoup 是一款 Java 的HTML 解析器,可直接解析某個URL地址、HTML文本內容。它提供了一套非常省力的API,可通過DOM,CSS以及類似於JQuery的操作方法來取出和操作數據。據說它是基於MIT協議發布的。
jsoup的主要功能如下:
從一個URL,文件或字元串中解析HTML;
使用DOM或CSS選擇器來查找、取出數據;
可操作HTML元素、屬性、文本;
示例代碼:
Document doc = Jsoup.parse(input, "UTF-8", "http://www.dangdang.com");
Element content = doc.getElementById("content");
Elements links = content.getElementsByTag("a");
for (Element link : links) {
String linkHref = link.attr("href");
String linkText = link.text();
}