本文将为您提供关于大数据处理之道的详细介绍,我们还将为您解释htmlparser获取数据的相关知识,同时,我们还将为您提供关于html-parsing–从HtmlCleaner获取文本中的清理HTML
本文将为您提供关于大数据处理之道 的详细介绍,我们还将为您解释htmlparser获取数据<一>的相关知识,同时,我们还将为您提供关于html-parsing – 从HtmlCleaner获取文本中的清理HTML、htmlparser、HtmlParser 异常 rg.htmlparser.util.ParserException: Exception getting input stream from http:、HTMLParser 怎么获取替换后的文本的实用信息。
本文目录一览:- 大数据处理之道 (htmlparser获取数据<一>)
- html-parsing – 从HtmlCleaner获取文本中的清理HTML
- htmlparser
- HtmlParser 异常 rg.htmlparser.util.ParserException: Exception getting input stream from http:
- HTMLParser 怎么获取替换后的文本
大数据处理之道 (htmlparser获取数据<一>)
一:简介
(1)HTML Parser是一个用于解析Html的Java的库,可采用线性或嵌套两种方式。主要用于网页的转换或提取,他有一些特性:过滤器filter,遍历器visitors,通常的标签tagName和易用的JavaBeans。它是一个快速,健壮,并严格测试过的组件。
(2)个人理解:HTMLParser遍历了网页的内容以后,以树(森林)结构保存了结果,各个节点代表HTML中的标签和属性值,非常类似于XML解析器解析后的结果,也类似与html dom的结构;HTMLParser访问结果内容的方法有两种:使用Filter和使用Visitor,一般Filter用的多一些,用于提取特定的网页信息。
(3)官方API说明 (需要Google的)
二:主要函数功能说明:
(1)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的定义:
public interface Node extends Cloneable;
Node中包含的方法有几类:
对于树型结构进行遍历的函数,这些函数最容易理解:
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页面中的结束位置
(3)其它函数:
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):设置子节点列表
(4)用于Filter过滤的函数
顾名思义,Filter就是对于结果进行过滤,取得需要的内容。HTMLParser在org.htmlparser.filters包之内一共定义了16个不同的Filter,也可以分为几类。
判断类Filter:
TagNameFilter ----- html标签指定指定过滤器
HasAttributeFilter ------ 属性和属性值指定过滤器
HasChildFilter
HasParentFilter
HasSiblingFilter
IsEqualFilter
逻辑运算Filter:
AndFilter ------ 同时满足两个或多个过滤条件的过滤器
NotFilter ------ 非
OrFilter ------- 或
XorFilter
其他Filter:
NodeClassFilter
StringFilter ------- 过滤敏感信息的过滤器
LinkStringFilter --------- 过滤敏感链接信息的过滤器
LinkRegexFilter
RegexFilter
CssSelectorNodeFilter
所有的Filter类都实现了org.htmlparser.NodeFilter接口。这个接口只有一个主要函数:
boolean accept (Node node);
各个子类分别实现这个函数,用于判断输入的Node是否符合这个Filter的过滤条件,如果符合,返回true,否则返回false。
三:html结构解析图示说明
(1)HTML代码
<html> <head> <title>HTML DOM</title> </head> <body> <h1>DOM的结构</h1> <p><a href="href">链接</a></p> </body> </html>
(2)html的dom结构(即parser后的解析树形结构)
(3)说明
- 由结构图中我们可以看到,整个文档就是一个文档节点。
- 而每一个HMTL标签都是一个元素节点。
- 标签中的文字则是文字节点。
- 标签的属性是属性节点。
- 一切都是节点……
html-parsing – 从HtmlCleaner获取文本中的清理HTML
我看到在TagNode上有一个名为serialize的方法,但是不知道如何使用它.
有人有任何示例代码吗?
谢谢
Nayn
解决方法
HtmlCleaner htmlCleaner = new HtmlCleaner(); TagNode root = htmlCleaner.clean(url); HtmlCleaner.getInnerHtml(root); String html = "<" + root.getName() + ">" + htmlCleaner.getInnerHtml(root) + "</" + root.getName() + ">";
htmlparser
大家好:请问下 HTMLParser 可以将一个元素与它的 css 样式对应起来吗?或者可以借助相关开源包!
谢谢大家!
HtmlParser 异常 rg.htmlparser.util.ParserException: Exception getting input stream from http:
下载网站图片,在本地环境 (MyEclipse8.5) 正常,在 LINUX 上写 shell 执行就异常,异常信息如下:
org.htmlparser.util.ParserException: Exception getting input stream from http://58.248.187.197/data/stock/mmfx/000001 (http://58.248.187.197/data/stock/mmfx/000001).;
java.io.FileNotFoundException: http://58.248.187.197/data/stock/mmfx/000001
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1514)
at java.security.AccessController.doPrivileged(Native Method)
at sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:1508)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1162)
at org.htmlparser.lexer.Page.setConnection(Page.java:571)
at org.htmlparser.lexer.Page.<init>(Page.java:134)
at org.htmlparser.lexer.Lexer.<init>(Lexer.java:186)
at org.htmlparser.Parser.<init>(Parser.java:293)
at org.htmlparser.Parser.<init>(Parser.java:360)
at com.sitech.util.PageParse.getJsonMsg(PageParse.java:68)
at com.sitech.util.PageParse.main(PageParse.java:108)
Caused by: java.io.FileNotFoundException: http://58.248.187.197/data/stock/mmfx/000001
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1457)
at sun.net.www.protocol.http.HttpURLConnection.getHeaderField(HttpURLConnection.java:2340)
at org.htmlparser.lexer.Page.getContentType(Page.java:670)
at org.htmlparser.lexer.Page.setConnection(Page.java:552)
... 6 more
java.net.MalformedURLException
at java.net.URL.<init>(URL.java:601)
at java.net.URL.<init>(URL.java:464)
at java.net.URL.<init>(URL.java:413)
at com.sitech.util.DownloadUtil.download(DownloadUtil.java:64)
at com.sitech.util.PageParse.main(PageParse.java:111)
下载失败
******************************************************
核心代码快:
public boolean download(String url, String code, String moduleName) throws ParserException {
HttpURLConnection hc = null;
InputStream instream = null;
FileOutputStream fos = null;
try {
URL urlobj = new URL(url);
hc = (HttpURLConnection) urlobj.openConnection();
hc.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
// 定义输入流
parser = new Parser(hc);
parser.setEncoding("gb2312");
instream = parser.getConnection().getInputStream();
String tempFileName = getFileNameFromUrl(url, code, moduleName);
String filePathName = createFileDirectory(moduleName, code)
+ tempFileName;
fos = new FileOutputStream(filePathName);
// 定义一个大小为 1024 的字节数组
byte[] buf = new byte[1024];
// 从输入流中读出字节到定义的字节数组
int len = instream.read(buf, 0, 1024);
// 循环读入字节,然后写到文件输出流中
while (len != -1) {
fos.write(buf, 0, len);
len = instream.read(buf, 0, 1024);
}
fos.flush();
fos.close();
return true;
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}
************************************
能否有朋友指点?
HTMLParser 怎么获取替换后的文本
现在我们有一个需求就是,修改页面所有链接的href 值,然后保存这个页面
Parser myParser = new Parser(); try { myParser.setInputHTML(content); NodeFilter textFilter = new NodeClassFilter(LinkTag.class); NodeList nodeList = myParser.parse(textFilter); for (int i = 0; i < nodeList.size(); i++) { Node node = nodeList.elementAt(i); LinkTag linkTag = (LinkTag)node; linkTag.setLink("http://www.163.com"); System.out.println(linkTag.getLinkText()+" : "+linkTag.getLink()); } } catch (Exception e) { log.error("parse html enode is error"); } return content;
我们今天的关于大数据处理之道 和htmlparser获取数据<一>的分享已经告一段落,感谢您的关注,如果您想了解更多关于html-parsing – 从HtmlCleaner获取文本中的清理HTML、htmlparser、HtmlParser 异常 rg.htmlparser.util.ParserException: Exception getting input stream from http:、HTMLParser 怎么获取替换后的文本的相关信息,请在本站查询。
本文标签: