lexy

          支持開源,尊重他人的勞動(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ī)器)在編寫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è)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 昭觉县| 陆丰市| 长顺县| 宜川县| 柳州市| 册亨县| 敦煌市| 武安市| 平南县| 商洛市| 资源县| 赣榆县| 阿克陶县| 凤翔县| 武冈市| 化德县| 沧州市| 安陆市| 阳城县| 长岛县| 墨脱县| 赞皇县| 泰州市| 新闻| 汝州市| 阜平县| 永安市| 冕宁县| 边坝县| 前郭尔| 定兴县| 陈巴尔虎旗| 泾川县| 安国市| 伊宁市| 小金县| 常宁市| 五大连池市| 武邑县| 澄城县| 蒙城县|