首先,我们新建一个类,存放天气信息
/*
* Created on 2005-3-8
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
package org.exoplatform.portlets.chinaweather.component;
/**
* @author Administrator
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public class Weather {
private String city;
private String state;
private String temperature;
private String time;
private String wind;
private String windpower;
private long UpdateTime;
/**
* @return
*/
public String getTemperature() {
return temperature;
}
/**
* @return
*/
public String getTime() {
return time;
}
/**
* @return
*/
public String getWind() {
return wind;
}
/**
* @return
*/
public String getWindpower() {
return windpower;
}
/**
* @param string
*/
public void setTemperature(String string) {
temperature = string;
}
/**
* @param string
*/
public void setTime(String string) {
time = string;
}
/**
* @param string
*/
public void setWind(String string) {
wind = string;
}
/**
* @param string
*/
public void setWindpower(String string) {
windpower = string;
}
/**
* @return
*/
public long getUpdateTime() {
return UpdateTime;
}
/**
* @param l
*/
public void setUpdateTime(long l) {
UpdateTime = l;
}
/**
* @return
*/
public String getState() {
return state;
}
/**
* @param string
*/
public void setState(String string) {
state = string;
}
/**
* @return
*/
public String getCity() {
return city;
}
/**
* @param string
*/
public void setCity(String string) {
city = string;
}
}
具体的解析代码为:
private Weather parserWeather() throws Exception {
Weather w = new Weather();
try {
//Parser parser =
// new Parser("file://localhost/I:/projects/query.html");
Parser parser =
new Parser("http://weather.news.sohu.com/query.php?city=镇江");
parser.setEncoding("GBK");
Node nodes[] = parser.extractAllNodesThatAre(TableTag.class);
TableTag table = (TableTag) nodes[3];
//temperature
StringNode[] stringNodes = table.digupStringNode("镇江");
StringNode name = stringNodes[0];
w.setCity(name.toPlainTextString());
CompositeTag td = (CompositeTag) name.getParent();
CompositeTag tr = (CompositeTag) td.getParent();
int columnNo = tr.findPositionOf(td);
TableColumn nextColumn = (TableColumn) tr.childAt(5);
Node expectedName = nextColumn.childAt(0);
Node expectedName2 = nextColumn.childAt(2);
//System.out.println(expectedName.getText());
//System.out.println(expectedName2.getText());
w.setState(expectedName.getText());
w.setTemperature(expectedName2.getText());
//time
stringNodes = table.digupStringNode("时间");
name = stringNodes[0];
//System.out.println(name.toPlainTextString());
String time =
name
.toPlainTextString()
.substring(4, name.toPlainTextString().length())
.trim();
//System.out.println(time);
w.setTime(time);
//wind
stringNodes = table.digupStringNode("风向");
name = stringNodes[0];
//System.out.println(name.toPlainTextString());
String wind =
name
.toPlainTextString()
.substring(4, name.toPlainTextString().length())
.trim();
//System.out.println(wind);
w.setWind(wind);
//wind power
stringNodes = table.digupStringNode("风力");
name = stringNodes[0];
//System.out.println(name.toPlainTextString());
String windpower =
name
.toPlainTextString()
.substring(4, name.toPlainTextString().length())
.trim();
//System.out.println(windpower);
w.setWindpower(windpower);
w.setUpdateTime(System.currentTimeMillis());
} catch (ParserException e) {
e.printStackTrace();
}
return w;
}
解析出来的代码必须做缓存处理,
private static long TIME_TO_LIVE = 1000 * 60 * 60 * 12;
private Weather loadWeather() throws Exception {
Weather weather = weather = (Weather) cache_.get("chinaweather");
long currentTime = System.currentTimeMillis();
if (weather != null
&& currentTime < (weather.getUpdateTime() + TIME_TO_LIVE)) {
cache_.remove("chinaweather");
weather = null;
}
if (weather == null) {
synchronized (cache_) {
weather = parserWeather();
cache_.put("chinaweather", weather);
}
}
return weather;
}
分享到:
相关推荐
标题 "基于Htmlparser的天气预报程序" 暗示了我们正在讨论一个使用特定解析库(Htmlparser)的Java应用程序,其主要功能是获取并显示不同城市的天气预报信息。Htmlparser是一个Java库,用于解析HTML文档,提取所需...
3. **Parser对象**:使用HtmlParser库,我们创建一个`Parser`对象,传入HTTP连接获取的输入流。这将构建一个表示整个HTML文档的解析树。 4. **节点过滤器**:为了从HTML文档中提取特定的数据,我们需要定义过滤规则...
HTMLParser 使用举例 HTMLParser 是一个开源的类库,用于解析 Web 页面。它有两种主要使用方式:extraction 和 transformation。前者用于从网页中萃取出需要的内容,后者用于把 Web 页面中的内容转换为需要的格式。...
本项目名为"HTMLParser.net源代码HTMLParser.net使用demo",显然是一个包含示例代码的压缩包,用于展示如何在实际应用中使用HTMLParser.net。 HTMLParser.net的核心功能包括: 1. **HTML解析**:它能够将HTML字符...
使用htmlparser制作的网页爬虫例题
### JAVA HtmlParser 使用实例详解 在Java开发过程中,解析HTML文档是一项常见的需求,尤其是在处理Web爬虫、数据抓取等应用场景时。`HtmlParser`库为开发者提供了一种简便的方式来解析HTML文档,并从中提取所需的...
在本项目中,Portlet天气预报可能通过portlet API获取用户的地理位置信息,或者接收用户定制的查询参数,然后动态地生成和更新天气预报内容。portlet还支持异步操作,使得用户无需等待整个页面刷新就能看到更新的...
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....
本篇将详细阐述HTMLParser的使用方法、功能以及提供的相关资源。 首先,`HTMLParser-2.0-SNAPSHOT-doc.zip`包含了HTMLParser的使用文档。这份文档通常包含API参考、教程、示例代码和用户指南,是学习和理解...
在使用Winista.HtmlParser之前,你需要先将其添加到你的C#项目中。如果你有`htmlparser源代码(bin下有所用dll).rar`文件,你可以从中解压出dll文件并将其添加为项目的引用。在Visual Studio中,右键点击项目,选择...
本文将详细讲解如何运用Java语言结合HtmlParser库来构建一个基础的网络爬虫,以便从网页中获取所需信息。 首先,HtmlParser是一个开源的Java库,专门用于解析HTML文档。它提供了强大的DOM(文档对象模型)接口,...
HTMLParser提供了多种方法来访问和操作解析树,比如`parseContent()`用于获取整个文档的节点列表,`visitAllNodesWith()`可以遍历所有节点并应用自定义的访问器,`getFirstNodeWithTag()`用于找到第一个特定标签的...
实际应用中,HTMLParser常与网络请求库(如Apache HttpClient或OkHttp)结合使用,以获取远程网页内容,再进行后续的解析操作。同时,为了提高代码的可维护性和复用性,建议封装自己的数据抓取和处理模块。
使用HTMLParser,我们可以解析网页内容,提取所需信息,如文章标题、链接、图片等。以下是一些核心概念和步骤: 1. **创建自定义解析器**: 首先,我们需要继承Python的`HTMLParser`类,并重写其方法,如`handle_...
`htmlparser.dll`是这个库的动态链接库文件,它包含了编译好的类和方法,可以直接在C#项目中引用以使用HTMLParser的功能。在C#项目中,我们可以通过添加对dll的引用来调用库中的方法,比如解析HTML字符串、查找特定...
1. **例子.txt**:这是一个包含使用HTMLParser库的实际示例代码的文本文件。开发者可以通过阅读和运行这些示例来快速理解如何在自己的项目中应用HTMLParser。 2. **HTMLParser-2.0-SNAPSHOT-doc.zip**:这是...
2. **DOM树构建**:HTMLParser能够构建一个基于DOM(Document Object Model)的树形结构,使开发者可以像操作XML一样操作HTML文档,通过节点遍历和查询来获取所需信息。 3. **错误处理**:HTMLParser具备容错能力,...
使用HtmlParser时,注意保持解析逻辑的简洁,避免过度复杂的事件处理器。对于大型HTML文档,优先考虑使用SAX-like模式以节省内存。同时,确保充分测试,尤其是在处理不同来源和结构的HTML时。 通过深入理解和熟练...