首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
Web开发
> 详细
htmlparser 精确提取的一些代码
时间:
2015-09-01 16:45:48
阅读:
253
评论:
0
收藏:
0
[点我收藏+]
标签:
一、
Java代码
ConnectionManager manager = Page.getConnectionManager();
Parser parser =
new Parser(manager
.openConnection(
"http://www.verycd.com/topics/2760827/"));
parser.setEncoding(
"GBK");
//提取a标签里的img图片链接
// NodeFilter filter = new AndFilter(new TagNameFilter("a"),
// new HasChildFilter(new TagNameFilter("img")));
// NodeFilter filter = new TagNameFilter("title");
//提取input里面的东西
NodeFilter filter =
new AndFilter(
new TagNameFilter(
"input"),
new HasAttributeFilter(
"class",
"forminput"));
// NodeList nodeList = parser.parse(filter);
NodeList nodeList = parser.extractAllNodesThatMatch(filter);
NodeIterator it = nodeList.elements();
while (it.hasMoreNodes()) {
Node node = it.nextNode();
System.out.println(node.toHtml());
}
}
二、
Java代码
// 获取一个网页上所有的链接和图片链接
public
static
void extracLinks(String url) {
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> 标签,<img> 标签和 <frame> 标签,三个标签是 or 的关系
OrFilte rorFilter =
new OrFilter(
new NodeClassFilter(LinkTag.
class),
new
NodeClassFilter(ImageTag.
class));
OrFilter linkFilter =
new OrFilter(orFilter, 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
String text = link.getLinkText();
//链接文字
System.out.println(linkUrl +
"**********" + text);
}
else
if (tag
instanceof ImageTag)
//<img> 标签
{
ImageTag image = (ImageTag) list.elementAt(i);
System.out.print(image.getImageURL() +
"********");
//图片地址
System.out.println(image.getText());
//图片文字
}
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(
">");
frame = frame.substring(
5, end -
1);
System.out.println(frame);
}
}
}
catch (ParserException e) {
e.printStackTrace();
}
}
三、
Java代码
public
void test2()
throws ParserException{
ConnectionManager manager = Page.getConnectionManager();
Parser parser =
new Parser(manager.openConnection(
"http://www.verycd.com/sto/datum/computer/page1"));
//提取A标签,他有一个父标签为H3
NodeFilter filter =
new AndFilter(
new TagNameFilter(
"a"),
new HasParentFilter(
new TagNameFilter(
"h3")));
NodeList nodes = parser.parse(filter);
NodeIterator it = nodes.elements();
while (it.hasMoreNodes()) {
Node node = it.nextNode();
//可以在此用debug查看node节点是什么类型的,然后在转换成具体类型来提取想要的数据!
if (node
instanceof LinkTag) {
//转换
LinkTag linkNode = (LinkTag) node;
System.out.println(
"http://www.verycd.com"+linkNode.getAttribute(
"href"));
}
}
}
四、
Java代码
ConnectionManager manager = Page.getConnectionManager();
Parser parser =
new Parser(manager.openConnection(
"http://huodong.sodao.com/39/info#"));
NodeFilter filter =
new StringFilter(
"减价幅度");
//用了StringFilter,可以立即提取出所在的text节点
NodeList nodes = parser.parse(filter);
NodeIterator it = nodes.elements();
while (it.hasMoreNodes()) {
Node node = it.nextNode();
//可以在此用debug查看node节点是什么类型的,然后在转换成具体类型来提取想要的数据!
System.out.println(node.getParent().toHtml());
//通过indexof方法提取想要的text
五、
Java代码
/**
* 用htmlparser提取图片的几种方法
*/
public
class Test {
static Parser parser =
new Parser();
public
static
void test1(String url)
throws ParserException{
Parser parser =
new Parser();
parser.setURL(url);
parser.setEncoding(
"GBK");
//第一种方法
NodeFilter imageFilter =
new NodeFilter() {
public
boolean accept(Node node) {
return (node
instanceof ImageTag);
}
};
NodeList images = parser.extractAllNodesThatMatch(imageFilter);
// 第二种方法
// NodeFilter imageFilter = new TagNameFilter("img");
//第三种方法
// NodeFilter imageFilter = new NodeClassFilter(ImageTag.class);
// NodeList images = parser.parse(imageFilter);
System.out.println(
"Size: " + images.size());
for(NodeIterator it = images.elements(); it.hasMoreNodes();){
ImageTag node = (ImageTag) it.nextNode();
System.out.println(node.getAttribute(
"src"));
}
}
public
static
void test2(String url)
throws ParserException {
Parser parser =
new Parser();
parser.setURL(url);
parser.setEncoding(
"GBK");
NodeFilter divFilter =
new AndFilter(
new TagNameFilter(
"div"),
new HasAttributeFilter(
"id",
"text_content"));
NodeList divs = parser.parse(divFilter);
System.out.println(removeTag(divs.elementAt(
0).toHtml()));
}
public
static String removeTag(String content) {
if (
null != content && !
"".equals(content.trim())) {
while (content.indexOf(
"<") >=
0 && content.indexOf(
">") >=
0) {
int i = content.indexOf(
"<");
int j = content.indexOf(
">");
if (i < j) {
String contetn1 = content.substring(
0, i);
String content2 = content.substring(j +
1,
content.length() );
content = contetn1 + content2;
}
}
}
return content;
}
public
static
void main(String[] args)
throws ParserException {
String url =
"http://news.dayoo.com/china/200908/11/53868_10386441.htm";
Test.test2(url);
}
}
=====================================================================
/** */
/**
* 分别读纯文本和链接.
* @param result 网页的内容
* @throws Exception
*/
public
static
void readTextAndLinkAndTitle(String result)
throws Exception {
Parser parser;
NodeList nodelist;
parser = Parser.createParser(result,
"utf8");
NodeFilter textFilter =
new NodeClassFilter(TextNode.
class);
NodeFilter linkFilter =
new NodeClassFilter(LinkTag.
class);
NodeFilter titleFilter =
new NodeClassFilter(TitleTag.
class);
OrFilter lastFilter =
new OrFilter();
lastFilter.setPredicates(
new NodeFilter[] { textFilter, linkFilter, titleFilter });
nodelist = parser.parse(lastFilter);
Node[] nodes = nodelist.toNodeArray();
String line =
"";
for (
int i =
0; i < nodes.length; i++) {
Node node = nodes[i];
if (node
instanceof TextNode) {
TextNode textnode = (TextNode) node;
line = textnode.getText();
}
else
if (node
instanceof LinkTag) {
LinkTag link = (LinkTag) node;
line = link.getLink();
}
else
if (node
instanceof TitleTag) {
TitleTag titlenode = (TitleTag) node;
line = titlenode.getTitle();
}
if (isTrimEmpty(line))
continue;
System.out.println(line);
}
}
六、
Java代码
/**
* @author rrong_m
* @throws ParserException
*/
public
static
void getWords(String url)
throws ParserException {
Parser parser =
new Parser(url);
NodeFilter filter =
new HasAttributeFilter(
"id",
"word_more_con");
NodeList nodelist = parser.extractAllNodesThatMatch(filter);
NodeFilter filter1 =
new NodeClassFilter(LinkTag.
class);
nodelist = nodelist.extractAllNodesThatMatch(filter1,
true);
for (
int i =
0; i < nodelist.size(); i++) {
LinkTag link = (LinkTag) nodelist.elementAt(i);
System.out.println(link.getLinkText() +
":" + link.getLink());
}
}
七、处理html里面的table
Java代码
public List getChangyu(String id)
throws HttpException, IOException, ParserException
{
HttpClient hc=
new HttpClient();
hc.getParams().setContentCharset(
"gb2312");
PostMethod pm=
new PostMethod(
"http://61.145.121.47/custSearch.jsp");
pm.setParameter(
"bnos",
"111111111111");
hc.executeMethod(pm);
String temp=pm.getResponseBodyAsString(
50000);
//设置获取html代码的数量,否则会报错,过大
//System.out.print(temp);
Parser parser=
new Parser(temp);
NodeFilter filter=
new HasAttributeFilter(
"cellpadding",
"-1");
NodeList nodelist=parser.extractAllNodesThatMatch(filter);
if(nodelist.size()>
0)
{
NodeFilter filter1=
new NodeClassFilter(TableTag.
class);
nodelist=nodelist.extractAllNodesThatMatch(filter1,
true);
if(nodelist.size()>
0)
{
TableTag table=(TableTag) nodelist.elementAt(
0);
TableRow [] rows=table.getRows();
if(rows.length>
1)
{
for(
int i=
2;i<rows.length;i++)
{
TableRow row=rows[i];
TableColumn td=row.getColumns()[
0];
TableColumn td1=row.getColumns()[
1];
System.out.println(td.toPlainTextString()+
" "+td1.toPlainTextString());
}
}
}
}
else
{
}
return
null;
}
八、查询IP
Java代码
public
static
void getIp(String ip)
throws ParserException
{
String url=
"http://www.ip138.com/ips.asp?ip="+ip;
Parser parser=
new Parser(url);
parser.setEncoding(
"gb2312");
//设置编码否则得到的是乱码51jsp.cn
NodeList nodelist=
null;
NodeFilter filter=
new HasAttributeFilter(
"class",
"ul1");
//定义过滤51jsp.cn
nodelist=parser.extractAllNodesThatMatch(filter);
if(nodelist.size()>
0)
{
System.out.println(
"您查询的IP为:"+ip);
System.out.println(nodelist.elementAt(
0).toPlainTextString());
}
}
public
static
void main(String[] args)
throws ParserException {
getIp(
"125.33.192.180");
}
九、提取html里面的p标签里面的内容
Java代码
public
static ArrayList <String> getParagraphList( String content){
ArrayList <String> paraList=
new ArrayList <String>();
Parser myParser=
new Parser();
NodeList nodeList =
null;
NodeFilter paraFilter =
new NodeClassFilter(ParagraphTag.
class);
try {
myParser.setInputHTML(content);
nodeList = myParser.parse(paraFilter);
for (
int i =
0; i <= nodeList.size(); i++) {
ParagraphTag tag = (ParagraphTag) nodeList.elementAt(i);
if(tag!=
null){
// System.out.println(tag.getStringText());
// System.out.println("***********************************");
paraList.add(tag.getStringText());
}
}
}
catch (ParserException e) {
e.printStackTrace();
}
return paraList;
}
htmlparser 精确提取的一些代码
标签:
原文地址:http://www.cnblogs.com/Alex80/p/4775840.html
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
36.VUE — 认识 Webpack 和 安装
2021-07-28
【PHP】上传图片翻转问题
2021-07-28
php对数字进行万。亿的转化
2021-07-28
五个 .NET 性能小贴士
2021-07-28
Three.js中显示坐标轴、平面、球体、四方体
2021-07-28
.net 5+ 知新:【1】 .Net 5 基本概念和开发环境搭建
2021-07-27
1.html,css
2021-07-27
基于Docker搭建 Php-fpm + Nginx 环境
2021-07-27
nginx + http + svn
2021-07-27
kubernets kube-proxy的代理 iptables和ipvs
2021-07-26
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!