lexy

支持开源,尊重他人的劳动!

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  17 随笔 :: 0 文章 :: 9 评论 :: 0 Trackbacks

httpclient+nekohtml 解析HTML

import org.cyberneko.html.parsers.DOMParser;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.w3c.dom.Document;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;

import java.io.InputStream;
import java.io.IOException;

public class Html2XML {
    private int connectionTimeout = 5000;
    private int soTimeout = 12000;
    private String proxyHost = null;
    private int proxyPort;

    public Document getDocument(String url) {
        HttpClient client = new HttpClient();
        if (proxyHost != null) {
            client.getHostConfiguration().setProxy(proxyHost, proxyPort);
        }
        client.getHttpConnectionManager().getParams().setConnectionTimeout(connectionTimeout);
        client.getHttpConnectionManager().getParams().setSoTimeout(soTimeout);
        GetMethod method = new GetMethod(url);
        method.addRequestHeader("Content-Type", "text/html; charset=utf-8");
        try {
            int statusCode = client.executeMethod(method);
            if (statusCode != HttpStatus.SC_OK) {
                throw new HttpException("HttpStatusCode : " + statusCode);
            }
            InputStream is = method.getResponseBodyAsStream();
            DOMParser parser = new DOMParser();
            parser.setProperty("http://cyberneko.org/html/properties/default-encoding", "utf-8");
            parser.parse(new InputSource(is));
            return (parser.getDocument());
        } catch (HttpException he) {
            he.printStackTrace();
        } catch (IOException ie) {
            ie.printStackTrace();
        } catch (SAXException se) {
            se.printStackTrace();
        }
        return null;
    }
}

posted on 2008-03-31 09:50 lexy 阅读(2687) 评论(2)  编辑  收藏

评论

# re: httpclient+nekohtml 解析HTML 2008-04-01 09:25 隔叶黄莺
如果 html 页面完全不规范就不好办了,如
<h1><div>kkkkk</h1></div>  回复  更多评论
  

# re: httpclient+nekohtml 解析HTML 2008-04-01 17:13 lexy
@隔叶黄莺

这个我也没具体测试过,呵呵。
不过 nekohtml 的介绍是这样说的:
这个解析器能投扫描HTML文件并“修正”许多作者(人或机器)在编写HTML文档过程中常犯的错误。NekoHTML能增补缺失的父元素、自动用结束标签关闭相应的元素,以及不匹配的内嵌元素标签。

我在用的过程中暂时还没发现什么大问题,呵呵。
  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: