JAVA分析html演算法(JAVA網頁蜘蛛演算法)

來源:互聯網
上載者:User

   近來有些朋友在做蜘蛛演算法,或者在網頁上面做深度的資料採礦。但是遇到複雜而繁瑣的html頁面大家都望而卻步。因為很難擷取到相應的資料。

   最古老的辦法的是嘗試用Regex,估計那麼繁瑣的東西得不償失,浪費我們寶貴的時間。

   第二個辦法用開源組織htmlparser的包,這個是一個比較老的項目,但是效果估計不是很好,好像不可以深入分析html,只能分析5級的結構;

   我這裡有個htmlparser的原始碼,可以擷取所有的超連結的

   /*<br /> * To change this template, choose Tools | Templates<br /> * and open the template in the editor.<br /> */<br />package test;</p><p>import java.util.HashMap;<br />import java.util.Map;</p><p>import org.htmlparser.Node;<br />import org.htmlparser.NodeFilter;<br />import org.htmlparser.Parser;<br />import org.htmlparser.tags.LinkTag;<br />import org.htmlparser.util.NodeList;</p><p>/**<br /> *<br /> * @author Arjick@163.com<br /> */<br />public class GetLinkTest {</p><p> public static void main(String[] args) {</p><p> try {<br /> // 通過過濾器過濾出<A>標籤<br /> Parser parser = new Parser("http://detail.china.alibaba.com/buyer/offerdetail/65296413.html?tracelog=chinaindex_recom_c2");<br /> NodeList nodeList = parser.extractAllNodesThatMatch(new NodeFilter() {<br /> // 實現該方法,用以過濾標籤<br /> public boolean accept(Node node) {<br /> if (node instanceof LinkTag)// 標記<br /> {<br /> return true;<br /> }<br /> return false;<br /> }<br /> });<br /> // 列印<br /> for (int i = 0; i < nodeList.size(); i++) {<br /> LinkTag n = (LinkTag) nodeList.elementAt(i);<br /> //System.out.print(n.getStringText() + " ==>> ");<br /> //System.out.println(n.extractLink());<br /> try {<br /> if (n.extractLink().equals("http://zjdilong.cn.alibaba.com/athena/bizreflist/zjdilong.html")) {<br /> System.out.println(n.extractLink());<br /> }<br /> } catch (Exception e) {<br /> }<br /> }<br /> } catch (Exception e) {<br /> e.printStackTrace();<br /> }</p><p> }<br />}

 

   第三個辦法,也是我現在一直在用的辦法,首先把html清理為xml,然後用java解析xml擷取資料,現在上傳一個java clean html的原始碼:

  /*<br /> * To change this template, choose Tools | Templates<br /> * and open the template in the editor.<br /> */<br />package exec;</p><p>import java.io.File;<br />import java.io.IOException;<br />import org.htmlcleaner.CleanerProperties;<br />import org.htmlcleaner.HtmlCleaner;<br />import org.htmlcleaner.PrettyXmlSerializer;<br />import org.htmlcleaner.TagNode;</p><p>/**<br /> *<br /> * @author Arjick@163.com<br /> */<br />public class HtmlClean {</p><p> public void cleanHtml(String htmlurl, String xmlurl) {<br /> try {<br /> long start = System.currentTimeMillis();</p><p> HtmlCleaner cleaner = new HtmlCleaner();<br /> CleanerProperties props = cleaner.getProperties();<br /> props.setUseCdataForScriptAndStyle(true);<br /> props.setRecognizeUnicodeChars(true);<br /> props.setUseEmptyElementTags(true);<br /> props.setAdvancedXmlEscape(true);<br /> props.setTranslateSpecialEntities(true);<br /> props.setBooleanAttributeValues("empty");</p><p> TagNode node = cleaner.clean(new File(htmlurl));</p><p> System.out.println("vreme:" + (System.currentTimeMillis() - start));</p><p> new PrettyXmlSerializer(props).writeXmlToFile(node, xmlurl);</p><p> System.out.println("vreme:" + (System.currentTimeMillis() - start));<br /> } catch (IOException e) {<br /> e.printStackTrace();<br /> }<br /> }<br />}<br /> 

 

  以上代碼大家一起分享,有什麼看法,大家要提出溝通。希望以上代碼有助於大家開發一個資料採礦程式。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.