使用正则表达式和REPLACE,SPLIT获得7,8,9天单个城市天气情况抓取解析代码

代码写的很凌乱,正则用得也不是很好,不过还是实现了功能,贴出代码

package com.zzk.cn;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TestSpider {

	public static void main(String[] args) {
		URL url = null;
		URLConnection conn = null;
		InputStream in = null;
		InputStreamReader isr = null;
		BufferedReader br = null;
		try {
			url = new URL("http://www.haotq.com/d_anqing.html");
			conn = url.openConnection();
			in = conn.getInputStream();
			isr = new InputStreamReader(in);
			br = new BufferedReader(isr);
			String line = "";
			String info="";
			while (null != (line = br.readLine())) {
				//System.out.println(line);
				info+=line;
			}

			//System.out.println(info);
			Pattern p=Pattern.compile("div\\sid=.weather_day_brief.*?</div>");//正则获取网页大致信息

			Matcher m=p.matcher(info);
			String s1="";
	    	while(m.find()) {
	    		s1=m.group();
	    		//System.out.println(s1);
	    	}

	    	String s2="";
	        Pattern p1=Pattern.compile("<br>.*<script");//正则根据br获取7,8,9天的天气信息
	    	//Pattern p1=Pattern.compile("<(/?\\s?br\\b)>");
	    	Matcher m1=p1.matcher(s1);
	    	while(m1.find()) {
	    		//System.out.println(m1.group());
	    	    s2=m1.group();
	    	}

	    	String[] sPlit=s2.split("<br>"); 

	    	int i=s2.length();
	    		String t1="";
	    		String t2="";
	    		String t3="";
	    		t1=sPlit[7];
	    		t2=sPlit[8];
	    		t3=sPlit[9];
	    		System.out.println(t1);//7天后天气
	    		System.out.println(t2);//8天后天气
	    		System.out.println(t3);//9天后天气

	    		//天气
	    	String[] sPlit1=t1.split(" ");
	    	int i1=t1.length();
	    	System.out.println(sPlit1[1]);//白天阵雨,夜间阵雨,
	    	System.out.println(sPlit1[2]);//气温2℃~9℃
	    	System.out.println(sPlit1[3]);//北偏东风 二级

	    	String w1="";
	    	String w2="";
	    	String w3="";
	    	w1=sPlit1[1];
	    	String[] sPlit4=w1.split(",");
	    	String weather_title71=sPlit4[0].replace("白天", "");//第七天的白天的字段
	    	String weather_title72=sPlit4[1].replace("夜间", "");//第七天的夜晚的字段
            System.out.println(weather_title71);//第七天的白天天气情况
            System.out.println(weather_title72);//第七天的夜晚天气情况

	    	w2=sPlit1[2];
	    	String[] sPlit5=w2.split("~");
	    	String weather_temp71=sPlit5[0].replace("气温", "");
	    	String weather_temp72=sPlit5[1].replace("~", "").replace(",", "");
	    	System.out.println(weather_temp71);//第七天的最低气温
	    	System.out.println(weather_temp72);//第七天的最高气温

	    	w3=sPlit1[3];
	    	String[] sPlit6=w3.split(" ");
	    	String weather_winddirection71=sPlit6[0];
	    	String weather_windpower71=sPlit6[1];
	    	System.out.println(weather_winddirection71);//第七天的风向
	    	System.out.println(weather_windpower71);//第七天的风力

	    	String[] sPlit2=t2.split(" ");
	    	int i2=t2.length();

	    	String w4="";
	    	String w5="";
	    	String w6="";
	    	w4=sPlit2[1];
	    	String[] sPlit7=w4.split(",");
	    	String weather_title81=sPlit7[0].replace("白天", "");//第八天的白天的字段
	    	String weather_title82=sPlit7[1].replace("夜间", "");//第八天的夜晚的字段
            System.out.println(weather_title81);//第八天的白天天气情况
            System.out.println(weather_title82);//第八天的夜晚天气情况

	    	w5=sPlit2[2];
	    	String[] sPlit8=w5.split("~");
	    	String weather_temp81=sPlit8[0].replace("气温", "");
	    	String weather_temp82=sPlit8[1].replace("~", "").replace(",", "");
	    	System.out.println(weather_temp81);//第八天的最低气温
	    	System.out.println(weather_temp82);//第八天的最高气温

	    	w6=sPlit2[3];
	    	String[] sPlit9=w6.split(" ");
	    	String weather_winddirection81=sPlit9[0];
	    	String weather_windpower81=sPlit9[1];
	    	System.out.println(weather_winddirection81);//第八天的风向
	    	System.out.println(weather_windpower81);//第八天的风力

	    	String[] sPlit3=t3.split(" ");
	    	int i3=t3.length();
	    	System.out.println(sPlit3[1]);
	    	System.out.println(sPlit3[2]);
	    	System.out.println(sPlit3[3]);

	    	String w7="";
	    	String w8="";
	    	String w9="";
	    	w7=sPlit3[1];
	    	String[] sPlit10=w7.split(",");
	    	String weather_title91=sPlit10[0].replace("白天", "");//第九天的白天的字段
	    	String weather_title92=sPlit10[1].replace("夜间", "");//第九天的夜晚的字段
            System.out.println(weather_title91);//第九天的白天天气情况
            System.out.println(weather_title92);//第九天的夜晚天气情况

	    	w8=sPlit3[2];
	    	String[] sPlit11=w8.split("~");
	    	String weather_temp91=sPlit11[0].replace("气温", "");
	    	String weather_temp92=sPlit11[1].replace("~", "").replace(",", "");
	    	System.out.println(weather_temp91);//第九天的最低气温
	    	System.out.println(weather_temp92);//第九天的最高气温

	    	w9=sPlit3[3];
	    	String[] sPlit12=w9.split(" ");
	    	String weather_winddirection91=sPlit12[0];
	    	String weather_windpower91=sPlit12[1].replace("<script", "");
	    	System.out.println(weather_winddirection91);//第九天的风向
	    	System.out.println(weather_windpower91);//第九天的风力

		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (null != br) {
					br.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
			br = null;

			try {
				if (null != isr) {
					isr.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
			isr = null;

			try {
				if (null != in) {
					in.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
			in = null;
		}

	}
}

输出:

7天后安庆天气:&nbsp;白天阵雨,夜间阵雨,&nbsp;气温2℃~9℃,&nbsp;北偏东风 二级
8天后安庆天气:&nbsp;白天阵雨,夜间阵雨,&nbsp;气温-1℃~7℃,&nbsp;北偏东风 二级
9天后安庆天气:&nbsp;白天局部多云,夜间局部多云,&nbsp;气温-1℃~8℃,&nbsp;北偏东风 二级<script
白天阵雨,夜间阵雨,
气温2℃~9℃,
北偏东风 二级
阵雨
阵雨
2℃
9℃
北偏东风
二级
阵雨
阵雨
-1℃
7℃
北偏东风
二级
白天局部多云,夜间局部多云,
气温-1℃~8℃,
北偏东风 二级<script
局部多云
局部多云
-1℃
8℃
北偏东风
二级

时间: 2024-12-31 11:42:04

使用正则表达式和REPLACE,SPLIT获得7,8,9天单个城市天气情况抓取解析代码的相关文章

JavaScript正则表达式小结(test|match|search|replace|split|exec)_javascript技巧

学JavaScript正则的好文一篇:http://www.cainiao8.com/web/js_note/js_regular_expression.html test:测试string是否包含有匹配结果,包含返回true,不包含返回false. <script type="text/javascript"> var str = "bbs.byr.cn"; var reg = /b/; var ret = reg.test(str); alert(r

js中test exec match search replace split用法

学习最常用的 test exec match search  replace  split 6个方法 定义和用法 test() 方法用于检测一个字符串是否匹配某个模式. 语法 RegExpObject.test(string)参数 描述 string 必需.要检测的字符串. 返回值 如果字符串 string 中含有与 RegExpObject 匹配的文本,则返回 true,否则返回 false. 说明 调用 RegExp 对象 r 的 test() 方法,并为它传递字符串 s,与这个表示式是等价

javascript正则表达式使用replace()替换手机号的方法_javascript技巧

本文实例讲述了javascript正则表达式使用replace()替换手机号的方法.分享给大家供大家参考. 具体实现方法如下: 复制代码 代码如下: <html> <head> <title>javascript正则表达式使用replace()替换手机号</title> <meta http-equiv="content-type" content="text/html;charset=utf-8" />

c# 正则表达式对网页进行内容抓取

原文 c# 正则表达式对网页进行内容抓取 搜索引擎中一个比较重要的环节就是从网页中抽取出有效内容.简单来说,就是吧HTML文本中的HTML标记去掉,留下我们用IE等浏览器打开HTML文档看到的部分(我们这里不考虑图片). 将HTML文本中的标记分为:注释,script ,style,以及其他标记分别去掉: 1.去注释,正则为: output = Regex.Replace(input, @"<!--[^-]*-->", string.Empty, RegexOptions.

httpunit-java 正则表达式 抓取2行特定中文词语中的一段中文

问题描述 java 正则表达式 抓取2行特定中文词语中的一段中文 老师让我们做一个能从汉字网站http://hanyu.iciba.com上抓取汉字信息的爬虫,现在遇到了一个难题,下面是我用httpunit解析出来的某个字的部分信息. 龙 繁体 龍 笔画 5笔 造字法 原为形声 部首 龙部 五笔 DXV 结构 单一结构 比如说现在我要截取这个字的部首,也就是部首和五笔这2行字中间的那段字,那正则表达式是不是就是"部首.五笔",但是这样做了之后什么也没有截取出来,能告诉我怎么写这个表达式

笨笨图片批量抓取下载 V0.2 beta[C# | WinForm | 正则表达式 | HttpWebRequest | Async异步编程]

前言      首次在博客园首页发布文章,一直把自己的文章定位在新手区,也一直这样认为自己的.这段时间看博客园首页挺多的,说实在的有些文章很一般但是得到更多朋友以及高手的指点,所以鼓起勇气把自己花了几天时间改版的图片下载器贴上来,希望能在程序的性能上以及适用上得到更多的宝贵的建议!先谢谢每位看客赏光了 : )   感谢      MSDN     MSDN上异步网络编程的例子是我0.2版的核心所在   运行环境      .NET Framework2.0   开发工具      Microso

python正则表达式抓取成语网站_python

1.首先找到一个在线成语网站 2.查看网页结构,定义正则式 看一下要抓的成语的标签有什么特点,查看源码,可以发现要抓的成语都在<a>标签中,如:<a href="/cy0/93.html">安如磐石</a>,成语事实上就是一个瞄文本,不同成语指向的链接不同,其实也就"/cy0/93.html"中的数字不同,所以正则式里匹配两次数字就行了,定义正则式 reg =   "<a href=\"/cy(\d+)/

socket-c语言正则表达式抓取网站的&amp;amp;lt;title&amp;amp;gt;

问题描述 c语言正则表达式抓取网站的<title> 本程序的功能是搜索网站的 字段的值 遗憾的是并不通用:ps:我也不知道为什么失败 问题1:正则表达式或运算消除标签大小写后匹配不到字符串 问题2:正则表达式实现零宽断言后发现匹配不到字符串 问题3:在科大官网上测试 成功 在其他网站可能会失败 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h

PHP正则表达式抓取某个标签的特定属性值的方法_正则表达式

php正则学了一些日子,抓了一些网站的数据,从而发现每次都自己写正则重新抓很麻烦,于是就想写一个抓取特定标签具有特定属性值的接口通用,直接上代码. //$html-被查找的字符串 $tag-被查找的标签 $attr-被查找的属性名 $value-被查找的属性值 function get_tag_data($html,$tag,$attr,$value){ $regex = "/<$tag.*?$attr=\".*?$value.*?\".*?>(.*?)<\