/**

* @param var 城市名称

* @returnstring数组。0表示邮编1表示区号

*/

@SuppressWarnings("deprecation")

private String[] getZipCode(String var) {

String[] code = new String[2];

String zipCode_S = "邮编:";

String zipCode_E = " ";

String qhCode_S = "区号:";

String qhCode_E = "";

String encode = URLEncoder.encode(var);

try {

URL url = new URL("http://www.ip138.com/post/search.asp?

area="

+ encode + "&action=area2zone");

BufferedReader br = new BufferedReader(new InputStreamReader(

url.openStream(), "GBK"));

for (String line; (line = br.readLine()) != null;) {

int zipNum = line.indexOf(zipCode_S);

if (zipNum > 1) {

String str = line.substring(zipNum + zipCode_S.length());

str = str.substring(0, str.indexOf(zipCode_E));

code[0] = str;

}

int qhNum = line.indexOf(qhCode_S);

if(qhNum > 1)

{

String str = line.substring(qhNum + qhCode_S.length());

str = str.substring(0, str.indexOf(qhCode_E));

code[1] = str;

break;

}

}

} catch (Exception e) {

System.out.println(var +"\t错误"+e.toString());

}

return code;

}

/**

* 主程序

* @throws Exception

*/

@Test

public void main() throws Exception

{

//1:获取全部省份

TreeMap provincesBuffer = getAddressInfo("http://www.weather.com.cn//data/city3jdata/china.html");

Element prcEle = DocumentHelper.createElement("Provinces");

//2:依据省份获取城市

Element citysEle = DocumentHelper.createElement("Citys");

//3:依据省份城市获取区、县

Element distEle = DocumentHelper.createElement("Districts");

int p = 1;

int c = 1;

int d = 1;

for(Entry prc : provincesBuffer.entrySet())

{

Element province = DocumentHelper.createElement("Province");

province.addAttribute("ID",""+(p)).addAttribute("ProvinceName", prc.getValue()).addText(prc.getValue());

//获取邮政编号

TreeMap cityBuffer = getAddressInfo("http://www.weather.com.cn/data/city3jdata/provshi/"+prc.getKey()+".html");

for(Entry citys : cityBuffer.entrySet())

{

Element city = DocumentHelper.createElement("City");

String[] zipCode = getZipCode(citys.getValue());

if(zipCode[0]==null||zipCode[1]==null)

System.out.println("缺少"+citys.getValue()+"邮政或区号!");

city.addAttribute("ID", ""+c).addAttribute("CityName", citys.getValue()).addAttribute("PID",p+"").addAttribute("ZipCode", zipCode[0]).addAttribute("AreaCode", zipCode[1]).addText(citys.getValue());

TreeMap distsBuffer = getAddressInfo("http://www.weather.com.cn/data/city3jdata/station/"+prc.getKey()+""+citys.getKey()+".html");

for(Entry dists : distsBuffer.entrySet())

{

String value = dists.getValue();

if(value.equals(citys.getValue()))

continue;

Element district = DocumentHelper.createElement("District");

district.addAttribute("ID",""+(d++)).addAttribute("DistrictName", dists.getValue()).addAttribute("CID", c+"").addText(dists.getValue());

distEle.add(district);

}

citysEle.add(city);

c++;

}

prcEle.add(province);

p++;

}

//4:保存到本地

saveInf("f:\\Provinces.xml",prcEle);

saveInf("f:\\Citys.xml",citysEle);

saveInf("f:\\Districts.xml",distEle);

}

/**保存xml

* @param savePath xml保存路径

* @param varEle根元素

*/

private void saveInf(String savePath, Element varEle) {

Document varDoc = DocumentHelper.createDocument();

varDoc.add(varEle);

try {

XMLWriter xmlwri = new XMLWriter(new FileOutputStream(new File(savePath)), new OutputFormat("\t", true, "UTF-8"));

xmlwri.write(varDoc);

xmlwri.close();

} catch (Exception e) {

System.out.println(savePath +"失败,原因例如以下");

throw new RuntimeException(e);

}

}

/**

* 获取信息

* @param address url路径

* @returnkey :信息编号value:信息名称

*/

private TreeMap getAddressInfo(String address) {

TreeMap china = new TreeMap();

BufferedReader br = null;

String buffer = null;

try {

URL url = new URL(address);

br = new BufferedReader(new InputStreamReader(url.openStream(),"UTF-8"));

buffer = br.readLine();

} catch (Exception e) {

System.out.println("错误:"+e.getMessage());

}finally{

if(br != null)

try {

br.close();

} catch (IOException e) {

e.printStackTrace();

}

}

if(buffer==null)

return china;

buffer = buffer.replaceAll("\\{|\\}|\"","");

String[] splits = buffer.split(",");

for(String sp : splits)

{

String[] split = sp.split(":");

if(split!=null && split.length == 2)

china.put(split[0], split[1]);

else

System.out.println(address);

}

buffer = null;

return china;

}

