网页爬虫 htmlparser
来源:互联网 发布:维秘无日韩 知乎 编辑:程序博客网 时间:2024/05/21 12:46
package demo;
import java.util.HashSet;
import java.util.Set;
import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.NodeClassFilter;
import org.htmlparser.filters.OrFilter;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
/**
* 这个类是用来搜集新闻链接地址的。将符合正则表达式的URL添加到URL数组中。
* @author Administrator
*/
public class LinkParser {
// 获取一个网站上的链接,filter 用来过滤链接
public static Set<String> extracLinks(String url, LinkFilter filter) {
Set<String> links = new HashSet<String>();
try {
Parser parser = new Parser(url);
parser.setEncoding("gb2312");
// 过滤 <frame >标签的 filter,用来提取 frame 标签里的 src 属性所表示的链接
NodeFilter frameFilter = new NodeFilter() {
public boolean accept(Node node) {
if (node.getText().startsWith("frame src=")) {
return true;
} else {
return false;
}
}
};
// OrFilter 来设置过滤 <a> 标签,和 <frame> 标签
OrFilter linkFilter = new OrFilter(new NodeClassFilter(
LinkTag.class), frameFilter);
// 得到所有经过过滤的标签
NodeList list = parser.extractAllNodesThatMatch(linkFilter);
for (int i = 0; i < list.size(); i++) {
Node tag = list.elementAt(i);
if (tag instanceof LinkTag)// <a> 标签
{
LinkTag link = (LinkTag) tag;
String linkUrl = link.getLink();// url
if (filter.accept(linkUrl)) {
links.add(linkUrl);
}
} else// <frame> 标签
{
// 提取 frame 里 src 属性的链接如 <frame src="test.html"/>
String frame = tag.getText();
int start = frame.indexOf("src=");
frame = frame.substring(start);
int end = frame.indexOf(" ");
if (end == -1) {
end = frame.indexOf(">");
}
String frameUrl = frame.substring(5, end - 1);
if (filter.accept(frameUrl)) {
links.add(frameUrl);
}
}
}
} catch (ParserException e) {
e.printStackTrace();
}
return links;
}
public void doParser(String url) {
SohuNews news = new SohuNews();
Set<String> links = LinkParser.extracLinks(
url, new LinkFilter() {
//提取以 http://www.twt.edu.cn 开头的链接
public boolean accept(String url) {
if (url.matches("http://news.sohu.com/[\\d]+/n[\\d]+.shtml")) {
return true;
} else {
return false;
}
}
});
//循环迭代出连接,然后提取该连接中的新闻。
for (String link : links) {
System.out.println(link);
// news.parser(link);
}
}
//测试主页新闻,可以得到主页上所有符合要求的网页地址,并进行访问。
public static void main(String[] args) {
String url = "http://news.sohu.com/";
LinkParser parser = new LinkParser();
parser.doParser(url);
}
}
import java.util.HashSet;
import java.util.Set;
import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.NodeClassFilter;
import org.htmlparser.filters.OrFilter;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
/**
* 这个类是用来搜集新闻链接地址的。将符合正则表达式的URL添加到URL数组中。
* @author Administrator
*/
public class LinkParser {
// 获取一个网站上的链接,filter 用来过滤链接
public static Set<String> extracLinks(String url, LinkFilter filter) {
Set<String> links = new HashSet<String>();
try {
Parser parser = new Parser(url);
parser.setEncoding("gb2312");
// 过滤 <frame >标签的 filter,用来提取 frame 标签里的 src 属性所表示的链接
NodeFilter frameFilter = new NodeFilter() {
public boolean accept(Node node) {
if (node.getText().startsWith("frame src=")) {
return true;
} else {
return false;
}
}
};
// OrFilter 来设置过滤 <a> 标签,和 <frame> 标签
OrFilter linkFilter = new OrFilter(new NodeClassFilter(
LinkTag.class), frameFilter);
// 得到所有经过过滤的标签
NodeList list = parser.extractAllNodesThatMatch(linkFilter);
for (int i = 0; i < list.size(); i++) {
Node tag = list.elementAt(i);
if (tag instanceof LinkTag)// <a> 标签
{
LinkTag link = (LinkTag) tag;
String linkUrl = link.getLink();// url
if (filter.accept(linkUrl)) {
links.add(linkUrl);
}
} else// <frame> 标签
{
// 提取 frame 里 src 属性的链接如 <frame src="test.html"/>
String frame = tag.getText();
int start = frame.indexOf("src=");
frame = frame.substring(start);
int end = frame.indexOf(" ");
if (end == -1) {
end = frame.indexOf(">");
}
String frameUrl = frame.substring(5, end - 1);
if (filter.accept(frameUrl)) {
links.add(frameUrl);
}
}
}
} catch (ParserException e) {
e.printStackTrace();
}
return links;
}
public void doParser(String url) {
SohuNews news = new SohuNews();
Set<String> links = LinkParser.extracLinks(
url, new LinkFilter() {
//提取以 http://www.twt.edu.cn 开头的链接
public boolean accept(String url) {
if (url.matches("http://news.sohu.com/[\\d]+/n[\\d]+.shtml")) {
return true;
} else {
return false;
}
}
});
//循环迭代出连接,然后提取该连接中的新闻。
for (String link : links) {
System.out.println(link);
// news.parser(link);
}
}
//测试主页新闻,可以得到主页上所有符合要求的网页地址,并进行访问。
public static void main(String[] args) {
String url = "http://news.sohu.com/";
LinkParser parser = new LinkParser();
parser.doParser(url);
}
}
0 0
- 网页爬虫 htmlparser
- htmlparser爬虫实现网页上的图片下载
- [Java] 使用htmlparser在爬虫时过滤网页
- 基于htmlparser实现网页内容解析 (主题爬虫)
- 爬虫实战:基于 HtmlParser 实现网页链接的提取
- 网络爬虫---HTMLPARSER使用指南
- 网络爬虫---htmlparser
- 网络爬虫---htmlparser
- 网络爬虫---htmlparser
- Java 网络爬虫-htmlparser
- python爬虫之HTMLParser
- 解析网页工具HTMLParser
- 学习HTMLParser解析网页
- HtmlParser技术:网页抓取
- htmlparser 基础 网页拔取
- Python使用HTMLParser.HTMLParser处理网页
- htmlparser 开发垂直搜索爬虫
- 网络爬虫---HTMLParser使用详解
- 推荐系统(Recommender System)的技术基础
- 为何 as sysdba的方式登陆oracle数据库,为何随便输入用户名和密码都可以登陆?
- 嗨翻C语言笔记(部分引用)
- Ubutun常用命令之cd和ls
- UVA 10790 (暑假-数学(3)-A - How Many Points of Intersection?)
- 网页爬虫 htmlparser
- Android开源项目分类汇总
- PHP与JS相互调用
- 实习•挑战,我来了
- hdu 4858 项目管理
- Android免费课程分享
- 7-21
- Ubuntu上安装Hadoop环境中org.apache.hadoop.security.UserGroupInformation: PriviledgedActionException
- 内嵌网页