- 浏览: 194417 次
- 性别:
- 来自: 上海
最新评论
-
menghuannvxia:
请问下,你的xfire.xml这个文件是怎么写的,放在哪里了
spring+xfire实现webservice简单例子 -
q351505342:
maven部署web工程基础步骤 -
qq672076266:
qq672076266 写道
终于找到一个好用的了。
其他的 ...
JS动态添加select下拉框(城市区域多级下拉框demo) -
qq672076266:
终于找到一个好用的了。
其他的都是原版抄去抄去,真服了.. ...
JS动态添加select下拉框(城市区域多级下拉框demo) -
xfxlch:
...
Java编码音乐播放器简化版
由于公司需要,开发了一个抓取网上数据爬虫的程序,如抓取点评网、阿里巴巴网和慧聪网城市和行业信息,采用的技术是:htmlparser。本文是简单的介绍htmlparser抓取的常用代码示例,具体详见:htmlparser下载包中的api文档。
下面理清一下Node节点与节点之间的关系及NodeFilter的全部实现类。
Interface Node
|||All Known Subinterfaces:
Remark(RemarkNode ),
Tag(AppletTag, BaseHrefTag, BodyTag, Bullet, BulletList, CompositeTag, DefinitionList, DefinitionListBullet, Div, DoctypeTag, FormTag, FrameSetTag, FrameTag, HeadingTag, HeadTag, Html, ImageTag, InputTag, JspTag, LabelTag, LinkTag, MetaTag, ObjectTag, OptionTag, ParagraphTag, ProcessingInstructionTag, ScriptTag, SelectTag, Span, StyleTag, TableColumn, TableHeader, TableRow, TableTag, TagNode, TextareaTag, TitleTag),
Text(TextNode)
Interface NodeFilter
|||All Known Implementing Classes:
AndFilter, AndFilterWrapper, CssSelectorNodeFilter, Filter, HasAttributeFilter, HasAttributeFilterWrapper, HasChildFilter, HasChildFilterWrapper, HasParentFilter, HasParentFilterWrapper, HasSiblingFilter, HasSiblingFilterWrapper, IsEqualFilter, LinkRegexFilter, LinkStringFilter, NodeClassFilter, NodeClassFilterWrapper, NotFilter, NotFilterWrapper, OrFilter, OrFilterWrapper, RegexFilter, RegexFilterWrapper, StringFilter, StringFilterWrapper, TagNameFilter, TagNameFilterWrapper
|||基本思路:前提是对整个html代码的分析,特别是需要抓取的html内容的分析。
第一步:Parser对象的创建并且设置编码,parser.setEncoding("UTF-8"); //UTF-8为html文件中的编码格式,保持一致。
第二步:创建合适的Filter过滤器
第三步:解析获取NodeList对象,然后该对象的toHtml()方法获取字符串,又可以重新创建Parser对象,如果可以一次定位到抓取的内容是最好的,如果不可以,方法是:逐步缩小范围。
第四步:对抓取的内容进行字符串处理,数据库操作等。NodeList对象的toNodeArray()方法获取Node[]节点数组,如LinkTag link = (LinkTag)node[0]; link.getLinkText()//获取链接文本 link.getLink(); //获取链接
|||Detail:
1. 创建Parser对象的方法:(有的时候会抛出网络异常,可以尝试下面三种方法解决问题)
1.1最普通常规的方式
Parser(String resource)
Creates a Parser object with the location of the resource (URL or file).
Parser(URLConnection connection)
Construct a parser using the provided URLConnection.
static Parser createParser(String html, String charset)
Creates the parser on an input string.
1.2 使用java网络链接代理方式
public static URLConnection getUrlAgent(String strUrl){
HttpURLConnection connection = null;
try{
URL url = new URL(strUrl);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return connection;
}
Parser parser = new Parser(getUrlAgent(strUrl));
或 //存在中文转码的情况
String url = "http://localhost:8081/company/kw/%CB%FE%B5%F5.html";
url = java.net.URLDecoder.decode(url, "gb2312");
System.out.println(url);
URLConnection conn = getUrlAgent(url);
Parser parser = new Parser(conn);
1.3使用httpclient抓取网页内容流方式
public static String convertStreamToString(InputStream is)
throws UnsupportedEncodingException {
BufferedReader reader = new BufferedReader(new InputStreamReader(is,
"gbk"));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
// 下载内容
public static String urlContent(String urlString) throws HttpException,
IOException {
HttpClient client = new HttpClient();
GetMethod get = new GetMethod(urlString);
client.executeMethod(get);
// System.out.print("aaaaa:"+get.getResponseCharSet()); //GBK
InputStream iStream = get.getResponseBodyAsStream();
String contentString = convertStreamToString(iStream);
get.releaseConnection();
return contentString;
}
String url = "http://localhost:8081/company/c-1031646_province-%B9%E3%B6%AB_n-y.html/";
Parser parser = new Parser(urlContent(url));
2. NodeList对象
2.1单个标签本身过滤的情况
TagNameFilter filter = new TagNameFilter(tag);
NodeList nodeList = parser.parse(filter);
2.2单个标签同级(即标签与标签之间是兄弟平行关系)过滤的情况
TagNameFilter filter = new TagNameFilter(tag);
HasSiblingFilter hasSiblingFilter = new HasSiblingFilter(filter);
NodeList nodeList = parser.parse(hasSiblingFilter);
2.3单个标签上级(即标签与标签之间是父子关系)过滤的情况
TagNameFilter filter = new TagNameFilter(tag);
HasChildFilter hasChildFilter = new HasChildFilter(filter);
NodeList nodeList = parser.parse(hasChildFilter);
2.4单个标签下级(即标签与标签之间是父子关系)过滤的情况
TagNameFilter filter = new TagNameFilter(tag);
HasParentFilter hasParentFilter = new HasParentFilter(filter);
NodeList nodeList = parser.parse(hasParentFilter);
3.两个标签组合的情况,组合分为:AndFilter, OrFilter, NotFilter,同上也分为:本身,同级HasSiblingFilter,上级HasChildFilter和下级HasParentFilter过滤
AndFilter filter = new AndFilter (
new TagNameFilter (tag),
new TagNameFilter (tagother)
);
AndFilter filter = new AndFilter (
new HasSiblingFilter (
new TagNameFilter (tag)),
new HasSiblingFilter (
new TagNameFilter (tagother))
);
AndFilter filter = new AndFilter (
new HasChildFilter (
new TagNameFilter (tag)),
new HasChildFilter (
new TagNameFilter (tagother))
);
AndFilter filter = new AndFilter (
new HasParentFilter (
new TagNameFilter (tag)),
new HasParentFilter (
new TagNameFilter (tagother))
);
OrFilter filter = new OrFilter (
new TagNameFilter (tag),
new TagNameFilter (tagother)
);
OrFilter filter = new OrFilter (
new HasSiblingFilter (
new TagNameFilter (tag)),
new HasSiblingFilter (
new TagNameFilter (tagother))
);
OrFilter filter = new OrFilter (
new HasChildFilter (
new TagNameFilter (tag)),
new HasChildFilter (
new TagNameFilter (tagother))
);
OrFilter filter = new OrFilter (
new HasParentFilter (
new TagNameFilter (tag)),
new HasParentFilter (
new TagNameFilter (tagother))
);
AndFilter filter = new AndFilter (
new TagNameFilter (tag),
new NotFilter(new TagNameFilter (tagother))
);
AndFilter filter = new AndFilter (
new HasSiblingFilter (
new TagNameFilter (tag)),
new NotFilter (
new TagNameFilter (tagother))
);
AndFilter filter = new AndFilter (
new HasChildFilter (
new TagNameFilter (tag)),
new NotFilter (
new TagNameFilter (tagother))
);
AndFilter filter = new AndFilter (
new HasParentFilter (
new TagNameFilter (tag)),
new NotFilter (
new TagNameFilter (tagother))
);
NodeList nodeList = parser.parse(filter);
4.根据标签属性或标签属性和属性值过滤
HasAttributeFilter filter = new HasAttributeFilter (attribute);
或
HasAttributeFilter filter = new HasAttributeFilter (attribute,value);
NodeList nodeList = parser.parse(filter);
5.标签类过滤的情况
NodeFilter filter = new NodeClassFilter(LinkTag.class); //如链接标签
或
NodeFilter filter = new NodeClassFilter(TextNode.class); //如文本标签
NodeList nodeList = parser.parse(filter);
Node[] nodes = nodeList.toNodeArray(); //返回Node[]节点数组的情况
6.对表格的过滤获取
NodeClassFilter filter = new NodeClassFilter(TableTag.class);
NodeList nodeList = parser.parse(filter);
TableTag tableTag = (TableTag) nodeList.elementAt(0);
TableRow[] rows = tableTag.getRows();
for (int j = 0; j < rows.length; j++) { TableRow tr = (TableRow) rows[j]; TableColumn[] td = tr.getColumns(); for (int k = 0; k < td.length; k++) { LinkTag lt = (LinkTag)td[k].getFirstChild(); …… //字符串操作,数据库操作 } }
发表评论
-
php fck文件夹及上传图片中文乱码问题解决方法
2012-05-21 15:13 2275主要原因是fck中的编(utf-8)码和本地的编码(gbk)环 ... -
extremecomponents补充说明
2012-04-20 16:49 3293<%@ taglib uri="/WEB-IN ... -
Hibernate count如何映射?HQL别名字段问题?
2012-03-01 11:43 8901问:hibernate, select name, count ... -
Hibernate入门级添删改查核心代码
2012-02-16 18:01 1141public static void main(String[ ... -
XML request error: Internal Server Error (500)解决方法
2011-08-29 17:42 5554XML request error: Internal Ser ... -
FCKeditor fileupload Error on file upload.Error number:203分析解决
2009-10-28 14:59 3023问题描述:还发现了个问题,这个编辑器的上传功能和webwork ... -
xfire传入传出自定义类型和集合类型-webservice分析
2009-08-12 23:01 52981.xfire eclipse插件安装步骤,详细内容见:htt ... -
maven+jdk1.5编译部署工程(请尝试使用 -source 1.5 以启用注释)问题说明
2009-08-12 22:58 42781.接上文|maven部署web工 ... -
spring+xfire实现webservice简单例子
2009-06-04 20:29 15332spring xfire是一种比较简单的webservcie方 ... -
webwork中richtexteditor标签图片上传配置和创建中文多级目录乱码问题解决
2009-04-21 02:14 22051.webwork中的rechtexteditor图片上传时在 ... -
webwork上传异常分析:getReader() or getInputStream() call
2008-08-06 01:16 2974在使用webwork-2.2.4.jar,xwork-1.2. ... -
webwork日期验证&Invalid field value for field Birthday
2008-07-18 00:54 57971.webwork源码分析: com.opensymphony ... -
解决webwork客户端验证提示信息重复多次显示问题
2008-07-18 00:41 15491.我们在使用webwork验证,可以分为两种情况讨论,下面提 ... -
ww.action标签在freemarker中的问题
2008-07-16 00:50 35871.问题描述: 在freemarke ... -
Freemarker标签说明及combobox支持问题解决方法
2008-07-11 17:45 5277FreeMarker template error! on l ... -
extremecomponents pdf 导出中文问题分析
2008-04-15 16:06 4026步骤一:准备工作 1.在 ...
相关推荐
HtmlParser学习笔记-- htmlparser简介 HtmlParser主要靠Node、AbstractNode和Tag来表达Html,因为Remark和Text相对简单,此处就将其忽略了。
META-INF/maven/org.htmlparser/htmlparser/pom.properties META-INF/maven/org.htmlparser/htmlparser/pom.xml org.htmlparser.Parser.class org.htmlparser.PrototypicalNodeFactory.class org.htmlparser.beans....
c#版htmlparser htmlparser.dll htmlparser源代码
说明了htmlparser2.0的相关事项,同时也给出了htmlparser2.0的api
htmlparser网络爬虫技术,通过关键字查询快速查找指定网站
HTMLParser.net源代码HTMLParser.net使用demo
htmlparser-1.2.1jar包下载htmlparser-1.2.1jar包下载
htmlparser.jar htmlparser教程
htmlparser2.0 htmlparser
htmlparser学习文档 api HTML Parser 是一个java 库文件 用来解析HTML文件 通常在信息抽取中被运用到 他拥有 filers ivsitors custom tags 。是一个快速高效健壮的包
HtmlParser源码及demo
HtmlParser和HttpClient学习资料,其中包括网络爬虫的源码和一些在网上找到的学习资料
HTMLParser HTML解析 HTMLParser HTML解析 HTMLParser HTML解析
我注意好多人都说没有org.htmlparser.Node和其他的一些.class文件,这里把下载后解压出来的5个jar包全部导入工程就可以引入所需的文件了
Winista.Htmlparser.net 源代码 本资料共包含以下附件: HtmlParser c#源码+demo.rar
关于用java写的htmlparser网页分析
Winista HtmlParser Winista HtmlParser Winista HtmlParser Winista HtmlParser
全面的介绍htmlparser技术的使用,从入门到实战,里面包含了代码示例!