`
wmswu
  • 浏览: 106385 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

补上中国天气网城市编码抓取代码 很一般的抓取代码.....嘿嘿

阅读更多
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;

/***
 * 抓取天气网 城市编码
 * @author wu
 *
 */
public class GetWeatherCode {

	/**
	 * 通过域名或IP地址取得网站数据
	 * 
	 * @param strUrl
	 *            example:http://www.baidu.com
	 * @return
	 */
	public String getContent(String strUrl) {
		try {

			URL url = new URL(strUrl);
			System.out.println(strUrl);
			URLConnection urlconn = url.openConnection(); // 试图连接并取得返回状态码
			urlconn.connect();
			HttpURLConnection httpConn = (HttpURLConnection) urlconn;
			httpConn = (HttpURLConnection) url.openConnection();
			HttpURLConnection.setFollowRedirects(true);
			httpConn.setRequestMethod("GET");
			//模拟浏览器
			httpConn.setRequestProperty("User-Agent","Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2 (.NET CLR 3.5.30729)");
			httpConn.setConnectTimeout(60000);//超时设置...
			int httpResult = httpConn.getResponseCode();// 获得相应代码
			if (httpResult != HttpURLConnection.HTTP_OK) { // 不等于HTTP_OK说明连接不成功
				System.out.println("fail连接失败!!!");
				return null;
			} else {
				InputStream ins = urlconn.getInputStream();
				BufferedReader br = new BufferedReader(new InputStreamReader(ins));
				String s = "";
				StringBuffer sb = new StringBuffer("");
				while ((s = br.readLine()) != null) {
					sb.append(s + "\r\n");
				}
				br.close();
				return sb.toString();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
	/**
	 * 踢掉 json格式
	 * @param str
	 * @return
	 */
	private String rplaceCode(String str){
		if(str != null){
			str = str.replaceAll("\\{", "");
			str = str.replaceAll("\\}", "");
			str = str.replaceAll("\\\"", "");
			str = str.replaceAll(",", "\n");
			str = str.replaceAll(":", "    ");
			return str;
		}
		return null;
	}
	/**
	 * 踢掉json格式
	 * @param str
	 * @return
	 */
	private String outCode(String str){
		if(str != null){
			str = str.replaceAll("\\{", "");
			str = str.replaceAll("\\}", "");
			str = str.replaceAll("\\\"", "");
			str = str.substring(0,str.indexOf(":"));
			return str;
		}
		return null;
	}

	/**
	 * 最初实现 输出不够好 所以不用了...
	 */
	@Deprecated
	public void oneImplements(){
		ArrayList<String> arry1 = new ArrayList<String>();
		ArrayList<String> arry2 = new ArrayList<String>();
		
		for (int i = 10101; i <= 10134; i++) {
			String rs = getContent("http://www.weather.com.cn/data/city3jdata/provshi/" + i + ".html");
			if (rs != null) {
				if(!rs.contains("<")){
					System.out.println("市级:\n" + "  " + rs);
					arry1.add("市级:\n" +rs);
					arry2.add("市级:\n" +rs);
					String[] shij = rs.split(",");
					int ct = shij.length;
					if (ct > 0) {
						int start = i * 100;
						int end = i * 100 + ct;
						for (int j = start; j <= end; j++) {
	
							String rs2 = getContent("http://www.weather.com.cn/data/city3jdata/station/" + j + ".html");
							if (rs2 != null && !rs2.contains("<")) {
								String jieguo = "  市级【" + shij[(j-i*100-1)>0?(j-i*100-1):0] + "】以下的:\n" + rs2;
								arry1.add(jieguo+"\n http://www.weather.com.cn/data/city3jdata/station/" + j + ".html");
								arry2.add(jieguo);
								System.out.println(jieguo);
								System.out.println("");
							}
						}
					}
				}
			}

		}
		System.out.println("带地址的:");
		for (String jg : arry1) {
			System.out.println(rplaceCode(jg));
		}
		System.out.println("不带地址的:");
		for (String jg : arry2) {
			System.out.println(rplaceCode(jg));
		}
	}
	public static void main(String args[]) {
		// // 具体使用方法
		// 省级{"10101":"北京","10102":"上海","10103":"天津","10104":"重庆","10105":"黑龙江","10106":"吉林","10107":"辽宁","10108":"内蒙古","10109":"河北","10110":"山西","10111":"陕西","10112":"山东","10113":"新疆","10114":"西藏","10115":"青海","10116":"甘肃","10117":"宁夏","10118":"河南","10119":"江苏","10120":"湖北","10121":"浙江","10122":"安徽","10123":"福建","10124":"江西","10125":"湖南","10126":"贵州","10127":"四川","10128":"广东","10129":"云南","10130":"广西","10131":"海南","10132":"香港","10133":"澳门","10134":"台湾"}
		GetWeatherCode ou = new GetWeatherCode();
		ArrayList<String> arry1 = new ArrayList<String>();//带地址的
		ArrayList<String> arry2 = new ArrayList<String>();//不带地址的
		//firebug 分析出的 首要城市请求地址
		String sourceUrl = "http://www.weather.com.cn/data/city3jdata/china.html";
		
		String src = ou.getContent(sourceUrl);//读取内容
		if(src != null && !src.contains("<")){
			String[] sheng = src.split(",");//省级分割

			for (String sh : sheng) {
				String outCode = ou.outCode(sh);
			    String rs = ou.getContent("http://www.weather.com.cn/data/city3jdata/provshi/" + outCode + ".html");
				if (rs != null) {
					if (!rs.contains("<")) {
						arry1.add("市级:"+sh+"\n" + rs);
						arry2.add("市级:"+sh+"\n" + rs);
						String[] shij = rs.split(",");//市级分割
						for (String sj : shij) {
							String shjiOutCode = ou.outCode(sj);
							String rs2 = ou.getContent("http://www.weather.com.cn/data/city3jdata/station/" + (outCode + shjiOutCode) + ".html");
							if (rs2 != null && !rs2.contains("<")) {
								String jieguo = "  市级【" + sj + "】以下的:\n" + rs2;
								arry1.add(jieguo + "http://www.weather.com.cn/data/city3jdata/station/" + (outCode + shjiOutCode) + ".html");
								arry2.add(jieguo);
							}
						}
					}
				}

			}
		}
		System.out.println("带地址的:");
		for (String jg : arry1) {
			System.out.println(ou.rplaceCode(jg));
		}
		System.out.println("不带地址的:");
		for (String jg : arry2) {
			System.out.println(ou.rplaceCode(jg));
		}
		//简单测试
		//System.out.println(ou.rplaceCode("{\"10101\":\"北京\",\"10102\":\"上海\",\"10103\":\"天津\",\"10104\":\"重庆\",\"10105\":\"黑龙江\",\"10106\":\"吉林\",\"10107\":\"辽宁\",\"10108\":\"内蒙古\",\"10109\":\"河北\",\"10110\":\"山西\",\"10111\":\"陕西\",\"10112\":\"山东\",\"10113\":\"新疆\",\"10114\":\"西藏\",\"10115\":\"青海\",\"10116\":\"甘肃\",\"10117\":\"宁夏\",\"10118\":\"河南\",\"10119\":\"江苏\",\"10120\":\"湖北\",\"10121\":\"浙江\",\"10122\":\"安徽\",\"10123\":\"福建\",\"10124\":\"江西\",\"10125\":\"湖南\",\"10126\":\"贵州\",\"10127\":\"四川\",\"10128\":\"广东\",\"10129\":\"云南\",\"10130\":\"广西\",\"10131\":\"海南\",\"10132\":\"香港\",\"10133\":\"澳门\",\"10134\":\"台湾\"}"));

	}
}

 

2
1
分享到:
评论

相关推荐

    python爬虫抓取网页数据大作业项目代码.zip

    python爬虫抓取网页数据大作业项目代码.zippython爬虫抓取网页数据大作业项目代码.zippython爬虫抓取网页数据大作业项目代码.zippython爬虫抓取网页数据大作业项目代码.zippython爬虫抓取网页数据大作业项目代码....

    城市天气预报编码.xlsx

    天气预报,城市编码,包含全国所有的城市编码,大概有三千二百个,可用于爬虫抓取自己想要的城市天气状况,

    百度地图 全国所有城市代码

    标题 "百度地图 全国所有城市代码" 指的是一个包含了中国所有城市在百度地图平台上的特定编码的文本文件。这些代码是百度地图服务为了标识和管理全国各地城市的一个内部标识符,通常用于地理定位、路线规划和其他...

    jsp网页抓取天气预报源代码

    "jsp网页抓取天气预报源代码" 这个标题表明这是一个与Java Server Pages(JSP)相关的项目,目标是实现从网页上抓取天气预报信息的功能。JSP是一种动态网页技术,允许开发者在HTML页面中嵌入Java代码来处理服务器端...

    点评网美食数据抓取代码--java 实现

    在IT行业中,数据抓取是一项重要的技能,尤其是在大数据...以上是关于“点评网美食数据抓取代码--java 实现”项目中的主要知识点。通过实践这些技术,不仅可以掌握网络爬虫的开发,还能提升Java编程和数据处理能力。

    抓取中国招标网数据源码

    标题中的“抓取中国招标网数据源码”指的是一个C#编程项目,目的是自动化地从中国招标网这个网站上获取相关的招标信息。这样的程序通常利用网络爬虫技术,通过解析HTML网页来提取需要的数据。 首先,我们要理解数据...

    VC 抓取指定网页的源代码.rar

    VC 抓取指定网页的源代码,抓取远程指定URL地址中包括的文件,并显示出网页源代码,实现了类似“采集”的功能,将远程网页的内容先读取出来,然后显示,由此可扩展成一个采集模块,添加过滤功能即可,要用到字符串...

    抓取城市间距离.rar

    描述进一步说明了项目的内容:利用Excel表格提供的城市列表,从某个网站上自动化地抓取这些城市之间的公路路程数据。密码提示表明这可能是一个受保护的代码或程序,使用者需要输入特定的用户名作为密码才能访问。 ...

    抓取腾讯首页天气预报.rar

    “j.soso.weatherV1.5.2.js”和“weather.js”可能是腾讯网站上的JavaScript源代码,这些文件可能包含了动态加载天气数据的函数和API调用。 下面是基于这些文件可能涉及的IT知识点的详细解释: 1. **网络爬虫**:...

    中国气象局接口城市代码及抓取源码

    rar里面含有中国气象局城市代码与城市之间关系映射的SQL文件及相关类容抓取的java源码,源码中使用到的是sqlite数据库。

    VB6.0抓取网络数据包代码.rar

    VB6.0演示如何抓取网络数据包,截获网络包的例子,原型是一个网络原始数据包嗅探器的修正版代码,程序基于winsock API,支持TCP,UDP和ICMP三种协议数据的抓取,支持记录到文件等操作。抓取的数据中包括了IP 报头、...

    简单的数据抓取工具源代码

    这个“简单的数据抓取工具源代码”很可能提供了实现这一目标的基础框架。在IT领域,数据抓取是数据分析、市场研究、新闻监测等众多应用的重要一环。 数据抓取通常涉及到以下几个关键知识点: 1. **HTTP/HTTPS协议*...

    js跳转不影响蜘蛛抓取.rar

    然而,传统上,搜索引擎爬虫并不总是能够执行网页上的JS代码,因此它们可能无法识别通过JS进行的页面重定向。这可能导致爬虫无法到达实际内容所在的页面,从而影响网站的SEO(搜索引擎优化)。 为了解决这个问题,...

    抓取网页源代码

    总的来说,抓取网页源代码是一项基础但关键的网络编程任务,它涉及网络协议、数据编码和错误处理等多个方面。通过实践和理解这样的程序,开发者可以进一步掌握网络通信的原理,并将其应用到更复杂的网络应用中,如...

    matlab爬虫抓取高铁信息数据

    抓取G529数据中...完成! 抓取G1204数据中...完成! 抓取G279数据中...完成! 抓取G276数据中...完成! 抓取G1022数据中...完成! 抓取G280数据中...完成! 抓取G1206数据中...完成! 抓取G1224数据中...完成! 抓取G818数据...

    DXGI高效抓取c++源代码.zip

    DXGI(DirectX Graphics Infrastructure)是Microsoft DirectX 10及更高版本中的一部分,它提供了一组接口和功能,用于...此外,这个示例代码也是一个很好的学习资源,可以帮助开发者提升在DirectX和C++编程上的技能。

    海思Hi35xx抓取编码后的图片

    在开发过程中,为了调试和优化代码,有时我们需要抓取编码后的图片进行分析。下面我们将详细探讨如何在海思Hi35xx平台上实现这一功能。 首先,我们需要了解的是VENC(Video Encoder)模块。VENC是视频编码器的简称...

    IVBD『限制百度蜘蛛抓取txt代码』

    "IVBD『限制百度蜘蛛抓取txt代码』"这个主题涉及到如何通过编写`robots.txt`文件来管理搜索引擎爬虫的访问权限。`robots.txt`是一种简单的文本文件,它告诉搜索引擎哪些页面可以抓取,哪些应避免抓取。在这个场景中...

    C#网络数据包抓取.rar

    C#网络数据包抓取.rar

    六自由度机械臂抓取.zip

    这个“六自由度机械臂抓取.zip”文件可能包含与使用MATLAB进行六自由度机械臂控制相关的代码、模型和教程。 MATLAB是一种强大的数学计算和编程环境,特别适合于数值分析、算法开发和数据可视化。在机械臂控制领域,...

Global site tag (gtag.js) - Google Analytics