SAX 模拟网络爬行者
原创
©著作权归作者所有:来自51CTO博客作者wx63086371c7e9c的原创作品,请联系作者获取转载授权,否则将追究法律责任
”网络爬行者“:打印HTML文件中所有的链接<a href=""></a> 使用SAX处理器的startElement方法 用来检验名称为a,属性为href的链接。即一个沿着链接达到越来越多网页的程序。
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;import java.io.InputStream;
import java.net.URL;
public class SaxTest {
public static void main(String []args){
String url = null;
if (args.length == 0 ){
url = "http://www.w3c.org";
System.out.println("Using "+url);
} else {
url = args[0];
}
DefaultHandler handle = new DefaultHandler(){
public void startElement (String uri, String localName,
String qName, Attributes attributes) throws SAXException{
if(localName.equalsIgnoreCase("a") && attributes != null){
for (int i = 0 ;i<attributes.getLength(); i++){
String aname = attributes.getLocalName(i);
if(aname.equalsIgnoreCase("href")){
System.out.println(attributes.getValue(i));
}
}
}
}
};
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
//指定由此代码生成的解析器将提供对 XML 名称空间的支持。
factory.setNamespaceAware(true);
SAXParser parse = factory.newSAXParser();
InputStream is = new URL(url).openConnection().getInputStream();
parse.parse(is,handle);
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (Exception e){
e.printStackTrace();
}
}
}