java 분석 html 알고리즘(java 웹 거미 알고리즘 예시)

복잡하고 번거로운 html 페이지를 만나면 모두들 뒷걸음질친다.그에 상응하는 데이터를 얻기 어렵기 때문이다.
가장 오래된 방법은 정규 표현식을 사용해 그렇게 번거로운 물건을 얻는 것보다 잃는 것이 더 많고, 우리의 귀중한 시간을 낭비하는 것이다.
두 번째 방법은 오픈소스 조직인 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();
        }
    }
}

좋은 웹페이지 즐겨찾기