作者PsMonkey (痞子军团团长)
看板java
标题[工具] HtmlParser 的一些白痴心得
时间Mon Aug 6 13:05:37 2007
http://htmlparser.sourceforge.net
最近一直在作处理网页的东西
抓远端的网页,原本是用 HttpURLConnection.getInputStream()
BufferedReader br = new BufferedReader(
new InputStreamReader(connection.getInputStream(), encoding)
);
String tmp;
while( (tmp=bis.readLine()) != null ){
//存档 or 塞 StringBuffer
}
bis.close();
存档之後,在用 htmlparser 去 parser 一些想要的东西
例如范例给的,抓 link(<a> 的 href, <link> 等等)
//准备 Parser
Page page = new Page(html, encode);
Lexer lexer = new Lexer(page);
Parser parser = new Parser(lexer);
parser.setEncoding(encode);
//开始处理
ObjectFindingVisitor visitor = new ObjectFindingVisitor(LinkTag.class);
parser.visitAllNodesWith(visitor);
ArrayList<String> tmp = new ArrayList();
for(int i=0; i<visitor.getCount(); i++){
if(((LinkTag)(visitor.getTags()[i])).isHTTPLink()){
tmp.add(((LinkTag)(visitor.getTags()[i])).getLink());
}
}
String[] result = new String[tmp.size()];
tmp.toArray(result);
在大多数情况下,日子也还过得去... [茶]
不过,有一些网页,用 HttpURLConnection.getInputStream() 是不行的
最残忍的例子就是 google search result
http://www.google.com/search?hl=zh-TW&q=htmlparser
我先用过 apache 的 HttpClient,发现他是可以的 [晕]
可是,我又不是要处理 post 的网页,用那个太麻烦 XD
後来看到 HtmlParser 有 Site Capturer 的范例
嗯... 虽然就砍站的效果而言,很糟糕
不过... 抓得下来耶... \囧/
(还没有去查原因,还请高手顺带指点 \囧/)
翻了一下原始码,他是这样子搞的
PrintWriter out = new PrintWriter(new FileOutputStream(file));
for (NodeIterator e = parser.elements(); e.hasMoreNodes();){
out.print(e.nextNode().toHtml());
}
out.close();
啧啧,居然来这招... 而且还不用管编码
(目前还没 try 出问题就是了)
另外一个... 发现...
就是用 Parser.reset(),就可以重复使用同一个 parser
之前不知道,就... [殴飞]
耍白痴完毕... [逃]
--
侃侃长论鲜窒碍 首页:
http://www.psmonkey.idv.tw
众目睽睽无心颤 Blog:
http://ps-think.blogspot.com
茕居少聊常人事
杀头容易告白难 欢迎参观 Java 版(@ptt.cc) \囧/
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.228.193.251