복잡하고 번거로운 HTML 페이지를 만나면 모든 사람이 낙담합니다. 해당 데이터를 얻기가 어렵 기 때문입니다.
가장 오래된 방법은 정기적 인 표현을 사용하는 것입니다. 그러한 지루한 것은 비용이 들지 않고 소중한 시간을 낭비하는 것입니다.
두 번째 방법은 오픈 소스 조직 HTMLPARSER 패키지를 사용하는 것입니다.이 프로젝트는 아마도 HTML을 깊이 분석 할 수 없으며 레벨 5의 구조 만 분석 할 수있는 것 같습니다.
여기에 htmlparser의 소스 코드가 있습니다. 모든 하이퍼 링크를 얻을 수 있습니다.
코드 사본은 다음과 같습니다.
/*
*이 템플릿을 변경하려면 도구를 선택하십시오
* 편집기에서 템플릿을 엽니 다.
*/
패키지 테스트;
java.util.hashmap import;
java.util.map import;
import org.htmlparser.node;
import org.htmlparser.nodefilter;
import org.htmlparser.parser;
import org.htmlparser.tags.linktag;
import org.htmlparser.util.nodelist;
공개 클래스 getLinkTest {
public static void main (String [] args) {
노력하다 {
// 필터를 통해 <a> 태그를 걸러냅니다
Parser Parser = New Parser ( "// www.vevb.com");
NODELIST NODELIST = PARSER.ExtractAllNodestHatMatch (New NodeFilter () {
// 태그를 필터링하기 위해이 메소드를 구현합니다
공개 부울 수락 (노드 노드) {
if (node instanceof instance) // 태그
{
진실을 반환하십시오.
}
거짓을 반환합니다.
}
});
// 인쇄
for (int i = 0; i <nodelist.size (); i ++) {
linktag n = (linktag) nodelist.elementat (i);
//system.out.print (n.getStringText () + "== >>");
//system.out.println (n.extractLink ());
노력하다 {
if (n.extractLink (). Equals ( "// www.vevb.com") {
System.out.println (n.extractLink ());
}
} catch (예외 e) {
}
}
} catch (예외 e) {
e.printstacktrace ();
}
}
}
세 번째 방법은 또한 내가 사용한 방법입니다. 먼저 HTML을 XML로 정리 한 다음 Java를 구문 분석하여 데이터를 가져옵니다.
코드 사본은 다음과 같습니다.
/*
*이 템플릿을 변경하려면 도구를 선택하십시오
* 편집기에서 템플릿을 엽니 다.
*/
패키지 exec;
import java.io.file;
import java.io.ioexception;
import org.htmlcleaner.cleanerProperties;
import org.htmlcleaner.htmlcleaner;
import org.htmlcleaner.prettyxmlserializer;
import org.htmlcleaner.tagnode;
/**
*
*/
공개 클래스 htmlclean {
public void cleanhtml (String htmlurl, String xmlurl) {
노력하다 {
Long Start = System.CurrentTimeMillis ();
htmlcleaner cleaner = new htmlcleaner ();
CleanerProperties props = cleaner.getProperties ();
props.setusecdataforscriptandStyle (true);
props.setRecognizeUnicodechars (true);
props.setuseEmptyElementTags (true);
props.setAdvancedXmlescape (true);
props.setTransLatesPecialEnties (true);
props.setBooleAnattributeValues ( "빈");
tagnode node = cleaner.clean (새 파일 (htmlurl));
System.out.println ( "vreme :" + (System.CurrentTimeMillis () -Start));
New PrettyxmlSerializer (props) .writexmltofile (node, xmlurl);
System.out.println ( "vreme :" + (System.CurrentTimeMillis () -Start));
} catch (ioexception e) {
e.printstacktrace ();
}
}
}