`
johnson.lee
  • 浏览: 52317 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

DOM4HTML(W3C标准实现)源代码

阅读更多
最近在写一个爬虫程序,需要分析HTML,网上开源的HTML分析库也不少,为了挑战一下,自己写了一个。

测试代码——提取网页中的<a...></a>标签的href路径,拿google做试验。

运行环境:JDK1.6以上

package org.zergle.w3c.html.lex;

import java.io.IOException;
import java.net.URL;

import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.html.HTMLReader;

public class TestHTMLReader {

	@Test
	public void testReadDocument() {
		try {
			HTMLReader reader = new HTMLReader(new URL("http://g.cn"));
			Document doc = reader.readDocument();
			NodeList links = doc.getElementsByTagName("A");
			for (int i = 0; i < links.getLength(); i++) {
				Node node = links.item(i);
				if (node.hasAttributes()) {
					NamedNodeMap attrs = node.getAttributes();
					Node attr = attrs.getNamedItem("href");
					if (attr != null) {
						System.out.println(attr.getNodeValue());
					}
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}



打印结果如下:

http://images.google.cn/imghp?hl=zh-CN&tab=wi
http://video.google.cn/?hl=zh-CN&tab=wv
http://ditu.google.cn/maps?hl=zh-CN&tab=wl
http://news.google.cn/nwshp?hl=zh-CN&tab=wn
http://www.google.cn/music?hl=zh-CN&tab=wU
http://wenda.tianya.cn/wenda/?hl=zh-CN&tab=wH
http://laiba.tianya.cn/laiba/Top?hl=zh-CN&tab=wG
http://www.google.cn/intl/zh-CN/options/
/url?sa=p&pref=ig&pval=3&q=http://www.google.cn/ig/china%3Fsource%3Diglk%26hl%3Dzh-CN&usg=AFQjCNE-fPlHBZ4IREs-KKjdCDT7u-BkSw
/preferences?hl=zh-CN
http://www.google.cn/search?hl=zh-CN&source=hp&q=&#37;E6&#37;B8&#37;A9&#37;E5&#37;93&#37;A5&#37;E5&#37;8D&#37;8E2010&#37;E5&#37;B9&#37;B4&btnG=Google+&#37;E6&#37;90&#37;9C&#37;E7&#37;B4&#37;A2&aq=f&oq=
/advanced_search?hl=zh-CN
/language_tools?hl=zh-CN
/aclk?sa=L&ai=COHUX_MSHS5GGJIe67APZ1YGdDpvhip8Bm4Dy4w_B2ZzZExABIMFUUKzQj4ACYJ0BqgRyT9AXyubQppSOik1N2jZLTzgNFf3oSk8zeN1r_qfnCXmWa95EK5nQAF8KhR8_PxBB7L2gUqR7D10BXJmEPwgB8cBEKsMWJvi_SmOCdtdATchCbNwyBAsjlJq93Brvc55n5_CuvjrNk2N2w3J2fz0Z1Vra&num=1&sig=AGiWqtz_TF-ZN5OkAn_lszxgyfq_UXUFew&q=http://www.google.com/intl/zh-CN/landing/games10/index.html%23utm_campaign%3Dzh-CN%26utm_medium%3Dhpp%26utm_source%3Dhpp-na-us-gns-svn
/intl/zh-CN/ads/
/intl/zh-CN/about.html
http://www.google.com/ncr
/intl/zh-CN/privacy.html
http://www.miibeian.gov.cn/


由于刚刚完成,没有经过严格测试,如果哪位朋友发现BUG的,请与我联系。
分享到:
评论
14 楼 netkiller.github.com 2011-10-17  
这样写不累吗?
13 楼 johnson.lee 2010-04-20  
12 楼 johnson.lee 2010-03-09  
jmeye 写道
links.getLength();

这句应该放在for循环外面;
int length = links.getLength();
for(int i=0; i<length; i++){
    ....
}


确实,细节问题应该要注意,thks!
11 楼 jmeye 2010-03-09  
links.getLength();

这句应该放在for循环外面;
int length = links.getLength();
for(int i=0; i<length; i++){
    ....
}
10 楼 johnson.lee 2010-03-02  
summerbell 写道
johnson.lee 写道
最近在写一个爬虫程序,需要分析HTML,网上开源的HTML分析库也不少,为了挑战一下,自己写了一个。


试试Tika。


自己实现HTML解析并不是仅仅是为了使用它,更重要的是学习解析HTML的思想,用别人的只知道用,不知道为什么那么用。

大致看了一下Tika,感觉它抽象得很好,提取不同类型的数据,用不用的实现。思想值得借鉴。
9 楼 andsofish 2010-03-02  
johnson.lee 写道
andsofish 写道
我用正则做过


刚开始写的爬虫,我是用正则做的,也不是说正则不好,正则多了,改起来,自己都看晕了,好长一大串,我写这个完成是为了爬虫的高度可定制性而出发的,我个人觉得用正则还是有点局限性。

8 楼 summerbell 2010-03-02  
johnson.lee 写道
最近在写一个爬虫程序,需要分析HTML,网上开源的HTML分析库也不少,为了挑战一下,自己写了一个。


试试Tika。
7 楼 johnson.lee 2010-03-02  
最新的dom4html我已经放到Google的SVN服务器上去了

在这里下载:svn checkout http://dom4html.googlecode.com/svn/trunk/ dom4html-read-only

6 楼 johnson.lee 2010-03-02  
andsofish 写道
我用正则做过


刚开始写的爬虫,我是用正则做的,也不是说正则不好,正则多了,改起来,自己都看晕了,好长一大串,我写这个完成是为了爬虫的高度可定制性而出发的,我个人觉得用正则还是有点局限性。
5 楼 johnson.lee 2010-03-02  
shadowlin 写道
lz试过NekoHtmlParser么?


NekoHtmlParser没看过,不过研究过HtmlParser这个开源HTML解析库,它不是用的编译原理的思想来做的,它没有词法分析的过程。不过要想做得好,还是得集百家之长,取人之长补己之短。
4 楼 andsofish 2010-03-01  
我用正则做过
3 楼 shadowlin 2010-03-01  
lz试过NekoHtmlParser么?
2 楼 johnson.lee 2010-02-27  
Zahir 写道
感觉名字应该叫html-dom4j


呵呵,html-dom4j这个名称也不错。
1 楼 Zahir 2010-02-27  
感觉名字应该叫html-dom4j

相关推荐

    dom4j源代码

    DOM4J这个名字是“Document Object Model for Java”的缩写,但它并不仅仅遵循W3C的DOM标准,而是结合了DOM、SAX和JDOM的优点,使得XML处理更为高效和灵活。 DOM4J的核心特性包括: 1. **DOM API**:DOM4J实现了...

    Dom4J解析XML源代码

    本篇文章将深入探讨Dom4J库如何解析XML源代码,并介绍其在创建XML文件时的应用。 首先,让我们了解什么是DOM(Document Object Model)。DOM是W3C制定的一种编程接口,用于处理XML和HTML文档。它将XML文档视为一棵...

    dom4j_1.6.1.jar dom4j_2.1.0.jar

    描述中提到这两个版本包含了源码和文档,这意味着用户可以查看源代码以了解其内部工作原理,并且有官方文档帮助开发者理解和使用DOM4J库。 **DOM4J知识点** 1. **DOM4J概述**:DOM4J是一个开源项目,它提供了全面...

    dom4j-2.1.1 jar和source.jar

    描述中提到的"source.jar",即"dom4j-2.1.1-sources.jar",是DOM4J的源代码包,包含了DOM4J库的所有源代码。这对于开发者来说非常有价值,因为它允许他们查看和学习DOM4J的内部实现,调试问题,或者根据需要进行...

    w3c源码w3c源码

    在压缩包中的“w3c”文件,很可能是与W3C标准相关的源代码或者文档,可能包含了W3C规范的实现细节,或者是使用C++编写的相关工具或库。这些资源对于学习Web开发、浏览器内核原理,或者对C++在Web领域的应用有深入...

    北大青鸟ACCP4.0网页编程源代码

    5. Web标准与最佳实践:北大青鸟ACCP4.0的源代码遵循W3C的Web标准,教导学员如何编写符合规范的代码,同时融入了一些最佳实践,如语义化HTML、响应式设计等,帮助学员养成良好的编程习惯。 6. 教师指导用书源代码:...

    dom4j---xml解析jar包

    在Java环境中,解析XML文档时,我们通常会遇到各种库,其中DOM4J是一个非常流行的、功能强大的开放源代码库。这个库不仅简化了XML处理,还提供了XPath和XSLT的支持,使其成为Java开发者处理XML的首选工具之一。 **...

    一个简单的浏览器源代码。。。

    9. **兼容性和标准**:浏览器需要遵循W3C或WHATWG的标准,确保在不同设备和操作系统上的兼容性。源代码需要处理各种浏览器差异和特性检测。 10. **本地存储和离线应用**:现代浏览器支持Web Storage(localStorage...

    W3C School HTML教程(CHM)

    W3C(World Wide Web Consortium)是国际公认的互联网标准制定组织,它为HTML提供了规范和指南,确保了网络的互操作性和兼容性。W3C School HTML教程是一份详细且全面的学习资源,适合初学者和有一定基础的开发者...

    dedom:W3C DOM API 在 HTML5 解析器和序列化器之上的部分实现

    "W3C DOM API" 是 Web 开发中用于处理文档对象模型(Document Object Model)的标准接口,它允许程序通过 JavaScript 或其他语言与 HTML 和 XML 文档交互。 **描述分析:**描述中的重复 "DOM DE DOM DOM DOMMMMMMM...

    Javascript HTML5 W3C官方API

    W3C(World Wide Web Consortium)是制定Web标准的国际组织,包括HTML、XML、CSS、DOM等一系列规范。W3C的官方API文档为开发者提供了权威的参考资源,详尽解释了各种标准的使用方法和行为,有助于确保代码的兼容性...

    dom4j.jar和对应源码src.zip (使用Java解析XML的重要工具)

    src.zip文件包含了DOM4J的源代码,这对于理解DOM4J的工作原理和自定义扩展非常有帮助。通过阅读源码,你可以深入学习DOM4J如何处理XML文档,了解其实现细节,如解析过程、节点管理、XPath引擎等。这对于提升编程技巧...

    dom4j-1.6.1.zip.rar

    DOM4J 提供了与W3C DOM兼容的接口,使得熟悉DOM的开发者能够无缝过渡。DOM4J的Element、Attribute、Text等类对应于DOM中的相应节点,这使得操作XML就像操作Java对象一样简单。 ### 5. 事件处理 DOM4J支持事件驱动...

    DOM4J从基础到精通

    - **DOMReader**:从一个已经存在的W3C DOM树构建DOM4J树。 ##### 1. 构建DOM4J树 使用`SAXReader`从XML文件构建DOM4J树的示例如下: ```java import org.dom4j.Document; import org.dom4j.io.SAXReader; ...

    符合w3c标准的对联广告.rar

    从提供的压缩包“78”中,我们可以期待找到实现这些特性的源代码、图片资源、CSS样式文件以及可能的JSON配置文件。通过学习和分析这些文件,开发者可以了解如何创建一个既符合W3C标准又具有良好用户体验的对联广告。...

    dom4j-1.6.1

    4. **文档对象模型**:DOM4J的文档对象模型(Document Object Model)是面向对象的,比标准的W3C DOM更易于使用。它的API设计得更加直观,降低了XML操作的复杂性。 5. **XPath支持**:DOM4J支持XPath 1.0规范,可以...

    DOM2.1.0 jar (真-免费)

    8. **文档对象模型**:DOM4j虽然名为“DOM”,但它并不完全遵循W3C的DOM标准。它的设计更加面向Java开发者,提供了更直观的API和更少的内存消耗。 9. **性能与效率**:相比标准DOM,DOM4j在内存使用和速度上有优势...

    w3school网站源码

    w3school的JavaScript教程包括变量、函数、DOM操作等内容,源码展示了实际的JavaScript代码在网页中的应用,有助于提升动态网页的编程能力。 4. **数据库教程** w3school还提供SQL教程,讲解如何使用SQL...

    htmldom_document

    DOM是W3C(万维网联盟)定义的一个标准,它将HTML或XML文档结构化为一个树形结构,使得每个元素、属性和文本都可以被独立访问和修改。 这篇名为“htmldom_document”的博文可能详细介绍了如何使用这个PHP库来操作...

    java xml 解析 源代码

    - DOM解析器的核心类是`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`。 - 首先,你需要创建一个`DocumentBuilderFactory`实例,然后使用`newDocumentBuilder()`方法生成`DocumentBuilder`...

Global site tag (gtag.js) - Google Analytics