document解析html


解決一個問題有很多方法,雖然可以達到同樣的目的,但是過程卻是相差勝遠.比如:從HTML代碼片段里面獲取img屬性的值

我剛剛開始使用的是正則表達式去匹配,代碼如下:

/** * 得到網頁中圖片的地址 * @param sets html字符串 */  
    public  Set<String> getImgStr(String htmlStr) { Set<String> pics = new HashSet<String>(); String img = ""; Pattern p_image; Matcher m_image; String regEx_img = "<img.*src\\s*=\\s*(.*?)[^>]*?>"; p_image = Pattern.compile(regEx_img, Pattern.CASE_INSENSITIVE); m_image = p_image.matcher(htmlStr); while (m_image.find()) { // 得到<img />數據 
            img = m_image.group(); // 匹配<img>中的src數據 
            Matcher m = Pattern.compile("src\\s*=\\s*\"?(.*?)(\"|>|\\s+)").matcher(img); while (m.find()) { pics.add(m.group(1)); } } return pics; } 

運行過程中發現這種全字段去匹配的方式效率非常低,如果內容大點,會卡死.后面才知道java的document對象可以快速解析HTML代碼

Document doc = Jsop.parse(htmlStr); Elements imgNodeList = doc.select("img"); String src = ""; StringBuffer srcBase64s = new StringBuffer(); int n = 1; for(Element imgNode : imgNodeList){ src = imgNode.attr("src"); if(src.contains("base64")){ String srcBase64 = src.split(",")[1]; if(n<imgNodeList).size()){ srcBase64s.append(srcBase64).append(","); n++; }else{ srcBase64s.append((srcBase64); } } } //轉化為二進制存儲,圖片一般都是以二進制去存儲的
Bytes.toBytes(srcBase64s.toString())

document是分節點去獲取屬性值,效率會高很多,其操作方式跟js,jQuery的方式類似,具體可以參照該https://blog.csdn.net/qq541976141/article/details/51162084博客


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM