HtmlParser应用,应用Filter从爬取到的网页中获取须要的内容
添加时间:2013-7-15 点击量:
htmlparser是一个纯的java写的html解析的库,它不依附于其它的java库文件,首要用于或提取html。它能超高速解析html,并且不会失足。如今htmlparser新版本为2.0。
地址: http://sourceforge.net/projects/htmlparser/
在线API: http://www.ostools.net/apidocs/apidoc?api=HTMLParser
Filter就是对于成果进行过滤,取得须要的内容。HTMLParser在org.htmlparser.filters包之内一共定义了15个不合的Filter
AndFilter、CssSelectorNodeFilter、HasAttributeFilter、HasChildFilter、HasSiblingFilter、IsEqualFilter、LinkRegexFilter、LinkStringFilter、NodeClassFilter、NotFilter、OrFilter、RegexFilter、StringFilter 、TagNameFilter.
常用的几个过滤器申明
TagNameFilter:
是最轻易懂得的一个Filter,按照Tag的名字进行过滤
HasChildFilter:
是返回有合适前提的子节点的节点,须要别的一个Filter作为过滤子节点的参数。
HasAttributeFilter:
可以匹配出包含制订名字的属性,或者制订属性为指定值的节点。HasParentFilter和HasSiblingFilter的功能与HasChildFilter类似。
StringFilter:
这个Filter用于过滤显示字符串中包含指定内容的标签节点。重视是可显示的字符串,不成显示的字符串中的内容(例如注释,链接等等)不会被显示
RegexFilter :
按照正则表达式匹配节点.与LinkRegexFilter不合的是,LinkRegexFilter只在LinkTag中寻找匹配
NodeClassFilter:
按照已定义的标签类获取节点
LinkStringFilter:
这个Filter用于断定链接中是否包含某个特定的字符串,可以用来过滤出指向某个特定网站的链接。
OrFilter:
是连络几种过滤前提的或过滤器
AndFilter:
是连络几种过滤前提的与过滤器
实例应用
NodeClassFilter过滤器实例
/
过滤页面中的标签信息
@param url 要解析的url页面
@param encoding 应用的字符编码
@param tagclass
要或取得页面标签,如要获取页面中的超链接 值为LinkTag.class,要获取页面中链接,值为ImageTag.class
要传入的标签类为org.htmlparser.tags下的
/
public static void nodeFilterTagClass(String url,String encoding,Class tagclass){
try {
Parser parser = new Parser();
parser.setURL(url);
if(null==encoding){
parser.setEncoding(parser.getEncoding());
}else{
parser.setEncoding(encoding);
}
//过滤页面中的链接标签
NodeFilter filter = new NodeClassFilter(tagclass);
NodeList list = parser.extractAllNodesThatMatch(filter);
for(int i=0; i<list.size();i++){
Node node = (Node)list.elementAt(i);
System.out.println(link is : + node.toHtml());
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String url = http://wenku.baidu.com/search?word=htmlparser&lm=0&od=0&fr=top_home;
//获取页面中的<a href=xxx [属性]>格局的链接
nodeFilterTagClass(url, UTF-8, LinkTag.class);
//或取页面中的<img src=xxx [属性=属性值]>格局的链接
nodeFilterTagClass(url, UTF-8, ImageTag.class);
//或取页面<title>xxxx</title>题目
nodeFilterTagClass(url, UTF-8, TitleTag.class);
//获取页面<div [属性=属性值]> xxx</div>
//nodeFilterTagClass(url, UTF-8, Div.class);
}
法度运行成果:
TagNameFilter实例应用
是最轻易懂得的一个Filter,按照Tag的名字进行过滤
/
按照标过滤页面中的标签信息
@param url 要解析的url页面
@param encoding 应用的字符编码
@param tagName 标
/
public static void nodeFilterTagName(String url,String encoding,String tagName){
try {
Parser parser = new Parser();
parser.setURL(url);
if(null==encoding){
parser.setEncoding(parser.getEncoding());
}else{
parser.setEncoding(encoding);
}
//过滤页面中的链接标签
NodeFilter filter = new TagNameFilter(tagName);
NodeList list = parser.extractAllNodesThatMatch(filter);
for(int i=0; i<list.size();i++){
Node node = (Node)list.elementAt(i);
System.out.println(link is : + node.toHtml());
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String url = http://wenku.baidu.com/search?word=htmlparser&lm=0&od=0&fr=top_home;
//获取页面中的<a href=xxx [属性]>格局的链接
nodeFilterTagName(url, UTF-8, a);
//或取页面中的<img src=xxx [属性=属性值]>格局的链接
nodeFilterTagName(url, UTF-8, img);
//获取页面中的<div>链接
//nodeFilterTagName(url, UTF-8, div);
}
法度运行成果同上
StringFilter实例应用
过滤显示字符串中包含指定内容的标签节点。重视是可显示的字符串,不成显示的字符串中的内容(例如注释,链接等等)不会被显示
/
过滤显示字符串中包含指定内容的标签节点。重视是可显示的字符串,不成显示的字符串中的内容(例如注释,链接等等)不会被显示
@param url 恳求处理惩罚的url
@param encoding 字符编码
@param containStr包含的指定内容
/
public static void stringFilter(String url,String encoding,String containStr){
try {
Parser parser = new Parser();
parser.setURL(url);
if(null==encoding){
parser.setEncoding(parser.getEncoding());
}else{
parser.setEncoding(encoding);
}
//OrFilter是连络几种过滤前提的‘或’过滤器
NodeFilter filter = new StringFilter(containStr);
NodeList list = parser.extractAllNodesThatMatch(filter);
for(int i=0; i<list.size();i++){
Node node = (Node)list.elementAt(i);
System.out.println(link is : + node.toHtml());
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String url = http://wenku.baidu.com/search?word=htmlparser&lm=0&od=0&fr=top_home;
stringFilter(url, UTF-8, img.baidu.com);
}
法度运行成果
OrFilter实例应用
OrFilter是连络几种过滤前提的‘或’过滤器,与此相反的是AndFilter,AndFilter是凑集几个过滤前提的‘与’过滤器
/
OrFilter是连络几种过滤前提的‘或’过滤器
一般主题信息包含鄙人列标签中:<table>、<tr>、<td>、<p>、<div>等。若是要过滤出这些节点标签,可以应用OrFilter过滤器
@param url 恳求处理惩罚的url
@param encoding 应用的字符编码
@param filters 多个过滤器数组
/
public static void orMultiFilter(String url,String encoding,NodeFilter[] filters){
try {
Parser parser = new Parser();
parser.setURL(url);
if(null==encoding){
parser.setEncoding(parser.getEncoding());
}else{
parser.setEncoding(encoding);
}
//OrFilter是连络几种过滤前提的‘或’过滤器
NodeFilter filter = new OrFilter(filters);
NodeList list = parser.extractAllNodesThatMatch(filter);
for(int i=0; i<list.size();i++){
Node node = (Node)list.elementAt(i);
System.out.println(link is : + node.toHtml());
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String url = http://wenku.baidu.com/search?word=htmlparser&lm=0&od=0&fr=top_home;
//过滤多个标签 或关系
NodeFilter[] filters = new NodeFilter[3];
filters[0] = new NodeClassFilter(TableTag.class);
filters[1] = new NodeClassFilter(ParagraphTag.class);
filters[2] = new NodeClassFilter(ImageTag.class);
orMultiFilter(url, UTF-8, filters);
}
法度运行成果:
RegexFilter与LinkRegexFilter实例应用
RegexFilter按照正则表达式匹配节点.与LinkRegexFilter不合的是,LinkRegexFilter只在LinkTag中寻找匹配
/
在文本中经由过程正则进行匹配
@param url 恳求处理惩罚的url
@param encoding 字符编码
@param regex 待匹配的正则表达式
/
public static void regexStringFilter(String url,String encoding,String regex){
try {
Parser parser = new Parser();
parser.setURL(url);
if(null==encoding){
parser.setEncoding(parser.getEncoding());
}else{
parser.setEncoding(encoding);
}
//OrFilter是连络几种过滤前提的‘或’过滤器
NodeFilter filter = new RegexFilter(regex);
NodeList list = parser.extractAllNodesThatMatch(filter);
for(int i=0; i<list.size();i++){
Node node = (Node)list.elementAt(i);
System.out.println(link is : + node.toHtml());
}
} catch (Exception e) {
e.printStackTrace();
}
}
/
在链接地址中进行正则匹配,返回的是Link结点
@param url 恳求url
@param encoding 字符编码
@param regex 待匹配的正则表达式
/
public static void linkTagRegexFilter(String url,String encoding,String regex){
try {
Parser parser = new Parser();
parser.setURL(url);
if(null==encoding){
parser.setEncoding(parser.getEncoding());
}else{
parser.setEncoding(encoding);
}
//OrFilter是连络几种过滤前提的‘或’过滤器
NodeFilter filter = new LinkRegexFilter(regex);
NodeList list = parser.extractAllNodesThatMatch(filter);
for(int i=0; i<list.size();i++){
Node node = (Node)list.elementAt(i);
System.out.println(link is : + node.toHtml());
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String url = F:/dennisit/email.txt;
String emailRegex = [a-zA-Z0-9_-]+@\\w+\\.[a-z]+(\\.[a-z]+)?;
regexStringFilter(url, UTF-8, emailRegex);
System.out.println(-------------------------------------------);
linkTagRegexFilter(url, UTF-8, emailRegex);
}
法度运行成果
转载请注明出处:[http://www.cnblogs.com/dennisit/p/3191803.html]
我们永远不要期待别人的拯救,只有自己才能升华自己。自己已准备好了多少容量,方能吸引对等的人与我们相遇,否则再美好的人出现、再动人的事情降临身边,我们也没有能量去理解与珍惜,终将擦肩而过。—— 姚谦《品味》
htmlparser是一个纯的java写的html解析的库,它不依附于其它的java库文件,首要用于或提取html。它能超高速解析html,并且不会失足。如今htmlparser新版本为2.0。
地址: http://sourceforge.net/projects/htmlparser/
在线API: http://www.ostools.net/apidocs/apidoc?api=HTMLParser
Filter就是对于成果进行过滤,取得须要的内容。HTMLParser在org.htmlparser.filters包之内一共定义了15个不合的Filter
AndFilter、CssSelectorNodeFilter、HasAttributeFilter、HasChildFilter、HasSiblingFilter、IsEqualFilter、LinkRegexFilter、LinkStringFilter、NodeClassFilter、NotFilter、OrFilter、RegexFilter、StringFilter 、TagNameFilter.
常用的几个过滤器申明
TagNameFilter:
是最轻易懂得的一个Filter,按照Tag的名字进行过滤
HasChildFilter:
是返回有合适前提的子节点的节点,须要别的一个Filter作为过滤子节点的参数。
HasAttributeFilter:
可以匹配出包含制订名字的属性,或者制订属性为指定值的节点。HasParentFilter和HasSiblingFilter的功能与HasChildFilter类似。
StringFilter:
这个Filter用于过滤显示字符串中包含指定内容的标签节点。重视是可显示的字符串,不成显示的字符串中的内容(例如注释,链接等等)不会被显示
RegexFilter :
按照正则表达式匹配节点.与LinkRegexFilter不合的是,LinkRegexFilter只在LinkTag中寻找匹配
NodeClassFilter:
按照已定义的标签类获取节点
LinkStringFilter:
这个Filter用于断定链接中是否包含某个特定的字符串,可以用来过滤出指向某个特定网站的链接。
OrFilter:
是连络几种过滤前提的或过滤器
AndFilter:
是连络几种过滤前提的与过滤器
实例应用
NodeClassFilter过滤器实例
/
过滤页面中的标签信息
@param url 要解析的url页面
@param encoding 应用的字符编码
@param tagclass
要或取得页面标签,如要获取页面中的超链接 值为LinkTag.class,要获取页面中链接,值为ImageTag.class
要传入的标签类为org.htmlparser.tags下的
/
public static void nodeFilterTagClass(String url,String encoding,Class tagclass){
try {
Parser parser = new Parser();
parser.setURL(url);
if(null==encoding){
parser.setEncoding(parser.getEncoding());
}else{
parser.setEncoding(encoding);
}
//过滤页面中的链接标签
NodeFilter filter = new NodeClassFilter(tagclass);
NodeList list = parser.extractAllNodesThatMatch(filter);
for(int i=0; i<list.size();i++){
Node node = (Node)list.elementAt(i);
System.out.println(link is : + node.toHtml());
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String url = http://wenku.baidu.com/search?word=htmlparser&lm=0&od=0&fr=top_home;
//获取页面中的<a href=xxx [属性]>格局的链接
nodeFilterTagClass(url, UTF-8, LinkTag.class);
//或取页面中的<img src=xxx [属性=属性值]>格局的链接
nodeFilterTagClass(url, UTF-8, ImageTag.class);
//或取页面<title>xxxx</title>题目
nodeFilterTagClass(url, UTF-8, TitleTag.class);
//获取页面<div [属性=属性值]> xxx</div>
//nodeFilterTagClass(url, UTF-8, Div.class);
}
法度运行成果:
TagNameFilter实例应用
是最轻易懂得的一个Filter,按照Tag的名字进行过滤
/
按照标过滤页面中的标签信息
@param url 要解析的url页面
@param encoding 应用的字符编码
@param tagName 标
/
public static void nodeFilterTagName(String url,String encoding,String tagName){
try {
Parser parser = new Parser();
parser.setURL(url);
if(null==encoding){
parser.setEncoding(parser.getEncoding());
}else{
parser.setEncoding(encoding);
}
//过滤页面中的链接标签
NodeFilter filter = new TagNameFilter(tagName);
NodeList list = parser.extractAllNodesThatMatch(filter);
for(int i=0; i<list.size();i++){
Node node = (Node)list.elementAt(i);
System.out.println(link is : + node.toHtml());
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String url = http://wenku.baidu.com/search?word=htmlparser&lm=0&od=0&fr=top_home;
//获取页面中的<a href=xxx [属性]>格局的链接
nodeFilterTagName(url, UTF-8, a);
//或取页面中的<img src=xxx [属性=属性值]>格局的链接
nodeFilterTagName(url, UTF-8, img);
//获取页面中的<div>链接
//nodeFilterTagName(url, UTF-8, div);
}
法度运行成果同上
StringFilter实例应用
过滤显示字符串中包含指定内容的标签节点。重视是可显示的字符串,不成显示的字符串中的内容(例如注释,链接等等)不会被显示
/
过滤显示字符串中包含指定内容的标签节点。重视是可显示的字符串,不成显示的字符串中的内容(例如注释,链接等等)不会被显示
@param url 恳求处理惩罚的url
@param encoding 字符编码
@param containStr包含的指定内容
/
public static void stringFilter(String url,String encoding,String containStr){
try {
Parser parser = new Parser();
parser.setURL(url);
if(null==encoding){
parser.setEncoding(parser.getEncoding());
}else{
parser.setEncoding(encoding);
}
//OrFilter是连络几种过滤前提的‘或’过滤器
NodeFilter filter = new StringFilter(containStr);
NodeList list = parser.extractAllNodesThatMatch(filter);
for(int i=0; i<list.size();i++){
Node node = (Node)list.elementAt(i);
System.out.println(link is : + node.toHtml());
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String url = http://wenku.baidu.com/search?word=htmlparser&lm=0&od=0&fr=top_home;
stringFilter(url, UTF-8, img.baidu.com);
}
法度运行成果
OrFilter实例应用
OrFilter是连络几种过滤前提的‘或’过滤器,与此相反的是AndFilter,AndFilter是凑集几个过滤前提的‘与’过滤器
/
OrFilter是连络几种过滤前提的‘或’过滤器
一般主题信息包含鄙人列标签中:<table>、<tr>、<td>、<p>、<div>等。若是要过滤出这些节点标签,可以应用OrFilter过滤器
@param url 恳求处理惩罚的url
@param encoding 应用的字符编码
@param filters 多个过滤器数组
/
public static void orMultiFilter(String url,String encoding,NodeFilter[] filters){
try {
Parser parser = new Parser();
parser.setURL(url);
if(null==encoding){
parser.setEncoding(parser.getEncoding());
}else{
parser.setEncoding(encoding);
}
//OrFilter是连络几种过滤前提的‘或’过滤器
NodeFilter filter = new OrFilter(filters);
NodeList list = parser.extractAllNodesThatMatch(filter);
for(int i=0; i<list.size();i++){
Node node = (Node)list.elementAt(i);
System.out.println(link is : + node.toHtml());
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String url = http://wenku.baidu.com/search?word=htmlparser&lm=0&od=0&fr=top_home;
//过滤多个标签 或关系
NodeFilter[] filters = new NodeFilter[3];
filters[0] = new NodeClassFilter(TableTag.class);
filters[1] = new NodeClassFilter(ParagraphTag.class);
filters[2] = new NodeClassFilter(ImageTag.class);
orMultiFilter(url, UTF-8, filters);
}
法度运行成果:
RegexFilter与LinkRegexFilter实例应用
RegexFilter按照正则表达式匹配节点.与LinkRegexFilter不合的是,LinkRegexFilter只在LinkTag中寻找匹配
/
在文本中经由过程正则进行匹配
@param url 恳求处理惩罚的url
@param encoding 字符编码
@param regex 待匹配的正则表达式
/
public static void regexStringFilter(String url,String encoding,String regex){
try {
Parser parser = new Parser();
parser.setURL(url);
if(null==encoding){
parser.setEncoding(parser.getEncoding());
}else{
parser.setEncoding(encoding);
}
//OrFilter是连络几种过滤前提的‘或’过滤器
NodeFilter filter = new RegexFilter(regex);
NodeList list = parser.extractAllNodesThatMatch(filter);
for(int i=0; i<list.size();i++){
Node node = (Node)list.elementAt(i);
System.out.println(link is : + node.toHtml());
}
} catch (Exception e) {
e.printStackTrace();
}
}
/
在链接地址中进行正则匹配,返回的是Link结点
@param url 恳求url
@param encoding 字符编码
@param regex 待匹配的正则表达式
/
public static void linkTagRegexFilter(String url,String encoding,String regex){
try {
Parser parser = new Parser();
parser.setURL(url);
if(null==encoding){
parser.setEncoding(parser.getEncoding());
}else{
parser.setEncoding(encoding);
}
//OrFilter是连络几种过滤前提的‘或’过滤器
NodeFilter filter = new LinkRegexFilter(regex);
NodeList list = parser.extractAllNodesThatMatch(filter);
for(int i=0; i<list.size();i++){
Node node = (Node)list.elementAt(i);
System.out.println(link is : + node.toHtml());
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String url = F:/dennisit/email.txt;
String emailRegex = [a-zA-Z0-9_-]+@\\w+\\.[a-z]+(\\.[a-z]+)?;
regexStringFilter(url, UTF-8, emailRegex);
System.out.println(-------------------------------------------);
linkTagRegexFilter(url, UTF-8, emailRegex);
}
法度运行成果
转载请注明出处:[http://www.cnblogs.com/dennisit/p/3191803.html]
我们永远不要期待别人的拯救,只有自己才能升华自己。自己已准备好了多少容量,方能吸引对等的人与我们相遇,否则再美好的人出现、再动人的事情降临身边,我们也没有能量去理解与珍惜,终将擦肩而过。—— 姚谦《品味》