`
itwoody
  • 浏览: 42632 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

httpclient+nekohtml 解析HTML[转]

阅读更多
需要的jar包:
nekohtml.jar,xerces-2.9.0.jar,commons-httpclient-3.1.jar,commons-logging-1.1.jar,commons-codec-1.3.jar

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

设置解析器参数
  为了更加精确的控制解析的动作,nekohtml提供了相应的设置函数。如下列:
// settings on HTMLConfiguration
org.apache.xerces.xni.parser.XMLParserConfiguration config =
new org.cyberneko.html.HTMLConfiguration();
config.setFeature("http://cyberneko.org/html/features/augmentations", true);
config.setProperty("http://cyberneko.org/html/properties/names/elems", "lower");

// settings on DOMParser
org.cyberneko.html.parsers.DOMParser parser =
new org.cyberneko.html.parsers.DOMParser();
parser.setFeature("http://cyberneko.org/html/features/augmentations", true);
parser.setProperty("http://cyberneko.org/html/properties/names/elems", "lower");

nekohtml功能(feature)列表
功能 默认值 描述
http://cyberneko.org/html/features/balance-tags True 是否允许增补缺失的标签。如果要以XML方式操作HTML文件,此值必须为真。此处提供设置功能,为了性能的原因。
http://cyberneko.org/html/features/balance-tags/ignore-outside-content False 是否忽略文档根元素以后的数据。如果为false,<html>和<bod>被忽略,所有的内容都被解析。
http://cyberneko.org/html/features/document-fragment False 解析HTML片段时是否作标签增补。此功能不要用在DOMParser上,而要用在DOMFragmentParser上。
http://apache.org/xml/features/scanner/notify-char-refs False 当遇到字符实体引用(如&#x20;)是否将(#x20)报告给相应地文档处理器。
http://apache.org/xml/features/scanner/notify-builtin-refs False 当遇到XML内建的字符实体引用(如&amp;)是否将(amp)报告给相应地文档处理器。
http://cyberneko.org/html/features/scanner/notify-builtin-refs False 当遇到HTML内建的字符实体引用(如&copy;)是否将(copy)报告给相应地文档处理器。
http://cyberneko.org/html/features/scanner/script/strip-comment-delims False 是否剥掉<script>元素中的<!---->等注释符。
http://cyberneko.org/html/features/augmentations False 是否将与HTML事件有关的infoset项包括在解析管道中。
http://cyberneko.org/html/features/report-errors False 是否报告错误。

nekohtml属性列表
属性 默认值 值域 描述
http://cyberneko.org/html/properties/filters null XMLDocumentFilter[] 在解析管道的最后按数组顺序追加自定义的处理组件(过滤器),必须为数组类型。
http://cyberneko.org/html/properties/default-encoding Windows-1252 IANA encoding names 默认的HTML文件编码
http://cyberneko.org/html/properties/names/elems upper upper,lower,match 如果整理识别出的元素名称
http://cyberneko.org/html/properties/names/attrs lower upper,lower,no-change 如果整理识别出的属性名称

来源:http://www.blogjava.net/lexy/archive/2008/03/31/189718.html
分享到:
评论

相关推荐

    html解析例子,用nekohtml写的

    `Neko.java`可能是另一个类,它封装了NekoHTML解析器的主要逻辑,提供了更方便的API供`Caipiao.java`调用。 在`README.txt`中,作者很可能详细解释了如何运行这些示例程序,包括必要的依赖和步骤。如果你遇到任何...

    nekohtml-1.9.14源码及jar包

    开发者只需将此jar包添加到项目的类路径中,就可以调用nekohtml提供的API来解析HTML或XHTML文档。例如,可以使用`org.cyberneko.html.parsers.DocumentBuilder`类来创建一个解析器,并通过`parse()`方法读取和解析...

    HttpClient 登录163邮箱

    这里使用了`nekohtml.jar`,这是一个用于解析HTML和XML文档的库,可以帮助解析和构建DOM树。 6. **Cookie管理** HttpClient通过`CookieStore`和`CookiePolicy`管理cookies。当收到包含Set-Cookie头的响应时,...

    httpclient开发所必须架包

    6. **认证和加密库**: 可能包括如`jcifs`或`nekohtml`等库,用于处理NTLM或HTML解析等特定认证机制。 7. **其他辅助库**: 如`Apache Commons Codec`用于编码解码,`Apache Commons Lang`提供通用的Java语言功能。 ...

    HttpClient&&HtmlParser(Crawler)网络爬虫

    HttpClient 提供了丰富的HTTP客户端接口,可以用于发送HTTP请求并接收响应,而HtmlParser则用于解析HTML文档,提取所需的数据。下面我们将深入探讨这两个库在网络爬虫中的应用。 HttpClient 是Apache基金会提供的一...

    htmlunit用到的jar包

    HTMLUnit使用NekoHTML解析HTML,而core-js则包含了对JavaScript的执行环境,如Rhino或Google V8,使得HTMLUnit可以理解并执行页面上的JavaScript代码。 2. **htmlunit**: 主库,包含了HTMLUnit的核心类和接口,如`...

    webmagic的所有jar包

    其中,Downloader负责从网络上获取HTML源码,PageProcessor用于解析HTML并提取所需信息,Pipeline则处理抓取的数据并持久化。 2. **webmagic-extension.jar**:这个扩展包提供了对更多特性的支持,如XPath解析器、...

    Java编写的网页浏览器

    Java中没有内置的HTML解析器,但可以使用开源库如Jsoup,它提供了一个简洁的API来解析HTML文档,提取数据,或者修改DOM结构。 五、渲染引擎 虽然Java本身不支持完整的浏览器渲染引擎,但开发者可以借助第三方库,如...

    htmlunit依赖的所有jar

    解析HTML文档时,HTMLUnit可能依赖`nekohtml-x.x.jar`,这是一个开源的非验证HTML解析器,它能够容忍HTML文档中的语法错误,并生成一个结构化的XML树。 4. **JavaScript支持**: 为了执行网页上的JavaScript代码...

    htmlunit涉及的所有jar包

    1. **htmlunit-2.54.0.jar**:这是HTMLUnit的主要库文件,包含了所有用于解析HTML、执行JavaScript以及模拟浏览器行为的功能。版本号2.54.0表示这是一个特定的稳定版本,可能包含了一些修复的bug和新增的功能。 2. ...

    java 浏览器设计

    2. **HTML解析**:浏览器需要能够解析HTML文档。Java中的`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`可以用来解析XML,但HTML不是严格的XML,因此可能需要使用第三方库如Jsoup,它提供了一...

    网页浏览器开发含代码和程序

    源代码将会展示如何使用这些基础元素来实现浏览器的基本功能,如输入URL、发送HTTP请求、解析HTML并显示页面内容。对于初学者来说,这是一次很好的实践机会,能够帮助他们将理论知识转化为实际操作。 在实际的...

    Java爬虫框架.pdf

    文档中提到了多种解析技术,如 XML、HTML、正则表达式、HTMLTagSoup、nekohtml、HTMLSAX等。每种技术都有其特定的应用场景和优势。 7. 处理器(Handler) 处理器用来处理解析后的数据,比如对解析得到的数据做...

    Java网络爬虫jar包

    Java中,Jsoup是一个流行的选择,它提供了一种简洁的API来解析HTML文档,提取元素、属性和文本。此外,还有其他库如HTMLUnit和NekoHTML,它们更接近浏览器的解析行为。 3. **CSS选择器与XPath**: 为了定位特定的...

    用java编写的浏览器

    可以使用内置的`javax.xml.parsers.DocumentBuilderFactory`解析XML,或者使用第三方库如Jsoup来解析HTML文档。 4. **CSS和JavaScript支持**:为了呈现样式和执行网页中的脚本,Java浏览器需要对CSS和JavaScript有...

    java爬取工具httpunit全部jar包(包含httpunit使用需要的全部jar包)

    2. **处理响应**:接收到服务器响应后,HttpUnit可以解析HTML、XML、JSON等格式的内容,并提供API来提取和验证页面元素,如链接、表格、表单等。 3. **模拟用户交互**:对于动态网页,HttpUnit能模拟用户与页面的...

Global site tag (gtag.js) - Google Analytics