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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

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


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℃
北偏东风
二级





















目录
相关文章
|
6月前
|
JavaScript 前端开发 Java
正则表达式深度解析:匹配任意字符串
【4月更文挑战第1天】
3270 0
|
3月前
|
数据采集 JavaScript 前端开发
Python 爬虫实战:抓取和解析网页数据
【8月更文挑战第31天】本文将引导你通过Python编写一个简单的网络爬虫,从网页中抓取并解析数据。我们将使用requests库获取网页内容,然后利用BeautifulSoup进行解析。通过本教程,你不仅能够学习到如何自动化地从网站收集信息,还能理解数据处理的基本概念。无论你是编程新手还是希望扩展你的技术工具箱,这篇文章都将为你提供有价值的见解。
|
3月前
|
数据采集 存储 JavaScript
构建你的首个Python网络爬虫:抓取、解析与存储数据
【8月更文挑战第31天】在数字时代的浪潮中,数据成为了新的石油。了解如何从互联网的海洋中提取有价值的信息,是每个技术爱好者的必备技能。本文将引导你通过Python编程语言,利用其强大的库支持,一步步构建出你自己的网络爬虫。我们将探索网页请求、内容解析和数据存储等关键环节,并附上代码示例,让你轻松入门网络数据采集的世界。
|
6月前
|
JavaScript 前端开发 Java
正则表达式深度解析:匹配制表符
【4月更文挑战第2天】
462 2
正则表达式深度解析:匹配制表符
|
6月前
|
数据处理
正则表达式详解:解析星号的含义
【4月更文挑战第3天】
842 1
正则表达式详解:解析星号的含义
|
6月前
|
Python
使用Python解析网页和正则表达式
使用Python解析网页涉及`requests`和`re`模块。首先导入这两个模块,然后用`requests.get()`发送HTTP请求获取URL内容。通过`.text`属性得到HTML文本。接着,利用正则表达式和`re.search()`匹配特定模式(如网页标题),并用`.group(1)`获取匹配数据。最后,对提取的信息进行处理,如打印标题。实际操作时,需根据需求调整正则表达式。
73 2
|
6月前
|
XML 存储 开发框架
c#教你网站数据轻松解析抓取,HtmlAgilityPack解析的奇妙之处
c#教你网站数据轻松解析抓取,HtmlAgilityPack解析的奇妙之处
217 0
|
6月前
|
监控 JavaScript 前端开发
|
5月前
|
数据库 Python
Python网络数据抓取(8):正则表达式
Python网络数据抓取(8):正则表达式
54 2
|
5月前
|
自然语言处理 JavaScript 前端开发
Python高级语法与正则表达式(二)
正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。

推荐镜像

更多