java 분석 html 알고리즘(java 웹 거미 알고리즘 예시)
가장 오래된 방법은 정규 표현식을 사용해 그렇게 번거로운 물건을 얻는 것보다 잃는 것이 더 많고, 우리의 귀중한 시간을 낭비하는 것이다.
두 번째 방법은 오픈소스 조직인 htmlparser의 가방을 사용한다. 이것은 비교적 오래된 프로젝트이지만 효과는 그다지 좋지 않다. html을 깊이 분석하지 못하고 5급의 구조만 분석할 수 있는 것 같다.
여기 htmlparser의 원본 코드가 있습니다. 모든 하이퍼링크를 얻을 수 있습니다.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package test;
import java.util.HashMap;
import java.util.Map;
import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.util.NodeList;
public class GetLinkTest {
public static void main(String[] args) {
try {
// <A>
Parser parser = new Parser("https://www.jb51.net");
NodeList nodeList = parser.extractAllNodesThatMatch(new NodeFilter() {
// ,
public boolean accept(Node node) {
if (node instanceof LinkTag)//
{
return true;
}
return false;
}
});
//
for (int i = 0; i < nodeList.size(); i++) {
LinkTag n = (LinkTag) nodeList.elementAt(i);
//System.out.print(n.getStringText() + " ==>> ");
//System.out.println(n.extractLink());
try {
if (n.extractLink().equals("https://www.jb51.net")) {
System.out.println(n.extractLink());
}
} catch (Exception e) {
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
세 번째 방법도 제가 지금 계속 사용하고 있는 방법입니다. 먼저 html을 xml로 정리한 다음에 자바로 xml을 해석하여 데이터를 얻습니다. 지금 자바 clean html의 원본 코드를 업로드합니다.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package 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;
/**
*
*/
public class HtmlClean {
public void cleanHtml(String htmlurl, String xmlurl) {
try {
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.setTranslateSpecialEntities(true);
props.setBooleanAttributeValues("empty");
TagNode node = cleaner.clean(new File(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();
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.