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("??????????? 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;
          ??? }
          }


          評論

          # 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能增補缺失的父元素、自動用結束標簽關閉相應的元素,以及不匹配的內嵌元素標簽。

          我在用的過程中暫時還沒發現什么大問題,呵呵。
            回復  更多評論
            


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 安庆市| 凤阳县| 太仓市| 西吉县| 嘉峪关市| 三穗县| 武川县| 老河口市| 邮箱| 鄂托克旗| 武宁县| 利川市| 延川县| 八宿县| 攀枝花市| 射洪县| 星子县| 呼伦贝尔市| 毕节市| 马山县| 汝州市| 航空| 天峻县| 昌邑市| 乌什县| 阿坝县| 盐山县| 永兴县| 彭水| 南城县| 忻城县| 贡嘎县| 萝北县| 黎平县| 班玛县| 定南县| 即墨市| 安达市| 木兰县| 鄯善县| 彭山县|