htmlparser源码
❶ 如何使用htmlparser提取网页文本信息
HTMLParser具有小巧,快速的优点,缺点是相关文档比较少(英文的也少),很多功能需要自己摸索。对于初学者还是要费桥颂一些功夫的,而一旦上手以后,会发现HTMLParser的结构设计很巧妙,非常实用芦消腔,基本各种需求都可以满足。比如问题中提到的提取网页文本信息。
用以下代码来实现提取网页文本信息
// 提取网页主陪衫要文本内容
public String getContent(){
content=(isHub())?getHubEntries():getTopicBlock();
System.out.println("<Content>:");
System.out.println("=========================");
System.out.println(content);
return content;
}
// 提取Hub类网页文本内容,如yahoo,sina等门户网
public String getHubEntries(){
StringBean bean=new StringBean();
bean.setLinks(false);
bean.setReplaceNonBreakingSpaces(true);
bean.setCollapse(true);
try {
parser.visitAllNodesWith(bean);
} catch (ParserException e) {
System.err.println("getHubEntries()-->"+e);
}
parser.reset();
return bean.getStrings();
}
// 获取主题性(Topical)网页文本内容:对于博客等以文字为主体的网页效果较好
public String getTopicBlock(){
HasParentFilter acceptedFilter=new HasParentFilter(new TagNameFilter("p"));
NodeList nodes=null;
try {
nodes=parser.extractAllNodesThatMatch(acceptedFilter);
} catch (ParserException e) {
System.err.println("getTopicBlock"+e);
}
StringBuffer sb=new StringBuffer();
SimpleNodeIterator iter=nodes.elements();
while(iter.hasMoreNodes()){
Node node=iter.nextNode();
sb.append(node.getText()+"\n");
}
parser.reset();
return sb.toString();
}
另外,要知道的是
HTMLParser的核心模块是org.htmlparser.Parser类,这个类实际完成了对于HTML页面的分析工作。这个类有下面几个构造函数:
public Parser ();
public Parser (Lexer lexer, ParserFeedback fb);
public Parser (URLConnection connection, ParserFeedback fb) throws ParserException;
public Parser (String resource, ParserFeedback feedback) throws ParserException;
public Parser (String resource) throws ParserException;
public Parser (Lexer lexer);
public Parser (URLConnection connection) throws ParserException;
和一个静态类public static Parser createParser (String html, String charset);
提供几个常用的
对于树型结构进行遍历的函数,这些函数最容易理解:
Node getParent ():取得父节点
NodeList getChildren ():取得子节点的列表
Node getFirstChild ():取得第一个子节点
Node getLastChild ():取得最后一个子节点
Node getPreviousSibling ():取得前一个兄弟(不好意思,英文是兄弟姐妹,直译太麻烦而且不符合习惯,对不起女同胞了)
Node getNextSibling ():取得下一个兄弟节点
取得Node内容的函数:
String getText ():取得文本
String toPlainTextString():取得纯文本信息。
String toHtml () :取得HTML信息(原始HTML)
String toHtml (boolean verbatim):取得HTML信息(原始HTML)
String toString ():取得字符串信息(原始HTML)
Page getPage ():取得这个Node对应的Page对象
int getStartPosition ():取得这个Node在HTML页面中的起始位置
int getEndPosition ():取得这个Node在HTML页面中的结束位置
用于Filter过滤的函数:
void collectInto (NodeList list, NodeFilter filter):基于filter的条件对于这个节点进行过滤,符合条件的节点放到list中。
用于Visitor遍历的函数:
void accept (NodeVisitor visitor):对这个Node应用visitor
用于修改内容的函数,这类用得比较少:
void setPage (Page page):设置这个Node对应的Page对象
void setText (String text):设置文本
void setChildren (NodeList children):设置子节点列表
其他函数:
void doSemanticAction ():执行这个Node对应的操作(只有少数Tag有对应的操作)
Object clone ():接口Clone的抽象函数。
以上知识可以完整处理HTML页面的所有内容
参考资料:
htmlparser官方网站下载地址
http://www.htmlparser.sourceforge.net/
❷ birt用HtmlParser导出的格式很乱如何处理
关键是html里无用的空格被birt使用了,所以做html尽力把空格都删除早启,祥睁局或者修改一下birt的源码:com/lowagie/text/xml/SAXiTextHandler.java 将其中的在void characters(char[] ch, int start, int length)方法中,对获谨让取的数据去空格即可:currentChunk = new Chunk(buf.toString());
❸ 如何用C语言实现解析HTML文档
参考下面代码:
#include <stdio.h>
#include <streamhtmlparser/htmlparser.h>
int main(void)
{
unsigned int getchar_ret;
htmlparser_ctx *parser = htmlparser_new();
while ((getchar_ret = getchar()) != EOF) {
char c = (char)getchar_ret;
/* If we received a '$' character, we output the current tag and attribute
* * name to stdout. */
if (c == '$') {
printf("[[ ");
if (htmlparser_tag(parser)) printf("tag=%s ", htmlparser_tag(parser));
if (htmlparser_attr(parser)) printf("attr=%s ", htmlparser_attr(parser));
printf("]]");
/* If we read any other character, we pass it to the parser and echo it to
* * stdout. */
} else {
htmlparser_parse_chr(parser, c);
putchar(c);
}
}
}
❹ java怎样读取html文件
java可以使用jsoup、htmlparser等工具进行html的读取和解析,以下是详细说明:
1、jsoup 是一款 Java 的HTML 解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套判数非常省力的API,可通过DOM,CSS以及类似于JQuery的操作方法来取出和操作数据。据说它是基于MIT协议发布的。
jsoup的主要功能如下:
从一个URL,文件或字符串中解析HTML;
使用DOM或CSS选择器来查找、取出数据;
可操作HTML元素、属性、文本;
示例代码:
Document doc = Jsoup.parse(input, "UTF-8", "http://www.dangdang.com");
Element content = doc.getElementById("content");
Elements links = content.getElementsByTag("a");
for (Element link : links) {
String linkHref = link.attr("href");
String linkText = link.text();
}
2、htmlparser是一个纯的java写的html解析的库,它不依赖于其它的java库文件,主要用于改造或提取html。它能超高速解析html,而且不会出错。现在htmlparser最新版本为2.0。据说htmlparser就是目前最好的html解析和分析的工掘慧首碧孝具。无论你是想抓取网页数据还是改造html的内容,用了htmlparser绝对会忍不住称赞。
在线文档: http://www.osctools.net/apidocs/apidoc?api=HTMLParser;http://htmlparser.sourceforge.net/project-info.html
示例代码:
Parser parser = new Parser ("http://www.dangdang.com");
NodeList list = parser.parse (null);
Node node = list.elementAt (0);
NodeList sublist = node.getChildren ();
System.out.println (sublist.size ());
❺ java中几种解析html的工具
HTML分析是一个比较复杂的工作,Java世界主要有几款比较方便的分析工具:
1.Jsoup
Jsoup是一个集强大和便利于一体的HTML解析工具。它方便的地方是,可以用于支持用jQuery中css selector的方式选取元素,这对于熟悉js的开发者来说基本没有学习成本。
String content = "blabla";
Document doc = JSoup.parse(content);
Elements links = doc.select("a[href]");
- InputStream inputStream = null;
- HtmlParser htmlParser = new HtmlParser();
- htmlParser.parse(new ByteArrayInputStream(page.getContentData()),
- contentHandler, metadata, new ParseContext());
Jsoup还支持白名单过滤机制,对于网站防止XSS攻击也是很好的。
2.HtmlParser
HtmlParser的功能比较完备,也挺灵活,但谈不上方便。这个项目很久没有维护了,最新版本是2.1。HtmlParser的核心元素是Node,对应一个HTML标签,支持getChildren()等树状遍历方式。HtmlParser另外一个核心元素是NodeFilter,通过实现NodeFilter接口,可以对页面元素进行筛选。这里有一篇HtmlParser的使用文章:使用 HttpClient 和 HtmlParser 实现简易爬虫。
3.Apache tika
tika是专为抽取而生的工具,还支持PDF、Zip甚至是JavaClass。使用tika分析HTML,需要自己定义一个抽取内容的Handler并继承org.xml.sax.helpers.DefaultHandler,解析方式就是xml标准的方式。crawler4j中就使用了tika作为解析工具。SAX这种流式的解析方式对于分析大文件很有用,我个人倒是认为对于解析html意义不是很大。
4.HtmlCleaner与XPath
HtmlCleaner最大的优点是:支持XPath的方式选取元素。XPath是一门在XML中查找信息的语言,也可以用于抽取HTML元素。XPath与CSS Selector大部分功能都是重合的,但是CSS Selector专门针对HTML,写法更简洁,而XPath则是通用的标准,可以精确到属性值。XPath有一定的学习成本,但是对经常需要编写爬虫的人来说,这点投入绝对是值得的。
❻ 如何用htmlparser修改html中标签的内容
测试文本一<input name="\"text1\/" type="\"text\" value="\"text1\">测试文本二其他数据;\"; Parser parser = new Parser(); // parser.setURL parser.setInputHTML(sText); parser.setEncoding(parser.getEncoding()); NodeFilter filter = new NodeClassFilter(Span.class); NodeList list = parser.extractAllNodesThatMatch(filter); for (int i = 0; i < list.size(); i++) { if (list.elementAt(i) instanceof Span) { Span spanTag = (Span ) list.elementAt(i); textnode.setAttributeEx(textnode.getAttributeEx("name")); �0�2�0�2�0�2�0�2 �0�2 if(spanTag .getAttribute("没吵银name").equals("first")){ �0�2�0�2�0�2�0�2�0�2 �0�2 spanTag .setAttribute("value", "bbb"); �0�2�0�2�0�2�0�2�0�2 } } }�0�2我已经用span过滤掉了其他内容,部分源码如上,我现在想将上面文本中的标签中的name="first"的value值改为"bbb",然后返回所有文本即改过的(sText),但是不能用sText.replace()方法,因为原文本中可能有多个value="aaa"的值.�0�2大枯宴家有什么好的建议,最好是直接可以用htmlparser处理的.谢谢问题补充:非常感谢大家的帮忙,尤其是lzj0470和ferreousbox,上面的问题已经解决, 如果现在我想将字符串"测试文本一<input name="text1/" type="text" value="text1">测试文本二其他数据;" 中的"测试文本二"替换成"此处已经被替换";即返回的字符串为碰余:
❼ htmlparser取<td>节点的子节点<img /> ImageTag imageTag = (ImageTag) td[k].getFirstChild ();
异常处理来测试
❽ 用htmlparser 怎么实现抓取这个网址的所有分页的电影信息。
网页的内容由JS生成,先看数据是不是包含在JS或者册厅者页面源码中,如果在,可用htmlparser获取,如果是通过州薯Ajax获取的数据伏耐,那需要找到Ajax获取数据的地址再通过htmlparser获取需要的数据。
另外,新的JDK中包含有可以执行js代码的功能,利用这一功能,可以获取js执行后的部分数据。
❾ 用htmlparser获取百度百科首页strong标签中的内容
“用htmlparser获取网络首页”相关的解决方案进行了整理,用户详细问题包括:://ke; ; + node.parse(new TagNameFilter(" i <);;
for (int i = 0; i++) {
Node node = nodeList;UTF-8".size();
Parser parser = new Parser((HttpURLConnection)(new URL(url)).com/"
NodeList nodeList = parser;strong"
parser.outString url = ".elementAt(i);)).setEncoding(".com/" target="_blank">http; System.openConnection()); nodeList..toPlainTextString())://ke.println(i + ": ",具体解决方案如下:
解决方案1:
HtmlPage page = new HtmlPage(parser); nodelist;
for (int i = 0,java版本类似;
NodeFilter filter = new TagNameFilter("。它能超高速解析html;);}
NodeList nodelist = page.VisitAllNodesWith(page);<。
无论你是想抓取网页数据还是改造html的内容;HTML>.0.;"HTML>GBK",用了htmlparser绝对会忍不住称赞,把本来乱七八糟的HTML信息格式化
· 转成XML格式数据
编辑本段htmlparser常用代码
取得一段html代码里面所有的链接C#版本..; i <,例如对HTML进行有效信息搜索
· 链接提取;AAA</<BODY>:
string htmlcode = "。
毫不夸张地说, true),可以用来过滤网页上一些令人不愉快的字词
· HTML信息清洗;);<,用于自动给页面的链接文本加上链接的标签
· 资源提取.ElementAt(i);
try
{ parser;<
nodelist = nodelist;/,它不依赖于其它的java库文件,用于检查HTML中的灶斗纤链接是否有效
· 页面内容的监控
2. 信息转换
· 链接重写;
System;/.Body. + "。现在htmlparser最新版本为2;<,例如对一些图片;
Parser parser = Parser;);<,用于将网页内容保存到本地
· 内容检验,而且不会出错, ".ExtractAllNodesThatMatch(filter.Console.;/TITLE>HEAD>HEAD>.,主要用于改造或
提取html;A""、声音的资源的处理
· 链接检查;TITLE>n",用于修改页面中的所有超链接
· 网页内容拷贝.Size(),htmlparser就销轿是目前最好的html解析和分析的工具; i++)
{
LinkTag link=(LinkTag) nodelist;\< + ;) + ".CreateParser(htmlcode。
编辑本段htmlparser基本功能
1. 信息提取
· 文本信息抽取;href".Write(link.GetAttribute("}
catch (ParserException e1)
{ e1 = null;BODY>htmlparser
目录
简介
htmlparser基本功能
htmlparser常用代码
编辑本段简介
htmlparser[1]是一个纯的java写的html解析的库
解决方案2:
. 信息提隐仿取
· 文本信息抽取;/
HtmlPage page = new HtmlPage(parser);<)..Write(link;
nodelist = nodelist;\ i++)
{
LinkTag link=(LinkTag) nodelist;<,java版本类似;/ i <BODY>:
string htmlcode = ",可以用来过滤网页上一些令人不愉快的字词
· HTML信息清洗.Size();
try
{ parser;
NodeFilter filter = new TagNameFilter("HTML>);<HTML>TITLE>BODY>href",例如对一些图片;<, true).GetAttribute("</、声音的资源的处理
· 链接检查;;A".Body,例如对HTML进行有效信息搜索
· 链接提取,用于将网页内容保存到本地
· 内容检验;".CreateParser(htmlcode.Console; nodelist;}
NodeList nodelist = page,把本来乱七八糟的HTML信息格式化
· 转成XML格式数据
编辑本段htmlparser常用代码
取得一段html代码里面所有的链接C#版本...ExtractAllNodesThatMatch(filter;
for (int i = 0;HEAD>AAA<,用于自动给页面的链接文本加上链接的标签
· 资源提取, "}
catch (ParserException e1)
{ e1 = null.VisitAllNodesWith(page);",用于修改页面中的所有超链接
· 网页内容拷贝;
Parser parser = Parser;HEAD>);GBK"/<<. + "TITLE>..; + ,用于检查HTML中的链接是否有效
· 页面内容的监控
2. 信息转换
· 链接重写;
System;n") + ".ElementAt(i) 展开
❿ 求教大神关于java获取网页源码的问题 大神速来
htmlparser.框架,是解析网页的。
htmlparser是一个纯的java写的html解析的库,它不依赖于其它的java库文件,主要用于改造或
提取html。它能超高速解析html,而且不会出错。现在htmlparser最新版本为2.0。
毫不夸张地说,htmlparser就是目前最好的html解析和分析的工具。
无论你是想抓取网页数据还是改造html的内滚链如容,用了htmlparser绝对会忍不住称赞。
jsoup也是。
Java 程序在解析HTML 文档时,相信大家都大启接触过htmlparser 这个开源项目,我曾经在IBM DW
上发表过两篇关于htmlparser 的文唤唯章,分别是:从HTML中攫取你所需的信息 和扩展HTMLParser
对自定义标签的处理能力。但现在我已经不再使用htmlparser 了,原因是htmlparser 很少更新,但最重要的是有了jsoup 。