java利用htmlparser獲取html中想要的代碼具體實(shí)現(xiàn)
這兩天需要做一些東西,需要抓取別人網(wǎng)頁(yè)中的一些信息。最后用htmlparser來(lái)解析html。
直接從代碼中看吧:
首先需要注意導(dǎo)入包為:import org.htmlparser下面的包
List<Mp3> mp3List = new ArrayList<Mp3>();
try{
Parser parser = new Parser(htmlStr);//初始化Parser,這里要注意導(dǎo)入包為org.htmlparser。這里參數(shù)有很多。這個(gè)地方我寫(xiě)的是提前獲取好的html文本。也可以傳入U(xiǎn)Rl對(duì)象
parser.setEncoding("utf-8");//設(shè)置編碼機(jī)
AndFilter filter =
new AndFilter(
new TagNameFilter("div"),
new HasAttributeFilter("id","songListWrapper")
);//通過(guò)filter找到div且div的id為songListWrapper
NodeList nodes = parser.parse(filter);//通過(guò)filter獲取nodes
Node node = nodes.elementAt(0);
NodeList nodesChild = node.getChildren();
Node[] nodesArr = nodesChild.toNodeArray();
NodeList nodesChild2 = nodesArr[1].getChildren();
Node[] nodesArr2 = nodesChild2.toNodeArray();
Node nodeul = nodesArr2[1];
Node[] nodesli = nodeul.getChildren().toNodeArray();//解析出nodesli為想要的
for(int i=2;i<nodesli.length;i++){
//System.out.println(nodesli[i].toHtml());
Node tempNode = nodesli[i];
TagNode tagNode = new TagNode();//通過(guò)TagNode獲得屬性,只有將Node轉(zhuǎn)換為T(mén)agNode才能獲取某一個(gè)標(biāo)簽的屬性
tagNode.setText(tempNode.toHtml());
String claStr = tagNode.getAttribute("class");//claStr為bb-dotimg clearfix song-item-hook { 'songItem': { 'sid': '113275822', 'sname': '我的要求不算高', 'author': '黃渤' } }
claStr = claStr.replaceAll(" ", "");
if(claStr.indexOf("\\?")==-1){
Pattern pattern = Pattern.compile("[\\s\\wa-z\\-]+\\{'songItem':\\{'sid':'([\\d]+)','sname':'([\\s\\S]*)','author':'([\\s\\S]*)'\\}\\}");
Matcher matcher = pattern.matcher(claStr);
if(matcher.find()){
Mp3 mp3 = new Mp3();
mp3.setSid(matcher.group(1));
mp3.setSname(matcher.group(2));
mp3.setAuthor(matcher.group(3));
mp3List.add(mp3);
//for(int j=1;j<=matcher.groupCount();j++){
//System.out.print(" "+j+"--->"+matcher.group(j));
//}
}
}
//System.out.println(matcher.find());
}
}catch(Exception e){
e.printStackTrace();
}
以上是我在項(xiàng)目中解析的東西,使用還是比較簡(jiǎn)單的,容易上手。
////claStr為bb-dotimg clearfix song-item-hook { 'songItem': { 'sid': '113275822', 'sname': '我的要求不算高', 'author': '黃渤
則是從網(wǎng)頁(yè)中解析到的內(nèi)容。
相關(guān)文章
java實(shí)現(xiàn)excel和txt文件互轉(zhuǎn)
本篇文章主要介紹了java實(shí)現(xiàn)excel和txt文件互轉(zhuǎn)的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-04-04
MyBatis @Param注解的實(shí)現(xiàn)
本文主要介紹了MyBatis @Param注解的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
IDEA修改生成jar包名字的兩種方法實(shí)現(xiàn)
本文主要介紹了IDEA修改生成jar包名字的兩種方法實(shí)現(xiàn),通過(guò)簡(jiǎn)單的步驟,您可以修改項(xiàng)目名稱并在打包時(shí)使用新的名稱,具有一定的參考價(jià)值,感興趣的可以了解下2023-08-08
SpringBoot項(xiàng)目如何打war包問(wèn)題詳解
傳統(tǒng)的部署方式:將項(xiàng)目打成war包,放入tomcat的webapps目錄下面,啟動(dòng)tomcat,即可訪問(wèn).文中有非常詳細(xì)的介紹,對(duì)正在學(xué)習(xí)springboot的小伙伴很有幫助,需要的朋友可以參考下2021-05-05
SpringBoot項(xiàng)目在啟動(dòng)后自動(dòng)關(guān)閉的實(shí)現(xiàn)
我們?cè)趯?xiě)spring?boot?web項(xiàng)目時(shí),有時(shí)會(huì)遇到啟動(dòng)后立即關(guān)閉的情況,?本文主要介紹了SpringBoot項(xiàng)目在啟動(dòng)后自動(dòng)關(guān)閉的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01

