프로그래밍이나 네트워크 크롤러를 작성할 때 유용한 데이터를 추출하려면 HTML을 구문 분석해야합니다. 좋은 도구는 특히 유용하며 인터넷에는 다음과 같은 많은 도구가 있습니다.
그것을 사용한 후 : Htmlcleaner가 htmlparser, 특히 htmlcleaner의 xpath보다 낫다고 생각합니다.
htmlcleaner의 예를 들어 봅시다. 요구 사항은 다음과 같습니다.
1. htmlcleaner 사용 :
1. htmlcleaner
Htmlcleaner는 오픈 소스 Java 언어 HTML 문서 파서입니다. HTMLCleaner는 HTML 문서의 각 요소를 재구성하고 우수한 구조 (잘 형성된)로 HTML 문서를 생성 할 수 있습니다. 기본적으로 따르는 규칙은 대부분의 웹 브라우저가 문서 모델로 사용하는 규칙과 유사합니다. 그러나 사용자는 필터링 및 매칭을위한 사용자 정의 태그 및 규칙을 제공 할 수 있습니다.
홈 주소 : http://htmlcleaner.sourceforge.net/
주소 다운로드 : //www.vevb.com/softs/364983.html
2. 기본 예, Wikipedia의 공항 정보를 가져옵니다
html 클래스 -decmo.html
html-clean-demo.html <! : //www.w3.org/1999/xhtml "xml :"zh-cn "dir ="ltr "> <high> <meta http-equiv ="content-seype "content ="text/html; = gbk " /> <meta http-equiv ="content-language "content ="zh-cn " /> <title> html clean demo < /head> <bod> <div class ="d_1 "> ul> < li> bar </li> <li> foo </li> <li> gzz </li> </ul> </div> <div> <ul> <li> <이름 = "my_href"href = " 1.html "> text- </a> </a> </li> <li> <a name ="my_href "href ="2.html "> text-2 </a> </a> </a> </ a> </a> </a> </a> </a> </a> </a> </a> </a> </a> </a> </a>/li> <li> <이름 = "my_href"href = " 3.html "> text-3 </a> </a> </li> <li> <a name ="my_href "href ="4.html "> text-4 </a> </li> </ul> < /div> </body> </html>
htmlcleanerdemo.java
com.chenlb; import org.htmlcleaner.htmlclener.tagnode; tagnode node = clear.clean ( "html/html-demo.html"; "gbk"); 0) {system.out.println (title = "+(tagnode) ns [0]); = node.evaluatexpath ( "// div [@class = 'd_1']); for (object : ns) {tagnode n = (tagnode) on; system.out.println ("/ttext = "+n.getText ();} system.out.println ( "a :"); ( "href")+", text ="+n.getText ());}}}
Cleaner.clean ()의 매개 변수는 파일, URL 및 문자열 내용 일 수 있습니다. 보다 일반적으로 사용되는 것은 EvaluexPath, getElementsByAttValue, getElementsByName 메소드입니다. 또한 HTMLCleaner는 불규칙한 HTML과 더 잘 호환됩니다.
Wikipedia에서 공항 정보를 얻으십시오
java.io com.moore.util.httpclientutil;/*** 사용 : todo** @author bbdtek*/public class parserairport {private static logger logg = logg = logg erfactory.getlogger (parserairport.class);/*** @param args * @throws unupportedencingexception * @throws xpatherexception */public static void main (string [] args)은 unportedencodexce ption, xpatherexception {string url = "http://zh.wikipedia.org/wiki/%E4%B8%E5E5E5 %8d%8e%e4%ba%ba%e6%b0%91%e5%85%b1%e5%8c%e5%bd%e6%ba%ba%e5%ba%e5%88 88%97%e8% a1%a8 "; 문자열 내용 = httpclientutil.getil (). getcon (url); htmlcleaner hc = new htmlclener (); xpath ="// div [@class = 'mw-content-ltr'] // table [ @ class = 'wikitable + sortable'] // tbody // tr [@align = 'right'] "object [] objarr = null; objarr = tn .evaluatexpath (xpath); if (objarr! = null && objarr.length> 0) {for (Object obj : objarr) {tagnode tntr = (tagnode) obj; objarrtr.evaluatexpath (xptr); info (str);}}}}}
둘째, XPath의 첫 번째 탐색
1. XPath 소개 :
XPath는 XML 문서의 정보를 검색하는 언어입니다. XPath는 XML 문서의 요소 및 속성을 가로 지르는 데 사용될 수 있습니다.
2. XPath 노드를 선택하십시오
XPath는 경로 표현식을 사용하여 XML 문서에서 노드를 선택합니다. 노드는 경로 또는 단계에 의해 선택됩니다.
가장 유용한 경로 표현식은 다음과 같습니다.
표현 | 설명하다 |
---|---|
Nodename | 이 노드의 모든 하위 노드를 선택하십시오. |
/ / | 루트 노드에서 선택하십시오. |
// | 위치를 고려하지 않고 현재 노드 선택의 현재 노드 선택에서 노드를 선택하십시오. |
그러면 | 현재 노드를 선택하십시오. |
... | 현재 노드의 부모 노드를 선택하십시오. |
@ @ | 속성을 선택하십시오. |
일반적으로 사용되는 일부 표현
경로 표현 | 결과 |
---|---|
/서점/책 [1] | 서점 하위 요소에 속하는 첫 번째 책 요소를 선택하십시오. |
/서점/책 [last ()]] | 서점 하위 요소에 속하는 마지막 책 요소를 선택하십시오. |
/서점/책 [last () -1] | 서점 하위 요소에 속하는 두 번째 책 요소를 선택하십시오. |
/서점/도서 [위치 () <3] | 서점 요소에 속하는 서점의 책 요소의 두 앞면을 선택하십시오. |
// 제목 [@Lang] | Lang이라는 속성으로 모든 제목 요소를 선택하십시오. |
// 제목 [@lang = 'eng'] | 모든 제목 요소를 선택 하고이 요소에는 Eng와 Lang 속성이 있습니다. |
/서점/책 [가격> 35.00] | 서점 요소의 모든 서적 요소를 선택하면 가격 요소의 값이 35.00보다 크지 않아야합니다. |
/서점/책 [가격> 35.00-/제목 | 서점 요소에서 책 요소의 모든 제목 요소를 선택하면 가격 요소의 값이 35.00보다 크지 않아야합니다. |