- 浏览: 196931 次
- 性别:
- 来自: 上海
-
最新评论
-
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 2358主要原因是fck中的编(utf-8)码和本地的编码(gbk)环 ... -
extremecomponents补充说明
2012-04-20 16:49 3383<%@ taglib uri="/WEB-IN ... -
Hibernate count如何映射?HQL别名字段问题?
2012-03-01 11:43 8964问:hibernate, select name, count ... -
Hibernate入门级添删改查核心代码
2012-02-16 18:01 1195public static void main(String[ ... -
XML request error: Internal Server Error (500)解决方法
2011-08-29 17:42 5632XML request error: Internal Ser ... -
FCKeditor fileupload Error on file upload.Error number:203分析解决
2009-10-28 14:59 3089问题描述:还发现了个问题,这个编辑器的上传功能和webwork ... -
xfire传入传出自定义类型和集合类型-webservice分析
2009-08-12 23:01 53961.xfire eclipse插件安装步骤,详细内容见:htt ... -
maven+jdk1.5编译部署工程(请尝试使用 -source 1.5 以启用注释)问题说明
2009-08-12 22:58 43641.接上文|maven部署web工 ... -
spring+xfire实现webservice简单例子
2009-06-04 20:29 15404spring xfire是一种比较简单的webservcie方 ... -
webwork中richtexteditor标签图片上传配置和创建中文多级目录乱码问题解决
2009-04-21 02:14 22641.webwork中的rechtexteditor图片上传时在 ... -
webwork上传异常分析:getReader() or getInputStream() call
2008-08-06 01:16 3044在使用webwork-2.2.4.jar,xwork-1.2. ... -
webwork日期验证&Invalid field value for field Birthday
2008-07-18 00:54 58521.webwork源码分析: com.opensymphony ... -
解决webwork客户端验证提示信息重复多次显示问题
2008-07-18 00:41 16161.我们在使用webwork验证,可以分为两种情况讨论,下面提 ... -
ww.action标签在freemarker中的问题
2008-07-16 00:50 36291.问题描述: 在freemarke ... -
Freemarker标签说明及combobox支持问题解决方法
2008-07-11 17:45 5332FreeMarker template error! on l ... -
extremecomponents pdf 导出中文问题分析
2008-04-15 16:06 4077步骤一:准备工作 1.在 ...
相关推荐
总结来说,HtmlParser c#源码提供了处理HTML文档的能力,包括解析、查询、提取信息等功能。通过学习源码和示例,开发者可以更好地理解和应用这个工具,同时也可以根据需要对其进行定制,以适应不同的项目需求。
5. **API设计**:HTMLParser的API设计简洁明了,易于学习和使用。开发者可以通过`HTMLDocument`、`Tag`、`Attribute`等类来操作HTML元素,通过`Handler`接口来定义自定义的事件处理器。 6. **兼容性**:HTMLParser ...
总结来说,Winista.Htmlparser是一个强大且易用的C# HTML解析库,提供了丰富的API和事件机制,使得处理HTML变得简单。通过深入研究其源码,开发者可以更好地理解HTML解析的过程,提高程序的效率和准确性。配合提供的...
- "HtmlParser学习笔记总结.doc":对学习过程的总结,可能包含常见问题解答和最佳实践。 - "yanghaisheng.platform.htmlparser.rar":可能包含一个示例平台或项目,供用户实践和参考。 总之,HtmlParser是Java中一...
9. **学习与实践**:要深入理解和使用HTMLParser,需要掌握基本的HTML语法,熟悉DOM操作,以及理解如何通过编程语言(如Java)与解析器进行交互。实践是提高的关键,可以尝试解析一些实际的HTML文档,提取特定信息,...
总结来说,HTMLParser是一个强大且灵活的HTML解析工具,适合处理各种HTML文档,特别是当需要在Java环境中进行HTML内容的解析和处理时,它提供了一种高效且无依赖的解决方案。通过阅读源码、文档以及使用提供的例子,...
在众多的HTML解析工具中,`htmlParser`脱颖而出,以其易用性和高效性成为许多开发者的选择。本篇文章将深入探讨`htmlParser`这一...通过学习和熟练掌握`htmlParser`,开发者可以更高效地完成网页数据的抓取和处理任务。
总结来说,C# HTMLParser是一个强大的工具,可以帮助开发者轻松地解析和操作HTML文档。通过熟悉它的API和方法,你可以有效地提取和处理网页中的信息。结合实际项目需求,不断探索和实践,你会发现HTMLParser在处理...
HTMLParser教程是一个面向开发者的学习资源,它主要涵盖了如何在编程中解析和处理HTML文档的核心概念。这个教程可能包括了Python的HTMLParser库的使用,也可能涉及其他编程语言中的类似库,如Java的jsoup或...
总结来说,HTMLParser爬取气象信息的实例展示了如何利用Python的内置解析器来提取网页中的特定信息。通过定义自定义的事件处理器,我们可以根据需要处理HTML文档中的元素,从而有效地获取和分析数据。结合其他工具,...
总结,HTMLParser是一个强大的HTML处理工具,其简洁的API和事件驱动模型使得处理HTML文档变得轻松。通过熟练掌握HTMLParser,开发者可以更高效地解析、提取和操作HTML数据,从而在Web开发中实现更多功能。
标题“由新水浒到htmlparser的一次运用”暗示了这篇...同时,压缩包中的"HTMLParser+API.CHM"文件很可能是HTMLParser的API文档,包含了关于库的所有函数、方法和类的详细说明,是学习和使用HTMLParser的重要参考资料。
总结来说,Winista.Htmlparser是一个针对C#开发者的高效网页解析工具,它提供了简单易用的API、优秀的性能以及丰富的自定义可能性。无论你是初次接触网页解析,还是有经验的开发者,这个类库都能帮助你轻松地处理...
总结来说,"htmlparser:cpp htmlparser实现"是一个专注于在C++中解析HTML文档的库,它涉及到了HTML语法规则的理解、解析器设计模式的运用、内存管理、事件驱动编程、DOM树构建、错误处理、性能优化以及库的可扩展性...
总结,"java 新浪网易搜狐新闻抓取源码"项目展示了如何使用Java和HTMLParser库来实现新闻数据的抓取和处理。通过学习和实践这样的项目,开发者不仅可以掌握网页抓取的基本技能,还能深入理解HTTP协议、HTML解析以及...
- 对整个学习过程的回顾与总结,强调实践的重要性。 以上内容涵盖了Python 2.7学习文档中的主要知识点,为初学者提供了一个全面的学习框架。通过系统学习这些内容,不仅可以掌握Python的基本语法,还能深入理解其...
根据提供的文档内容,我们可以总结出以下关键知识点,这些知识点主要围绕Lucene+Solr以及HtmlParser在正文提取方面的应用。 ### HtmlParser与ContentExtractor **HtmlParser简介:** HtmlParser是一个用于解析HTML...
### Python语法总结 #### 1. Python 3 ##### 1.1 数据类型 Python 提供了多种内置的数据类型,这些类型是理解任何 Python 程序的基础。 ###### 1.1.1 整数,浮点数,字符串,布尔值(True、False),空值(None...
刚刚学习Python, 边看廖神的教程边想着搞个离线版,用requests+beautifulsoup抓的。仅供学习用 Python教程 Python简介 安装Python Python解释器 第一个Python程序 使用文本编辑器 Python代码运行助手 ...期末总结
通过查看和学习这个项目的源码,你可以了解到如何将WebMagic应用于实际的爬虫工程,如何组织项目结构,以及如何处理数据抓取过程中的各种问题,如反爬机制、数据清洗和存储等。 总结来说,"基于 webmagic 的 Java ...