> 웹 프론트엔드 > HTML 튜토리얼 > htmlParser 사용법 튜토리얼

htmlParser 사용법 튜토리얼

黄舟
풀어 주다: 2016-12-22 14:44:37
원래의
1669명이 탐색했습니다.

최근 Lucene의 전체 텍스트 검색을 연구하고 있는데, HTML 내용이나 HTML 페이지를 구문 분석하거나 분석해야 하는 경우가 많습니다. Lucene의 자체 데모 프로그램에서도 Html Parser를 제공하는데

해결책은 아닙니다. 그래서 여기저기 검색하다가 인터넷에서 "HTMLParser"를 찾았습니다.

며칠 안에 전체 텍스트 검색용 코드를 Lucene. 이 사이트 등).

import java .io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;

import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.NodeClassFilter;
import org .htmlparser.filters.OrFilter;
org.htmlparser.node.TextNode 가져오기;
org.htmlparser.tags.LinkTag 가져오기;
org.htmlparser.util.NodeList 가져오기;
org.htmlparser 가져오기 .util.ParserException;
import org.htmlparser.visitors.HtmlPage;
import org.htmlparser.visitors.TextExtractingVisitor;

import com.jscud.util.LogMan; //로깅 클래스

/**
* Html Parse 적용을 시연합니다.
*
* @author scud http://www.jscud.com
*/

public class ParseHtmlTest
{

public static void main(String[] args)에서 예외 발생
{
String aFile = "e:/jscud/temp/test.htm";

String content = readTextFile(aFile, "GBK");

test1(content);
시스템 .out.println("======== ===========================");

test2(콘텐츠);
System.out.println("================================== ==");

test3(content );
System.out.println("======================== ===============") ;

test4(content);
System.out.println("============ ================ ========");

test5(aFile);
System.out.println("== ================ ==================");

//외부 리소스에 접근하는 것은 상대적으로 느림
test5("http://www.jscud.com ");
System.out.println("===================== =================" );

}

/**
* 파일을 읽어 내용을 분석합니다.
* filePath는 Url일 수도 있습니다.
*
* @param 리소스 파일/Url
*/
public static void test5(String 리소스) 예외 발생
{
Parser myParser = new Parser(resource );

//인코딩 설정
myParser.setEncoding("GBK");

HtmlPage 방문자 = new HtmlPage(myParser);

myParser.visitAllNodesWith(visitor );

String textInPage = Visitor.getTitle();

System.out.println(textInPage);
}

/**
* 페이지 단위로 처리하는 경우 표준 HTML 페이지의 경우 이 방법을 권장합니다.
*/
public static void test4(String content) throw Exception
{
Parser myParser;
myParser = Parser.createParser( content, "GBK");

HtmlPage Visitor = new HtmlPage (myParser);

myParser.visitAllNodesWith(visitor);

String textInPage = Visitor.getTitle();

System.out.println(textInPage);
}

/**
* HTML 페이지를 분석하려면 방문자 모드를 사용하세요.
*
* 작은 장점: <>
와 같은 번역된 기호
* 단점: 공백이 많고 링크를 추출할 수 없습니다
*
*/
public static void test3(문자열 콘텐츠)에서 예외 발생
{
파서 myParser;

myParser = Parser.createParser(content, " GBK");

TextExtractingVisitor Visitor = new TextExtractingVisitor();

myParser.visitAllNodesWith(visitor);

String textInPage = Visitor.getExtractedText();


System.out.println(textInPage);

}


/**
* 일반 텍스트와 링크의 내용을 가져옵니다.
*
* 필터 조건을 사용합니다.
*/
public static void test2(String content) throws ParserException
{
Parser myParser;

NodeList nodeList = null;

myParser = Parser.createParser(content, "GBK");


NodeFilter textFilter = new NodeClassFilter(TextNode.class);

NodeFilter linkFilter = new NodeClassFilter(LinkTag.class);


//아직 메타를 처리하지 않음

//NodeFilter MetaFilter = new NodeClassFilter(MetaTag.class);


OrFilter lastFilter = new OrFilter( );

lastFilter.setPredicates(new NodeFilter[] { textFilter, linkFilter });

nodeList = myParser.parse (lastFilter);

Node[] 노드 = nodeList.toNodeArray( );


for (int i = 0; i < node.length; i++)
{

노드 양극 = (노드) 노드[i];


String line = "";
if (양극 인스턴스of TextNode)
{
TextNode textnode = (TextNode) 양극;
//line = textnode.toPlainTextString().trim();
line = textnode.getText();
}
else if (LinkTag의 양극 인스턴스)
{

LinkTag linknode = ( LinkTag) anode;


line = linknode.getLink();
//@todo jsp 태그 필터링: 이 기능을 직접 구현할 수 있습니다
//line = StringFunc.replace(line, "< ;%.*%>", "");

}


if (isTrimEmpty(line))

continue;


System.out.println(line);
}

}

/**
* 일반 텍스트 노드를 구문 분석합니다.
*
* @param content
* @throws ParserException
*/
public static void test1(문자열 ​​콘텐츠)이 ParserException을 발생시킵니다.
{
Parser myParser;
Node[] node = null;

myParser = Parser.createParser(content, null);

nodes = myParser.extractAllNodesThatAre(TextNode.class); //여기서 예외가 발생할 수 있습니다

for (int i = 0; i < node.length; i++)
{
TextNode textnode = (TextNode) node[i];
문자열 line = textnode.toPlainTextString().trim();
if (line.equals(""))
continue;
System.out.println(line);
}

}

/**
* 파일을 문자열로 읽어옵니다.
*
* @param sFileName 파일 이름
* @param sEncode String
* @return 파일 내용
*/
public static String readTextFile(String sFileName, String sEncode)
{
StringBuffer sbStr = new StringBuffer();

시도
{
파일 ff = new File(sFileName);
InputStreamReader read = new InputStreamReader(new FileInputStream(ff),
sEncode);
BufferedReader ins = new BufferedReader( read);

String dataLine = "";
while (null != (dataLine = ins.readLine()))
{
sbStr.append(dataLine);
sbStr.append("rn");
}

ins.close();
}
catch(예외 e)
{
LogMan.error("read 텍스트 파일 오류", e);
}

return sbStr.toString();
}

/**
* 왼쪽 및 오른쪽 공백을 제거한 후 문자열이 비어 있는지 여부
* @param astr String
* @return boolean
*/
public static boolean isTrimEmpty (문자열 astr)
{
if ((null == astr) || (astr.length() == 0))
{
return true;
}
if (isBlank(astr.trim()))
{
true 반환;
}
false 반환;
}

/**
* 문자열이 비어 있는지 여부: null 또는 길이가 0입니다.
* @param astr 소스 문자열.
* @return boolean
*/
public static boolean isBlank(String astr)
{
if ((null == astr) || (astr.length() == 0))
{
true 반환;
}
else
{
false 반환;
}
}

}

 以上就是htmlParser使用教程的内容,更多更关内容请关注PHP中文网(www.php.cn)!


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