JAva分析htmlアルゴリズム(javaページクモアルゴリズム例)
3621 ワード
複雑で煩わしいhtmlページに遭遇すると、みんなは退却します.対応するデータを取得するのは難しいからです.
最も古い方法は、正則的な表現を使って、そんなに面倒なものが損をしないと推定して、私たちの貴重な時間を浪費することです.
第2の方法はhtmlparserのパッケージをオープンソースで組織し、これは比較的古いプロジェクトですが、効果の推定はあまりよくなく、htmlを深く分析できないようで、5級の構造しか分析できません.
ここにhtmlparserのソースコードがあります.すべてのハイパーリンクを取得できます.
3つ目の方法は、私が今ずっと使っている方法でもあります.まずhtmlをxmlにクリーンアップし、javaでxmlを解析してデータを取得し、java clean htmlのソースコードをアップロードします.
最も古い方法は、正則的な表現を使って、そんなに面倒なものが損をしないと推定して、私たちの貴重な時間を浪費することです.
第2の方法は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) {
}
}
3つ目の方法は、私が今ずっと使っている方法でもあります.まずhtmlをxmlにクリーンアップし、javaでxmlを解析してデータを取得し、java 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();
}
}
}