複雑で面倒なHTMLページに遭遇すると、誰もが落胆します。対応するデータを取得することが難しいためです。
最も古い方法は、そのような退屈なものはコストの価値がなく、貴重な時間を無駄にすることを推定しています。
2番目の方法は、オープンソース組織HTMLParserパッケージを使用することですが、これはおそらくHTMLを詳細に分析できないようです。
ここにhtmlparserのソースコードがあります。これにより、すべてのハイパーリンクを取得できます
コードコピーは次のとおりです。
/*
*このテンプレートを変更するには、ツールを選択します
*エディターのテンプレートを開きます。
*/
パッケージテスト;
java.util.hashmapをインポートします。
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;
パブリッククラスgetLinkTest {
public static void main(string [] args){
試す {
//フィルターを介して<a>タグを除外します
Parser parser = new Parser( "// www.vevb.com");
nodeList nodeList = parser.extractallnodesthatmatch(new nodefilter(){
//このメソッドを実装してタグをフィルタリングします
public boolean Accept(ノードノード){
if(node instanceof linktag)//タグ
{
trueを返します。
}
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());
試す {
if(n.extractlink()。equals( "// www.vevb.com")){
system.out.println(n.extractlink());
}
} catch(例外e){
}
}
} catch(例外e){
e.printstacktrace();
}
}
}
3番目の方法は、最初に使用している方法であり、XMLをXMLで解析して、Java Clean HTMLソースコードをアップロードします。
コードコピーは次のとおりです。
/*
*このテンプレートを変更するには、ツールを選択します
*エディターのテンプレートを開きます。
*/
パッケージexec;
java.io.fileをインポートします。
java.io.ioexceptionをインポートします。
Import org.htmlcleaner.CleanerProperties;
Import org.htmlcleaner.htmlcleaner;
Import org.htmlcleaner.prettyxmlserializer;
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.setcognizeUnicodeChars(true);
props.setUsemptyElementTags(true);
props.setadvancedXmlescape(true);
props.setTranslatesepecialentities(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();
}
}
}