lexy

          支持開(kāi)源,尊重他人的勞動(dòng)!

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            17 隨筆 :: 0 文章 :: 9 評(píng)論 :: 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("??????????? 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;
          ??? }
          }


          評(píng)論

          # re: httpclient+nekohtml 解析HTML 2008-04-01 09:25 隔葉黃鶯
          如果 html 頁(yè)面完全不規(guī)范就不好辦了,如
          <h1><div>kkkkk</h1></div>  回復(fù)  更多評(píng)論
            

          # re: httpclient+nekohtml 解析HTML 2008-04-01 17:13 lexy
          @隔葉黃鶯

          這個(gè)我也沒(méi)具體測(cè)試過(guò),呵呵。
          不過(guò) nekohtml 的介紹是這樣說(shuō)的:
          這個(gè)解析器能投掃描HTML文件并“修正”許多作者(人或機(jī)器)在編寫(xiě)HTML文檔過(guò)程中常犯的錯(cuò)誤。NekoHTML能增補(bǔ)缺失的父元素、自動(dòng)用結(jié)束標(biāo)簽關(guān)閉相應(yīng)的元素,以及不匹配的內(nèi)嵌元素標(biāo)簽。

          我在用的過(guò)程中暫時(shí)還沒(méi)發(fā)現(xiàn)什么大問(wèn)題,呵呵。
            回復(fù)  更多評(píng)論
            


          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 龙口市| 霍邱县| 工布江达县| 基隆市| 行唐县| 那坡县| 公主岭市| 五华县| 轮台县| 罗甸县| 天祝| 沙河市| 大庆市| 涞水县| 应用必备| 内乡县| 磐安县| 长汀县| 克什克腾旗| 开封市| 治县。| 禄劝| 尉犁县| 海南省| 德清县| 高雄县| 丰顺县| 依安县| 称多县| 贺州市| 溧阳市| 长顺县| 石景山区| 宜都市| 伊宁市| 容城县| 鱼台县| 突泉县| 明溪县| 内黄县| 巴青县|