需要的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
分享到:
相关推荐
`Neko.java`可能是另一个类,它封装了NekoHTML解析器的主要逻辑,提供了更方便的API供`Caipiao.java`调用。 在`README.txt`中,作者很可能详细解释了如何运行这些示例程序,包括必要的依赖和步骤。如果你遇到任何...
开发者只需将此jar包添加到项目的类路径中,就可以调用nekohtml提供的API来解析HTML或XHTML文档。例如,可以使用`org.cyberneko.html.parsers.DocumentBuilder`类来创建一个解析器,并通过`parse()`方法读取和解析...
这里使用了`nekohtml.jar`,这是一个用于解析HTML和XML文档的库,可以帮助解析和构建DOM树。 6. **Cookie管理** HttpClient通过`CookieStore`和`CookiePolicy`管理cookies。当收到包含Set-Cookie头的响应时,...
6. **认证和加密库**: 可能包括如`jcifs`或`nekohtml`等库,用于处理NTLM或HTML解析等特定认证机制。 7. **其他辅助库**: 如`Apache Commons Codec`用于编码解码,`Apache Commons Lang`提供通用的Java语言功能。 ...
HttpClient 提供了丰富的HTTP客户端接口,可以用于发送HTTP请求并接收响应,而HtmlParser则用于解析HTML文档,提取所需的数据。下面我们将深入探讨这两个库在网络爬虫中的应用。 HttpClient 是Apache基金会提供的一...
HTMLUnit使用NekoHTML解析HTML,而core-js则包含了对JavaScript的执行环境,如Rhino或Google V8,使得HTMLUnit可以理解并执行页面上的JavaScript代码。 2. **htmlunit**: 主库,包含了HTMLUnit的核心类和接口,如`...
其中,Downloader负责从网络上获取HTML源码,PageProcessor用于解析HTML并提取所需信息,Pipeline则处理抓取的数据并持久化。 2. **webmagic-extension.jar**:这个扩展包提供了对更多特性的支持,如XPath解析器、...
Java中没有内置的HTML解析器,但可以使用开源库如Jsoup,它提供了一个简洁的API来解析HTML文档,提取数据,或者修改DOM结构。 五、渲染引擎 虽然Java本身不支持完整的浏览器渲染引擎,但开发者可以借助第三方库,如...
解析HTML文档时,HTMLUnit可能依赖`nekohtml-x.x.jar`,这是一个开源的非验证HTML解析器,它能够容忍HTML文档中的语法错误,并生成一个结构化的XML树。 4. **JavaScript支持**: 为了执行网页上的JavaScript代码...
1. **htmlunit-2.54.0.jar**:这是HTMLUnit的主要库文件,包含了所有用于解析HTML、执行JavaScript以及模拟浏览器行为的功能。版本号2.54.0表示这是一个特定的稳定版本,可能包含了一些修复的bug和新增的功能。 2. ...
2. **HTML解析**:浏览器需要能够解析HTML文档。Java中的`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`可以用来解析XML,但HTML不是严格的XML,因此可能需要使用第三方库如Jsoup,它提供了一...
源代码将会展示如何使用这些基础元素来实现浏览器的基本功能,如输入URL、发送HTTP请求、解析HTML并显示页面内容。对于初学者来说,这是一次很好的实践机会,能够帮助他们将理论知识转化为实际操作。 在实际的...
文档中提到了多种解析技术,如 XML、HTML、正则表达式、HTMLTagSoup、nekohtml、HTMLSAX等。每种技术都有其特定的应用场景和优势。 7. 处理器(Handler) 处理器用来处理解析后的数据,比如对解析得到的数据做...
Java中,Jsoup是一个流行的选择,它提供了一种简洁的API来解析HTML文档,提取元素、属性和文本。此外,还有其他库如HTMLUnit和NekoHTML,它们更接近浏览器的解析行为。 3. **CSS选择器与XPath**: 为了定位特定的...
可以使用内置的`javax.xml.parsers.DocumentBuilderFactory`解析XML,或者使用第三方库如Jsoup来解析HTML文档。 4. **CSS和JavaScript支持**:为了呈现样式和执行网页中的脚本,Java浏览器需要对CSS和JavaScript有...
2. **处理响应**:接收到服务器响应后,HttpUnit可以解析HTML、XML、JSON等格式的内容,并提供API来提取和验证页面元素,如链接、表格、表单等。 3. **模拟用户交互**:对于动态网页,HttpUnit能模拟用户与页面的...