java 获取邮编_java利用爬虫技术抓取(省、市(区号\邮编)、县)数据相关推荐

  1. python爬网页数据用什么_初学者如何用“python爬虫”技术抓取网页数据?

    原标题:初学者如何用"python爬虫"技术抓取网页数据? 在当今社会,互联网上充斥着许多有用的数据.我们只需要耐心观察并添加一些技术手段即可获得大量有价值的数据.而这里的&quo ...

  2. java 开发用到网络爬虫,抓取汽车之家网站全部数据经历

    经历了两个礼拜的折腾,某某知名网站的数据终于到手了.犯罪没被发现这种心情感觉很爽. 说一下我的犯罪经历,之前公司总是抓取某某网站数据,可能是被发现了.某某网站改变了策略.通过各种技术终止了我们的行为, ...

  3. java模拟新浪微博_Java模拟新浪微博登陆抓取数据

    前言: 兄弟们来了来了,最近有人在问如何模拟新浪微博登陆抓取数据,我听后默默地抽了一口老烟,暗暗的对自己说,老汉是时候该你出场了,所以今天有时间就整理整理,浅谈一二. 首先: 要想登陆新浪微博需要预登 ...

  4. 爬虫技术——抓取滴滴打车优惠券

    本文介绍如何抓取滴滴打车优惠券 一.数据来源 券妈妈. 二.抓取方法 使用simple_html_dom的方式先抓取整个页面,再进行元素分析. 实现代码如下 <?php header(" ...

  5. java 获取温度_Java利用RXTX串口通信工具类获取DS18B20温度传感器的温度值

    环境:Windows10,Eclipse4.5.2,JDK1.7 设备:DS18B20温度传感器(4线,485接口),USB转485接口转换器,笔记本电脑 注意点:RTU传输,使用的是字节,那么在程序 ...

  6. java获取屏幕截图_java 利用java运行时的方法得到当前屏幕截图的方法

    将截屏图片保存到本地路径: package com.test; import java.awt.AWTException; import java.awt.Dimension; import java ...

  7. 爬虫侵入计算机系统,【探讨】利用“爬虫技术”获取数据行为的刑事考量 ——以一起非法获取计算机信息系统数据案为例...

    在本案中最为主要的争议焦点是"公开的信息"是否属于非法获取计算机信息系统数据中的犯罪对象.非法获取计算机信息系统数据罪的保护法益是计算机信息系统安全和数据安全.那么信息是否等同于数 ...

  8. java毕业设计——基于java+Jsoup+HttpClient的网络爬虫技术的网络新闻分析系统设计与实现(毕业论文+程序源码)——网络新闻分析系统

    基于java+Jsoup+HttpClient的网络爬虫技术的网络新闻分析系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+Jsoup+HttpClient的网络爬虫技术的网络 ...

  9. 基于Java的网络爬虫实现抓取网络小说(一)

    基于Java的网络爬虫实现抓取网络小说(一) 今天开始写点东西,一方面加深印象一方面再学习. 网络爬虫(Web crawler),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本,它们被广泛用 ...

最新文章

  1. Python函数的定义和使用
  2. 3分钟弄明白JAVA三大修饰符
  3. mahout贝叶斯算法开发思路(拓展篇)1
  4. 代码jit_但这是不可能的,或者无法发现JIT破坏了您的代码。
  5. Python(37)_字典嵌套
  6. 解决remix在线编译器连接本地私有链环境不成功的问题
  7. asp.net(C#)网站发布后 Global.asax 里 Application_Error 不执行的问题
  8. echarts 地图 给每个区域设置定位点图标及散点
  9. 电脑打印软件哪个好用?
  10. vba调用二维码ocx
  11. Dell电脑重装系统
  12. 小楼一夜听春雨,天下谁人不识君?
  13. 碰撞检测之OBB-OBB检测
  14. GAN-cls:具有匹配感知的判别器
  15. Ural_1671. Anansi's Cobweb(并查集)
  16. STM32 输入捕获 测量频率 PWM占空比
  17. 现代OpenGL教程 02 - 贴图
  18. 行驶证OCR识别应用领域有哪些?
  19. matlab二重指针,VC++中函数返回数组指针或者带指针的结构体的编译方式是否可取? - 程序语言 - 小木虫 - 学术 科研 互动社区...
  20. 小黄豆CRM v1.17版本发布

热门文章

  1. 【2022年中总结】我走得很慢,但我从不后退
  2. Matplotlib Python 画图工具包教程学习笔记4 等高线图以及3D图形的画法
  3. python课程的中期报告范文_课题中期报告书范本
  4. 破解android移动收费软件视频教程下载
  5. 【体验】室内设计 Web 编辑器
  6. 23种设计模式-行为型-模板模式
  7. 游戏夜读 | 关卡设计的难点
  8. 语音识别|语音转文字识别|在线语音识别
  9. 重磅!中国工程院院士孙家广加盟昆仑数据,担任首席战略顾问
  10. 你可以有多个性?使用Myqr制作彩色收款码、动态二维码!同理可以制作彩色加群码哦!!