`
johnson.lee
  • 浏览: 51518 次
  • 性别: 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

相关推荐

Global site tag (gtag.js) - Google Analytics