htmlcleaner 사용 방법 및 xpath 문법 초기 탐색

6701 단어 htmlcleanerxpath
프로그래밍을 할 때나 인터넷 파충류를 쓸 때 html를 분석하여 유용한 데이터를 추출해야 한다.좋은 도구는 특히 유용하다. 많은 도움을 제공할 수 있다. 인터넷에는 이런 도구가 많다. 예를 들어 htmlcleaner, htmlparser
사용 비교: htmlcleaner가 htmlparser보다 좋은 것 같고, 특히 htmlcleaner의 xpath가 특히 좋은 것 같다.
다음은 htmlcleaner에 대해 예를 들어 설명하자면 제목을 꺼내고name="my_href 링크, div의 class="d_1〃 아래의 모든 리 내용.
1. HtmlCleaner 사용:
1、HtmlCleaner
HtmlCleaner는 Java 언어의 Html 문서 해석기를 원본으로 합니다.HtmlCleaner는 HTML 문서의 모든 요소를 다시 정리하고 잘 구성된 (Well-Formed) HTML 문서를 생성할 수 있습니다.기본적으로 이것은 대부분의 웹 브라우저가 문서 대상 모델을 만드는 데 사용하는 규칙과 유사합니다.그러나 사용자는 필터링과 일치하는 사용자 정의 태그와 규칙 그룹을 제공할 수 있습니다.
홈페이지 주소:http://htmlcleaner.sourceforge.net/
다운로드 주소:https://www.jb51.net/softs/364983.html
2. 기본 예시,wikipedia에서 공항 정보 캡처
html-clean-demo.html

html-clean-demo.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns = "http://www.w3.org/1999/xhtml " xml:lang = "zh-CN" dir = "ltr">
<head>
	<meta http-equiv = "Content-Type" content = "text/html; charset=GBK" /> 
	<meta http-equiv = "Content-Language" content = "zh-CN" /> 
	<title>html clean demo </title>
</head>
<body>
<div class = "d_1">
	<ul>
		<li>bar </li>
		<li>foo </li>
		<li>gzz </li>
	</ul>
</div>
<div>
	<ul>
		<li><a name = "my_href" href = "1.html">text-1 </a></li>
		<li><a name = "my_href" href = "2.html">text-2 </a></li>
		<li><a name = "my_href" href = "3.html">text-3 </a></li>
		<li><a name = "my_href" href = "4.html">text-4 </a></li>
	</ul>
</div>
</body>
</html>
HtmlCleanerDemo.java

package com.chenlb;
import java.io.File;
import org.htmlcleaner.HtmlCleaner;
import org.htmlcleaner.TagNode;
/**
 * htmlcleaner  .
 *
 */
public class HtmlCleanerDemo {
	public static void main(String[] args) throws Exception {
		HtmlCleaner cleaner = new HtmlCleaner();
		TagNode node = cleaner.clean(new File("html/html-clean-demo.html"), "GBK");
		// tag .
		Object[] ns = node.getElementsByName("title", true);	// 
		if(ns.length > 0) {
			System.out.println("title="+((TagNode)ns[0]).getText());
		}
		System.out.println("ul/li:");
		// xpath 
		ns = node.evaluateXPath("//div[@class='d_1']//li");
		for(Object on : ns) {
			TagNode n = (TagNode) on;
			System.out.println("\ttext="+n.getText());
		}
		System.out.println("a:");
		// 
		ns = node.getElementsByAttValue("name", "my_href", true, true);
		for(Object on : ns) {
			TagNode n = (TagNode) on;
			System.out.println("\thref="+n.getAttributeByName("href")+", text="+n.getText());
		}
	}
}
cleaner.clean () 의 매개 변수는 파일, URL, 문자열 내용일 수 있습니다.비교적 자주 사용하는 것은 evaluate XPath, get Elements By Att Value, get Elements ByName 방법이다.또한 htmlcleaner는 규범에 맞지 않는 html 호환성이 비교적 좋다는 것을 설명한다.
위키백과에서 공항 정보 캡처

import java.io.UnsupportedEncodingException;
import org.htmlcleaner.HtmlCleaner;
import org.htmlcleaner.TagNode;
import org.htmlcleaner.XPatherException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
//import com.moore.index.BabyStory;
import com.moore.util.HttpClientUtil;
/**
 *  :TODO
 * 
 * @author bbdtek
 */
public class ParserAirport {
	private static Logger log = LoggerFactory.getLogger(ParserAirport.class);
	/**
	 * @param args
	 * @throws UnsupportedEncodingException
	 * @throws XPatherException
	 */
	public static void main(String[] args) throws UnsupportedEncodingException,
			XPatherException {
		String url = "http://zh.wikipedia.org/wiki/%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD%E6%9C%BA%E5%9C%BA%E5%88%97%E8%A1%A8";
		String contents = HttpClientUtil.getUtil().getCon(url);
		HtmlCleaner hc = new HtmlCleaner();
		TagNode tn = hc.clean(contents);
		String 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;
				String xptr = "//td[@align='left']//a";
				Object[] objarrtr = null;
				objarrtr = tntr.evaluateXPath(xptr);
				if (objarrtr != null && objarrtr.length > 0) {
					for (Object obja : objarrtr) {
						TagNode tna = (TagNode) obja;
						String str = tna.getText().toString();
						log.info(str);
					}
				}
			}
		}
	}
}
2. XPath 초기 탐색
1. XPath 소개:
XPath는 XML 문서에서 정보를 찾는 언어입니다.XPath는 XML 문서에서 요소와 속성을 반복할 수 있습니다.
2, XPath 노드 선택
XPath는 경로 표현식을 사용하여 XML 문서에서 노드를 선택합니다.노드는 경로나 step를 따라 선택됩니다.
가장 유용한 경로 표현식은 다음과 같습니다.
표현식
묘사
nodename
이 노드의 모든 하위 노드를 선택합니다.
/
루트 노드에서 선택합니다.
//
일치하는 현재 노드에서 문서의 노드를 선택하고 위치를 고려하지 않습니다.
.
현재 노드를 선택합니다.
..
현재 노드의 모 노드를 선택합니다.
@
속성을 선택합니다.
일부 상용 표현식
경로 표현식
결과
/bookstore/book[1]
bookstore 하위 요소에 속하는 첫 번째 책 요소를 선택하십시오.
/bookstore/book[last()]
bookstore 하위 요소에 속하는 마지막 책 요소를 선택하십시오.
/bookstore/book[last()-1]
bookstore 하위 요소에 속하는 마지막 두 번째 book 요소를 선택하십시오.
/bookstore/book[position()<3]
맨 앞에 있는 책스토어 요소에 속하는 두 개의 하위 요소를 선택하십시오.
//title[@lang]
lang이라는 속성을 가진 모든 title 요소를 선택하십시오.
//title[@lang='eng']
모든 title 요소를 선택하고 이 요소들은 값이eng인lang 속성을 가지고 있습니다.
/bookstore/book[price>35.00]
bookstore 요소의 모든 책 요소를 선택하고 그 중price 요소의 값은 35.00보다 커야 합니다.
/bookstore/book[price>35.00]/title
bookstore 요소 중의book 요소의 모든 title 요소를 선택하고 그 중price 요소의 값은 35.00보다 커야 합니다.

좋은 웹페이지 즐겨찾기