新浪天气新闻的抓取——Java实现
基于Java平台的新闻管理系统设计
2、功能模块
2、功能模块
基于Java的网上购物平台系统主要包括以下几个功能模块: 1、用户注册和登录模块:允许用户注册账户并登录系统,对于卖家还需要提 供商家注册和登录功能。
2、功能模块
2、商品展示模块:展示所有商品的信息,包括商品的图片、描述、价格等。 3、购物车模块:允许用户将感兴趣的商品加入购物车,可以随时查看购物车 中的商品信息,并可以修改商品数量。
基于Java平台的新闻管理系 统设计
目录
01 一、需求分析与设计 概念
03 三、系统架构设计
02 二、数据库设计 04 四、功能模块设计
目录
05 五、界面设计
07 参考内容
06 六、安全性设计
内容摘要
随着互联网技术的不断发展,新闻管理系统在信息管理中的应用越来越广泛。 基于Java平台的新闻管理系统设计,能够有效地提高新闻管理的效率,提升新闻 的流通性和获取新闻的便捷性。
内容摘要
5、审批流程:包括流程的提交、审批、回复等功能; 6、系统设置:包括系统参数设置、权限管理等。
6、系统设置模块。
6、系统设置模块。
1、使用Spring MVC框架进行Web开发; 2、使用MyBatis框架进行数据库访问;
6、系统设置模块。
3、使用Tomcat服务器进行Web应用部署; 4、使用jQuery和Bootstrap等前端框架进行界面开发。
内容摘要
关键词:Java,办公管理系统,系统设计,系统实现,系统测试 首先,我们需要对系统进行需求分析。通过与各部门负责人和员工交流,我 们了解到以下需求:
内容摘要
1、员工信息管理:包括员工的姓名、性别、年龄、职位、方式等信息; 2、文件管理:包括文件的上传、下载、分类、搜索等功能;
JSP JavaBean实例---天气预报bean
JSP JavaBean实例---天气预报bean JSP JavaBean实例---天气预报bean---介绍本文档将介绍如何创建一个简单的天气预报JavaBean,以在JSP页面中显示天气信息。
使用JavaBean可以实现将数据与应用程序的其他部分分离,使得数据的获取和显示更加灵活和可维护。
创建JavaBean类首先,在Java项目中创建一个名为`WeatherBean`的Java类,用于表示天气预报的信息。
在该类中,我们可以定义需要的属性和方法来存储和处理天气数据。
public class WeatherBean {private String location;private String temperature;private String humidity;public WeatherBean() {// 默认构造函数}// 设置和获取属性的方法public String getLocation() {return location;}public void setLocation(String location) { this.location = location;}public String getTemperature() {return temperature;}public void setTemperature(String temperature) {this.temperature = temperature;}public String getHumidity() {return humidity;}public void setHumidity(String humidity) {this.humidity = humidity;}// 其他方法根据需求自行添加}在JSP页面中使用JavaBean在JSP页面中,我们可以通过使用JSP标准标签库(JSTL)来访问和显示JavaBean中的数据。
获取天气预报java代码
获取天⽓预报java代码import java.io.BufferedReader;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStreamReader;import .SocketTimeoutException;import .URL;import .URLConnection;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Calendar;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import net.sf.json.JSONObject;public class Weather {String cityid;URLConnection connectionData;StringBuilder sb;BufferedReader br;JSONObject jsonData;JSONObject info;public Weather(String cityid) throws IOException,NullPointerException{this.cityid = cityid;URL url = new URL("/data/"+cityid+".html");connectionData = url.openConnection();connectionData.setConnectTimeout(1000);try{br = new BufferedReader(new InputStreamReader(connectionData.getInputStream(), "utf-8"));sb = new StringBuilder();String line = null;while((line = br.readLine()) != null)sb.append(line);}catch (SocketTimeoutException e) {System.out.println("连接超时");}catch(FileNotFoundException e){System.out.println("加载⽂件出错");}String datas = sb.toString();jsonData = JSONObject.fromObject(datas);info = jsonData.getJSONObject("weatherinfo");List> list = new ArrayList>();for(int i=1;i<=6;i++){Calendar cal = Calendar.getInstance();cal.add(Calendar.DAY_OF_YEAR,i-1);Date date = cal.getTime();SimpleDateFormat sf = new SimpleDateFormat("yyyy年MM⽉dd⽇");Map map = new HashMap();map.put("city", info.getString("city").toString());map.put("date_y", sf.format(date));map.put("week", getWeek(cal.get(Calendar.DAY_OF_WEEK)));map.put("fchh", info.getString("fchh").toString());map.put("weather", info.getString("weather"+i).toString());map.put("temp", info.getString("temp"+1).toString());map.put("wind", info.getString("wind"+1).toString());map.put("fl", info.getString("fl"+1).toString());map.put("index", info.getString("index").toString());map.put("index_uv", info.getString("index_uv").toString());map.put("index_tr", info.getString("index_tr").toString());map.put("index_co", info.getString("index_co").toString());map.put("index_cl", info.getString("index_cl").toString());map.put("index_xc", info.getString("index_xc").toString());map.put("index_d", info.getString("index_d").toString());list.add(map);}for(int j=1;jMap wMap = list.get(j);System.out.println(wMap.get("city")+"\t"+wMap.get("date_y")+"\t"+wMap.get("week")+wMap.get("weather")+"\t"+wMap.get("temp")+"\t"+wMap.get("index_uv")); }}public String getWeek(int iw){String weekStr = "";switch (iw) {case 1:weekStr = "星期天";break;case 2:weekStr = "星期⼀";break;case 3:weekStr = "星期⼆";break;case 4:weekStr = "星期三";break;case 5:weekStr = "星期四";break;case 6:weekStr = "星期五";break;case 7:weekStr = "星期六";break;default:break;}return weekStr;}public static void main(String[] args){ try{new Weather("101010100");//北京市}catch (Exception e) {e.printStackTrace();}}}。
java调用天气接口快速获取多个城市的数据的方法
一、介绍在日常生活和工作中,获取多个城市的天气数据是非常常见的需求。
利用Java语言调用天气接口可以快速获取多个城市的天气数据,为我们提供及时准确的天气信息。
本文将介绍如何使用Java语言调用天气接口来快速获取多个城市的数据的方法。
二、选择合适的天气接口1. 确定需求需要确定自己的需求,例如需要获取哪些城市的天气数据、需要获取的天气信息有哪些等。
根据自己的需求,选择合适的天气接口。
2. 选择权威可靠的天气接口在选择天气接口时,需要选择权威可靠的接口,以获取准确的天气数据。
可以选择一些知名的天气数据提供商的接口,如我国气象局提供的天气接口、百度天气接口、阿里天气接口等。
三、编写Java代码调用天气接口1. 导入相关的Java库在编写Java代码前,需要导入相关的Java库,以便调用网络接口、json数据处理等功能。
2. 发起HTTP请求使用Java的网络编程库,例如HttpClient或URLConnection类,发起HTTP请求,向天气接口发送请求数据,获取返回的天气数据。
3. 解析返回的json数据天气接口通常会返回json格式的数据,需要使用Java的json处理库,如Gson或Jackson,对返回的json数据进行解析,提取出需要的天气信息。
4. 处理多个城市的天气数据根据自己的需求,可以编写循环或并发处理多个城市的天气数据,将获取的数据存储到合适的数据结构中,如List、Map等。
五、处理异常情况调用天气接口时,可能会遇到网络连接超时、接口返回异常等情况,需要编写相应的异常处理代码,保证程序的稳定性和可靠性。
六、总结通过以上方法,可以快速、准确地获取多个城市的天氰数据。
在实际的应用中,可以根据自己的需求和实际情况进行调整和优化,以更好地满足用户的需求。
希望本文对于使用Java语言调用天气接口快速获取多个城市的数据有所帮助。
七、优化处理1. 缓存数据为了提高效率,可以考虑对获取的天气数据进行缓存,避免频繁地调用天气接口。
java开发项目集锦(附源码)
新浪天气预报新闻java抓去程序package * 正则方式抓取新浪天气新闻上的新闻* 地址* @param args*/public class Newlist {private static final Log log = ;/*** 测试* @param args*/public static void main(String args[]){Newlist n=new Newlist();String[] k=();for (int i=0;i<;i++){"href=\"", "href=\"url="));}String[] m=("news/2008/1119/");for (int l=0;l<;l++){}}/*** 由url地址获得新闻内容string[]* 新闻中的图片下载到本地,文中新闻地址改成本地地址* @param url* @return*/public String[] getNewinfo(String url){String URL=""+url;)</p>" , getContent(URL) , 30);for (int i=0;i<;i++){Pattern sp = ("src=\"(.*)\"");Matcher matcher = (s[i]);if ()){String imageurl=analysis("src=\"(.*)\"" , s[i] , 1)[0];if(!("")){imageurl=""+imageurl;}"新闻有图片:"+imageurl);String content=getContent(imageurl);String[] images=("/");String imagename=images[];"图片名:"+imagename);try {File fwl = new File(imagename);PrintWriter outl = new PrintWriter(fwl);(content);();} catch (IOException e) {eplace(analysis("src=\"(.*)\"" , s[i] , 1)[0], imagename);}}return s;}public String[] getNewList(){String url="";return getNewList(getContent(url));}private String[] getNewList(String content ){/images/a(.*).gif\" width=\"70\" height=\"65\"></td>" , content , 50);String[] s = analysis("<li>(.*)</li>" , content , 50);return s;}private String[] analysis(String pattern, String match , int i){Pattern sp = (pattern);Matcher matcher = (match);String[] content = new String[i];for (int i1 = 0; (); i1++){content[i1] = (1);}penConnection();oString());"-----------------------------------------");BufferedReader br=new BufferedReader(new InputStreamReader(), "gb2312"));String s = "";StringBuffer sb=new StringBuffer();while((s = ())!=null){(s+"\r\n");}"长度+"+().length());return ();}catch(Exception e){return "error open url" + strUrl;}}*/public static String getContent (String strUrl){URLConnection uc = null;String all_content=null;try {all_content =new String();URL url = new URL(strUrl);uc = ();("User-Agent","Mozilla/ (compatible; MSIE ; Windows XP; DigExt)");"-----------------------------------------");"Content-Length: "+());"Set-Cookie: "+("Set-Cookie"));"-----------------------------------------");oString());"-----------------------------------------");if (uc == null)return null;InputStream ins = ();ByteArrayOutputStream outputstream = new ByteArrayOutputStream();byte[] str_b = new byte[1024];int i = -1;while ((i=(str_b)) > 0) {(str_b,0,i);}all_content = ();oString());if (uc == null)return 0;InputStream ins = ();byte[] str_b = new byte[1024];int byteRead=0;String[] images=("/");String imagename=images[];File fwl = new File(imagename);FileOutputStream fos= new FileOutputStream(fwl);while ((byteRead=(str_b)) > 0) {(str_b,0,byteRead);};();();} catch (Exception e) {();("获取网页内容出错");}finally{uc = null;}return 1;}方法二:首先把搜索后的页面用流读取出来,再写个正则,去除不要的内容,再把最后的结果存成xml格式文件、或者直接存入数据库,用的时候再调用本代码只是显示html页的源码内容,如果需要抽取内容请自行改写public static String regex()中的正则式package rssTest;importimportimportimportimportimportimportimportimportimportimportpublic class MyRSS{/*** 获取搜索结果的html源码* */public static String getHtmlSource(String url){StringBuffer codeBuffer = null;BufferedReader in=null;try{URLConnection uc = new URL(url).openConnection();/*** 为了限制客户端不通过网页直接读取网页内容,就限制只能从浏览器提交请求.* 但是我们可以通过修改http头的User-Agent来伪装,这个代码就是这个作用**/("User-Agent","Mozilla/ (compatible; MSIE ; Windows XP; DigExt)");etInputStream(), "gb2312"));codeBuffer = new StringBuffer();String tempCode = "";ppend("\n");}();}catch (MalformedURLException e){();}catch (IOException e){();}return ();}/*** 正则表达式* */public static String regex(){String googleRegex = "<div class=g>(.*)href=\"(.*)\"(.*)\">(.*)</a>(.*)<div class=std>(.*)<br>";return googleRegex;}/*** 测试用* 在google中检索关键字,并抽取自己想要的内容** */public static List<String> GetNews(){List<String> newsList = new ArrayList<String>();String allHtmlSource = MyRSS.getHtmlSource("&hl=zh-CN&newwindow=1&client=aff-os- maxthon&hs=SUZ&q=%E8%A7%81%E9%BE%99%E5%8D%B8%E7%94%B2&meta=&aq=f");Pattern pattern = (regex());Matcher matcher = (allHtmlSource);while ()){String urlLink = (2);String title = (4);title = ("<font color=CC0033>", "");title = ("</font>", "");title = ("<b>...</b>", "");String content = (6);content = ("<font color=CC0033>", "");content = ("</font>", "");content = ("<b>...</b>", "");(urlLink);(title);(content);}return newsList;}/*** main方法* */public static void main(String[] args){.println(MyRSS.getHtmlSource(""));}}方法三:jsp自动抓取新闻自动抓取新闻package class SpiderNewsServer { public static void main(String[] args) throws Exception{oString();"strNewsDetail====="+strNewsDetail);if(strNewsDetail != null && () > 0){WebHtml newsListHtml = new WebHtml();String htmlDocuemtntCom = (strNewsDetail);"$$$$$------"+htmlDocuemtntCom);if(htmlDocuemtntCom == null || () == 0){ return;}rim();title = ("<h1>")+4,("</h1>"));title = ("'", "");title = (";", "");title = (" ", "");}rim();if("<p>")>0 && ("</p>")>("<p>") && ("</p>")>0) bodytext = ("<p>")+3,("</p>"));bodytext=(" ", "");bodytext=("<br>", "");bodytext=("\n", "<br>");bodytext=("'", "");bodytext=(";", "");}....";else{hometext = bodytext+"......";}+1,5);Calendar cal = ();(new Date());cdate = ()+"";cdate = (0,10);}else{continue;}}"-------------------------"+title);"-------------------------"+cdate);"-------------------------"+cdate);"-------------------------"+hometext);"-------------------------"+bodytext);"-------------------------"+keywords);"-------------------------"+counter);/*String str = "INSERT INTO ecim_stories(uid,title,created,published,hostname,hometext,bodytext,keywords,counter,topicid,i home,notifypub,story_type,topicdisplay,topicalign,comments,rating,votes,description) ";str += "VALUE (1,'"+title+"',"+cdate+","+cdate+",'','"+hometext+"','"+bodytext+"','"+keywords+"',"+counter+",1, 0,1,'admin',0,'R',0,0,0,'')";DBAccess db = new DBAccess();;if(str)>0) {"-------------------------成功!!!!!!!!!!");}else {"-------------------------失败!!!!!!!!!!");}*/}/*** 抓取页面内容结束********************/}}package class WebHtml {/*** 根据url,抓取webhmtl内容* @param url*/public String getWebHtml(String url){try {URL myURL = new URL(url);URLConnection conn = ();BufferedReader reader = new BufferedReader(new InputStreamReader()));String line = null;StringBuffer document = new StringBuffer("");while ((line = ()) != null){(line + "\n");}();String resutlDocument = new String(document);return resutlDocument;} catch (Exception e) {}return "";}}Java 简易播放器import .*;import .*;import .*;import .*;import .*;etClassName());(this);}catch(Exception e){();}*etSelected(true);();/*loopItem=new JCheckBoxMenuItem("是否循环"); (loopItem);(new ItemListener(){public void itemStateChanged(ItemEvent e){loop=!loop;}});*/infor=new JMenuItem("软件简介"); (infor);(this);about=new JMenuItem("关于作者"); (this);(about);+());+name,indexForDel);}catch(ReName e2)etImage());quals("")) (this,"错误的路径","出错了",;String[] sFiles=();for(int i=0;i<;i++){(sFiles[i]);(()+1)+"."+sFiles[i]);()+"\\"+sFiles[i]);}(numList);/*fd=new FileDialog;(true);if()!=null){File fileDir=new File());String[] ss=();for(int i=0;i<;i++){}}*/}private void createPlayer(){closePreviosPlayer();+1)+"格式";try{player=());sSelected()){if()==0)return;index=(int)()*());}if(buttonValues[1].isSelected()){if()==0)return;sSelected()){(new Time (0));();}createPlayer2();}}}private void exity_n(){/*int exi;exi=(this,"真的要离开么","退出程序",,;+vf);(vf);(()+1)+"."+vf);+vf);(title);(numList);oString();}oString();catch(ArrayIndexOutOfBoundsException e) {return;}file=new File(title); closePreviosPlayer();+1)+"格式";try{player=());oString();}catch(Exception e1){return;}();Enumeration enumFile=();while()){(()+1)+"."+());}(index);+1)+"格式,"+"不过没有从硬盘真正删除");if()!=0){index%=();createPlayer2();}}}private void saveList(){Enumeration enumFile=();Enumeration enumDir =();try{output=new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(listFile)));{listWriteFile=new ListValues().toString(),().toString()); (listWriteFile);}();();}catch(Exception e){();}/*finally{();();+());());}}catch(EOFException e){try{xe"));}}-----------------------------------------------------------------------;import .*;class DialogDemo extends JDialog{JTextArea field;Container c;String sValue= "\n本软件基于java media framework构建,同时我们" +"\n正处于基础java学习阶段,所以功能还不是非常完"+"\n善,难登大雅之堂。
Android获取新浪天气预报数据实例
Android获取新浪天气预报数据实例新浪天气预报地址:/xml.php?city=武汉&password=DJOYnieT8234jlsK&day=0其中,city后的城市可用.URLEncoder.encode(“武汉”,”gb2312”);也可以直接写”武汉”,但不能用”wuhan”。
Password固定Day为0表示当天天气,1表示第二天的天气,2表示第三天的天气,以此类推,最大为4。
工具类:1、定义成员1/** 新浪天气网址 */2public final String SINA_URL = "/xml.php";3/** 新浪天气XML调用密码 */4public final String PASSWORD = "DJOYnieT8234jlsK";5/** 城市 */6public String city;7/** 白天天气 */8public String status1;9/** 夜晚天气 */10public String status2;11/** 白天天气拼音 */12public String figure1;13/** 夜晚天气拼音 */14public String figure2;15/** 白天风向 */16public String direction1;17/** 夜晚风向 */18public String direction2;19/** 白天风级 */20public String power1;21/** 夜晚风级 */22public String power2;23/** 白天温度 */24public String temperature1;25/** 夜晚温度 */26public String temperature2;27/** 体感温度 */28public String tgd;29/** 紫外线指数 */30public String zwx_l;31/** 紫外线说明 */32public String zwx_s;33/** 体感度指数 */34public String ssd_l;35/** 体感度说明 */36public String ssd_s;37/** 空调指数 */38public String ktk_l;39/** 空调说明 */40public String ktk_s;41/** 洗车指数 */42public String xcz_l;43/** 洗车说明 */44public String xcz_s;45/** 穿衣指数 */46public String chy_l;47/** 穿衣说明 */48public String chy_shuoming;49/** 污染物扩散条件 */50public String pollution_l;51/** 污染物扩散条件说明 */52public String pollution_s;53/** 感冒指数 */54public String gm_l;55/** 感冒说明 */56public String gm_s;57/** 运动指数 */58public String yd_l;59/** 运动说明 */60public String yd_s;2、获取天气数据61/**62 * 更新天气63 *64 * @param city65 * 城市名66 * @param day67 * 0表示当天天气,1表示第二天的天气,2表示第三天的天气,以此类推,最大为468 */69public void UpdateWeatherInfo(String city, String day) {70if (city.equals("")) {71 isLoaded = false;72return;73 }74 String html = null;75try {76 html = doGet(SINA_URL + "?city="77 + .URLEncoder.encode(city, "gb2312") + "&password="78 + PASSWORD + "&day=" + day);7980 Document doc = Jsoup.parse(html);81if (doc.body().getElementsByTag("Profiles").size() == 0) { 82 isLoaded = false;83return;84 }85if(doc.body().getElementsByTag("Profiles").get(0).getElementsByTag("Weather ").size() == 0) {86 isLoaded = false;87return;88 }89 Element element = doc.body().getElementsByTag("Profiles").get(0)90 .getElementsByTag("Weather").get(0);9192this.city = element.getElementsByTag("city").text();93 status1 = element.getElementsByTag("status1").text();94 status2 = element.getElementsByTag("status2").text();95 figure1 = element.getElementsByTag("figure1").text();96 figure2 = element.getElementsByTag("figure2").text();97 direction1 = element.getElementsByTag("direction1").text();98 direction2 = element.getElementsByTag("direction2").text();99 power1 = element.getElementsByTag("power1").text();100 power2 = element.getElementsByTag("power2").text();101 temperature1 = element.getElementsByTag("temperature1").text();102 temperature2 = element.getElementsByTag("temperature2").text();103104 tgd = element.getElementsByTag("tgd").text();105 zwx_l = element.getElementsByTag("zwx_l").text();106 zwx_s = element.getElementsByTag("zwx_s").text();107 ssd_l = element.getElementsByTag("ssd_l").text();108 ssd_s = element.getElementsByTag("ssd_s").text();109 ktk_l = element.getElementsByTag("ktk_l").text();110 ktk_s = element.getElementsByTag("ktk_s").text();111 xcz_l = element.getElementsByTag("xcz_l").text();112 xcz_s = element.getElementsByTag("xcz_s").text();113 chy_l = element.getElementsByTag("chy_l").text();114 chy_shuoming = element.getElementsByTag("chy_shuoming").text();115 pollution_l = element.getElementsByTag("pollution_l").text();116 pollution_s = element.getElementsByTag("pollution_s").text();117 gm_l = element.getElementsByTag("gm_l").text();118 gm_s = element.getElementsByTag("gm_s").text();119 yd_l = element.getElementsByTag("yd_l").text();120 yd_s = element.getElementsByTag("yd_s").text();121122 isLoaded = true;123 } catch (UnsupportedEncodingException e) {124 isLoaded = false;125 }126 }3、访问网络127public static final String ENCODE = "utf-8";128129public static String doGet(String url) {130try {131 HttpGet httpGet = new HttpGet(url);132 HttpClient hc = new DefaultHttpClient();133 HttpResponse ht = hc.execute(httpGet);134if (ht.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { 135 HttpEntity he = ht.getEntity();136 InputStream is = he.getContent();137 BufferedReader br = new BufferedReader(138new InputStreamReader(is));139 String response = "";140 String readLine = null;141while ((readLine = br.readLine()) != null) {142 response = response + readLine;143 }144 is.close();145 br.close();146return response;147 } else {148return"error";149 }150 } catch (Exception e) {151return"error";152 }153 }4、关于jsoup/view/4066913.htm。
java调用中国天气网api获得天气预报信息的方法
java调⽤中国天⽓⽹api获得天⽓预报信息的⽅法本⽂实例讲述了java调⽤中国天⽓⽹api获得天⽓预报信息的⽅法。
分享给⼤家供⼤家参考。
具体实现⽅法如下://以冰城哈尔滨为例通过中国天⽓api调⽤天⽓信息private String getWeatherInfo2(){StringBuilder info = new StringBuilder();try {DefaultHttpClient httpclient = new DefaultHttpClient();HttpGet httget = new HttpGet("/data/101050101.html");ResponseHandler<String> responseHandler = new BasicResponseHandler();String responseBody = httpclient.execute(httget, responseHandler);System.out.println(responseBody);JsonParser jp = new JsonParser();JsonElement jse = jp.parse(responseBody);JsonObject jso = jse.getAsJsonObject().get("weatherinfo").getAsJsonObject();// String updTime = jso.get("fchh").getAsString();// if(updTime != null){// //温度// String j = jso.get("temp1").getAsString();//今天// String m = jso.get("temp2").getAsString();//明天// //天⽓情况// String j_weather = jso.get("weather1").getAsString();//今天// String m_weather = jso.get("weather2").getAsString();//明天// //风向风⼒// String j_wind = jso.get("wind1").getAsString();//今天// String m_wind = jso.get("wind2").getAsString();//明天// info.append("今天:").append(j).append(" ").append(j_weather).append(" ").append(j_wind).append("\n");// info.append("明天:").append(m).append(" ").append(m_weather).append(" ").append(m_wind).append("\n");// }String updTime = jso.get("fchh").getAsString();if(updTime != null){if(!updTime.trim().equals("18")){//温度String j = jso.get("temp1").getAsString();//今天String m = jso.get("temp2").getAsString();//明天//天⽓情况String j_weather = jso.get("weather1").getAsString();//今天String m_weather = jso.get("weather2").getAsString();//明天//风向风⼒String j_wind = jso.get("wind1").getAsString();//今天String m_wind = jso.get("wind2").getAsString();//明天info.append("今天:").append(j).append(" ").append(j_weather).append(" ").append(j_wind).append("\n");info.append("明天:").append(m).append(" ").append(m_weather).append(" ").append(m_wind).append("\n");}else{//18//温度String temp1 = jso.get("temp1").getAsString();//今天String temp2 = jso.get("temp2").getAsString();//今天String temp3 = jso.get("temp3").getAsString();//今天String j = temp1.split("~")[1] + "~" + temp2.split("~")[0];String m = temp2.split("~")[1] + "~" + temp3.split("~")[0];//明天//天⽓情况String weather1 = jso.get("weather1").getAsString();String weather2 = jso.get("weather2").getAsString();String weather3 = jso.get("weather3").getAsString();String j_weather = "";String j_weather_part1 = "";String j_weather_part2 = "";//判断是否有转if(weather1.indexOf("转") > 0){//有j_weather_part1 = weather1.split("转")[1];}else{j_weather_part1 = weather1;}if(weather2.indexOf("转") > 0){//有j_weather_part2 = weather2.split("转")[0];}else{j_weather_part2 = weather2;}if(j_weather_part1.equalsIgnoreCase(j_weather_part2)){j_weather = j_weather_part1;//今天}else{j_weather = j_weather_part1 + "转" + j_weather_part2;//今天}String m_weather = "";String m_weather_part1 = "";String m_weather_part2 = "";//判断是否有转if(weather2.indexOf("转") > 0){//有m_weather_part1 = weather2.split("转")[1];}else{m_weather_part1 = weather2;}if(weather3.indexOf("转") > 0){//有m_weather_part2 = weather3.split("转")[0];}else{m_weather_part2 = weather3;}if(m_weather_part1.equalsIgnoreCase(m_weather_part2)){m_weather = m_weather_part1;//今天}else{m_weather = m_weather_part1 + "转" + m_weather_part2;//明天}//风向风⼒String j_wind = jso.get("wind2").getAsString();//今天String m_wind = jso.get("wind3").getAsString();//明天info.append("今天:").append(j).append(" ").append(j_weather).append(" ").append(j_wind).append("\n");info.append("明天:").append(m).append(" ").append(m_weather).append(" ").append(m_wind).append("\n"); }}} catch (Exception e) {}return info.toString();}希望本⽂所述对⼤家的java程序设计有所帮助。
java 中英文新闻爬取,段落对照
java 中英文新闻爬取,段落对照摘要:1.引言2.Java 在网络爬虫领域的应用3.新闻爬取的方法与技巧4.段落对照在中英文新闻爬取中的应用5.总结正文:随着互联网的发展,大量的新闻资讯铺天盖地,人们对于获取实时信息的的需求也日益增长。
网络爬虫技术应运而生,成为了数据挖掘和信息收集的重要工具。
其中,Java 作为一种广泛应用于网络爬虫的编程语言,具有丰富的库和工具支持,使得爬虫开发变得更加简单高效。
本文将介绍Java 在新闻爬取领域的应用,以及段落对照在中英文新闻爬取中的实际应用。
首先,让我们了解一下Java 在网络爬虫领域的应用。
Java 具有强大的网络编程能力,可以很容易地实现网络数据的抓取和解析。
一些常用的Java 爬虫库,如Jsoup、OkHttp、Gson 等,可以帮助开发者快速构建爬虫程序。
此外,Java 还可以与Python 等其他语言的爬虫库进行相互调用,实现更复杂功能的爬虫。
新闻爬取是网络爬虫的一个典型应用场景。
在新闻爬取过程中,我们需要关注以下几个方面:1.URL 管理:有效地获取新闻页面的URL,对于提高爬取效率至关重要。
可以使用Java 的URL 编码和分页功能来实现URL 的管理。
2.网页解析:使用Java 库如Jsoup 对新闻页面进行解析,提取所需的新闻标题、作者、发布时间等信息。
3.数据存储:将爬取到的新闻数据存储到数据库或文件中,以便后续的分析和处理。
Java 提供了多种数据存储方式,如SQL 数据库、文件存储等。
4.反爬虫策略:为了应对新闻网站的反爬虫措施,如验证码、User-Agent 限制等,我们需要在爬虫程序中加入相应的处理逻辑。
段落对照是一种在中英文新闻爬取中广泛应用的技术。
通过识别新闻中的段落标记,我们可以将英文新闻按照段落进行分割,便于后续的翻译和分析。
在Java 中,可以使用DOM 解析技术来实现段落对照。
具体实现方法如下:1.使用Jsoup 库解析新闻页面,提取HTML 代码。
获取天气的api接口
static String weather; //保存天气情况
static String high; //保存当天最高温度
static String low; //保存当天最低温度
if(node.getNodeType()==Node.ELEMENT_NODE){
if(node.getNodeName().equals("status1"))weather=node.getTextContent(); //获取到天气情况
root=doc.getDocumentElement();
books=root.getChildNodes();
for(Node node=books.item(1).getFirstChild();node!=null;node=node.getNextSibling()){
}
public static void main(String [] arg)
{
new GetWeather().getweather(); //主接口函数调用执行方法
}
}
============================================================================================================================================
public void getweather() //获取天气函数
{
URL ur;
try {
DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance(); //相关这个类的使用,可以去网上搜索,下同,不做详细介绍
java实现爬取静态页面的新闻数据
java 实现爬取静态页⾯的新闻数据可能需要的pom 依赖包:<!-- https:///artifact/commons-codec/commons-codec --><dependency ><groupId >commons-codec</groupId ><artifactId >commons-codec</artifactId ><version >1.4</version ></dependency ><!-- https:///artifact/org.apache.httpcomponents/httpclient --><dependency ><groupId >org.apache.httpcomponents</groupId ><artifactId >httpclient</artifactId ><version >4.5.2</version ></dependency ><!-- https:///artifact/commons-logging/commons-logging --><dependency ><groupId >commons-logging</groupId ><artifactId >commons-logging</artifactId ><version >1.1.1</version ></dependency ><!-- https:///artifact/commons-httpclient/commons-httpclient --><dependency ><groupId >commons-httpclient</groupId ><artifactId >commons-httpclient</artifactId ><version >3.1</version ></dependency ><!-- https:///artifact/org.jsoup/jsoup --><dependency ><groupId >org.jsoup</groupId ><artifactId >jsoup</artifactId ><version >1.8.3</version ></dependency >主要贴出实现类相关代码:@Overridepublic boolean inserturlNews (String urls) {// TODO: 2021/5/17 只⽀持新民只⽀持新民⽹数⽹数据爬取,可根据页⾯标签定时解析据爬取,可根据页⾯标签定时解析String url = urls;Document doc = null;try {doc = Jsoup.connect(url).get();Elements listDiv = doc.getElementsByAttributeValue("class", "type_content_list type-item");NewsInformation newsInformation= new NewsInformation ();for (Element element : listDiv) {Elements texts = element.getElementsByTag("a");for (Element text : texts) {String newsUrl=text.attr("href");String ptext = text.attr("title");if (! ptext.isEmpty() && newsUrl.contains(".html")){newsInformation.setTitle(ptext);newsInformation.setNewsUrl(newsUrl);try {Document newsDoc = Jsoup.connect(newsUrl).get();newsInformation.setForm(newsDoc.select(".info").select("span").get(0).text());//环球,时政if (url.contains("/world/") || url.contains("/shizheng/ newsInformation.setAuthor(newsDoc.select(".info").select("span").get(1).text());newsInformation.setDataTime(newsDoc.select(".info").select("span").get(3).text());if (!newsInformation.getDataTime().contains("2021-")){newsInformation.setDataTime(now.format(fmTime));}//⽂、体会}else if (url.contains("/wentihui/")){newsInformation.setAuthor(newsDoc.select(".info").select("span").get(1).text());newsInformation.setDataTime(newsDoc.select(".info").select("span").get(4).text());if (!newsInformation.getDataTime().contains("2021-")){newsInformation.setDataTime(newsDoc.select(".info").select("span").get(3).text());}//头条} else if (url.contains("/t/gdbd/")){newsInformation.setAuthor(newsDoc.select(".info").select("span").get(1).text());newsInformation.setDataTime(newsDoc.select(".info").select("span").get(3).text());if (!newsInformation.getDataTime().contains("2021-")){newsInformation.setDataTime(now.format(fmTime));}}Elements listNewsDetail = newsDoc.getElementsByAttributeValue("class", "a_content");for (Element listNews : listNewsDetail) {Elements contents = listNews.getElementsByTag("p");Elements images = listNews.getElementsByTag("img");newsInformation.setImage(images.attr("src"));StringBuffer buffer =new StringBuffer();for (Element newsContent : contents) {buffer.append(newsContent.text().trim());}newsInformation.setContent(buffer.toString().trim());newsInformation.setStatus(1);}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}newsMapperExt.inserturlNews(newsInformation);}}}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return true;}}插⼊本地数据库展⽰。
天气预报系统java,web,mysql实践报告(一)
天气预报系统java,web,mysql实践报告(一)天气预报系统java, web, mysql实践报告1. 简介•介绍天气预报系统的背景和意义•概述本篇报告的主要内容和目标2. 系统需求分析•描述天气预报系统的功能需求和性能需求•分析用户需求,包括用户角色和用户界面设计3. 系统设计•设计系统的架构和模块划分•陈述系统的数据流程和业务流程4. 技术选型•探讨为何选择Java作为开发语言•分析选择Web作为前端框架的原因•解释为何选择MySQL作为数据库系统5. 系统实现1.后端实现:–描述使用Java语言开发后端的过程–展示后端代码的关键部分2.前端实现:–介绍使用Web框架开发前端的过程–展示前端页面的关键部分6. 数据库设计•分析系统的数据结构和数据关系•展示数据库表的设计和关联关系7. 系统测试•说明系统测试的目的和方法•展示测试结果和解决方案8. 总结与展望•对整个系统的开发过程进行总结•展望系统的未来发展和改进方向以上是一份关于天气预报系统java, web, mysql实践报告的Markdown格式的文章。
文章通过标题和副标题的方式,将内容按照逻辑进行了组织和展示。
希望这篇报告能够对读者理解和学习天气预报系统的开发实践有所帮助。
1. 简介天气预报系统是一种提供即时天气信息的应用程序,它可以帮助用户了解当地或其他地区的天气状况。
在日常生活中,天气预报系统对于人们的出行、外出活动安排以及农业、交通等行业的决策都具有重要的参考价值。
本报告旨在介绍一个基于Java、Web和MySQL技术实现的天气预报系统。
通过实践开发这个系统,我们将探索并展示如何利用Java作为后端开发语言、Web作为前端框架以及MySQL作为数据库系统的优势,来实现一个功能完善、性能稳定的天气预报系统。
2. 系统需求分析天气预报系统的功能需求主要包括: - 用户可以查看实时天气信息 - 用户可以查询特定地区的天气信息 - 用户可以设置并接收天气预警通知在性能需求方面,系统需要保证: - 快速响应用户请求,尽量减少等待时间 - 数据更新及时,保证用户获取到准确的天气信息3. 系统设计为了实现功能需求,我们设计了以下模块: - 用户管理模块:负责用户注册、登录和个人信息管理 - 天气查询模块:负责提供实时天气查询功能,并存储查询记录 - 天气预警模块:负责检测天气预警信息,并向用户发送通知系统的数据流程如下: 1. 用户发送查询请求到服务器 2. 服务器接收请求并调用天气查询模块获取天气信息 3. 服务器返回数据给用户,并将查询记录存储到数据库 4. 天气预警模块定时检测预警信息,并向用户发送通知4. 技术选型我们选择Java作为后端开发语言的原因是其拥有丰富的类库和框架,能够快速实现系统功能,并具有良好的可维护性和扩展性。
Java调用天气预报调用代码
Java调用天气预报调用代码在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,更多Java学习,请搜索疯狂Java;天气预报调用代码最近要做一个网站需要用到天气预报,本来是想找到API,自己写一个自己的天气预报小程序的,没有成功,只好去找现成的代码调用。
经过测试我找到了几种现在还可以使用的调用代码,由于大部分效果使用的是框架调用别人的代码,所以当别人的网站修改了代码的时候有的效果可能显示不出来需要到相关网站查看修改。
如果有能力还是自己写一个好啊。
天气预报调用代码1、265 天气<iframe src="/weather.htm" width="168" height="54" frameborder="no" border="0" marginwidth="0&quoat; marginheight="0"scrolling="no"></iframe>优缺点:只需要这一段,他会自己根据访问者IP给出当地的天气,可是不能自己定制,你要想看其他的城市还需要访问它的网站,在此不太推荐。
2、新浪天气<IFRAME ID='ifm2' WIDTH='260' HEIGHT='70' ALIGN='CENTER' MARGINWIDTH='0' MARGINHEIGHT='0' HSPACE='0' VSPACE='0' FRAMEBORDER='0' SCROLLING='NO'src="/iframe/weather/500100.html"></iframe>优缺点:只显示一个城市,需要自己知道该城市的代码,具体代码可以访问这里(有的可能不准)。
Java实现新闻报道的文本词云分析
Java实现新闻报道的文本词云分析简介本文档介绍了如何使用Java实现对新闻报道的文本进行词云分析。
词云分析是一种数据可视化技术,通过对文本中出现频率较高的词语进行可视化展示,可以帮助我们更直观地了解文本的主题和关键词。
步骤以下是使用Java实现新闻报道文本词云分析的步骤:1. 收集新闻报道文本数据:首先,需要收集大量的新闻报道文本数据。
可以通过爬取新闻网站、获取已有的新闻数据集等方式获得。
收集新闻报道文本数据:首先,需要收集大量的新闻报道文本数据。
可以通过爬取新闻网站、获取已有的新闻数据集等方式获得。
3. 计算词频:对预处理后的文本进行词频统计,统计每个词语在文本中出现的次数。
可以使用HashMap等数据结构来记录每个词语的出现次数。
计算词频:对预处理后的文本进行词频统计,统计每个词语在文本中出现的次数。
可以使用HashMap等数据结构来记录每个词语的出现次数。
4. 生成词云:根据统计出的词频数据,使用Java中的词云生成库(如WordCloud或JWordCloud)生成词云图像。
可以根据需要自定义词云的样式和配置参数。
生成词云:根据统计出的词频数据,使用Java中的词云生成库(如WordCloud或JWordCloud)生成词云图像。
可以根据需要自定义词云的样式和配置参数。
5. 展示和保存词云:将生成的词云图像展示在图形界面中或保存为图片文件进行进一步分析或展示。
展示和保存词云:将生成的词云图像展示在图形界面中或保存为图片文件进行进一步分析或展示。
注意事项在进行新闻报道文本词云分析时,需要注意以下几点:- 数据安全:确保获取和处理的新闻报道文本数据符合相关法律法规和数据使用规范。
数据安全:确保获取和处理的新闻报道文本数据符合相关法律法规和数据使用规范。
- 数据预处理:对文本数据进行预处理时,通过去除非文本内容、分词和去除停用词等步骤,能够提高词云分析的质量和准确性。
数据预处理:对文本数据进行预处理时,通过去除非文本内容、分词和去除停用词等步骤,能够提高词云分析的质量和准确性。
JSP JavaBean实例---新闻发布bean
JSP JavaBean实例---新闻发布bean JSP JavaBean实例---新闻发布bean介绍本文档将为您提供一个JSP JavaBean实例,这个实例是一个新闻发布bean。
这个实例将帮助您理解如何在JSP页面中使用JavaBean来发布新闻内容。
创建JavaBean首先,我们需要创建一个JavaBean类来表示新闻发布。
这个JavaBean类应该包含以下属性:1. 标题(title):表示新闻的标题。
2. 内容(content):表示新闻的正文内容。
3. 作者(author):表示新闻的作者。
4. 发布日期(date):表示新闻的发布日期。
下面是一个简化的示例代码:public class NewsBean {private String title;private String content;private String author;private Date date;// 构造方法public NewsBean(String title, String content, String author, Date date) {this.title = title;this.content = content;this.author = author;this.date = date;}// 获取标题public String getTitle() {return title;}// 获取内容public String getContent() {return content;}// 获取作者public String getAuthor() {return author;}// 获取发布日期public Date getDate() {return date;}}在JSP页面中使用JavaBean接下来,我们将演示如何在JSP页面中使用这个新闻发布的JavaBean。
首先,我们需要导入JavaBean类。
Java课程设计天气查询系统
•数据类型、运算符、控制结构。
第二周:面向对象编程。
•类、对象、封装、继承、多态。第三周:Java常用类库。
•文件读写、网络通信等基本功能。
三、教学方法
本章节采用以下教学方法:
7.讲授法:讲解Java基本语法、面向对象编程思想及常用类库。
8.案例分析法:分析实际天气查询系统的案例,引导学生运用Java编程实现。
29.与地理学科整合:在编程实现天气查询系统时,引入地理知识,如经纬度、地理位置等。
30.与数学学科整合:在数据分析部分,运用数学知识,如统计学、概率论等,对天气数据进行分析。
十一、社会实践和应用
为了培养学生的创新能力和实践能力,本章节可设计以下社会实践和应用教学活动:
31.学生参观气象局,了解气象观测、预报等实际工作。
23.定期检查学生作业,了解学生对知识的掌握程度,对教学方法进行调整。
24.课堂提问和学生反馈,了解学生的学习兴趣和需求,调整教学内容和进度。
25.学期末进行教学总结,对教学方法、教学内容等进行全面反思,为下一学期的教学做好准备。
九、教学创新
为了提高本章节的教学吸引力和互动性,激发学生的学习热情,教师可尝试以下教学创新方法:
15.作业:评估学生提交的作业质量,包括代码实现、注释规范、问题解决能力等,占总评的30%。
16.考试:进行一次期末考试,评估学生对Java基本语法、面向对象编程和常用类库的掌握程度,占总评的40%。
评估方式应客观、公正,能够全面反映学生的学习成果。教师应及时给予反馈,帮助学生提高。
六、教学安排
本章节的教学安排如下:
32.鼓励学生参与天气相关的社会公益活动,如环保、减灾等。
33.让学生结合当地实际情况,开发具有地域特色的天气查询系统。
新浪新闻采集方法
新浪新闻采集方法本文介绍使用八爪鱼爬虫软件采集新浪新闻的方法。
采集网站:/china/采集的内容包括:新闻标题,新闻正文使用功能点:●列表及详细信息采集/tutorial/fylbxq7.aspx?t=1●Ajax点击加载●Xpath修改●自定义数据字段步骤1:创建新浪新闻爬虫采集任务1)进入主界面,选择“自定义采集”新浪新闻爬虫采集步骤12)将要采集的网址URL复制粘贴到网站输入框中,点击“保存网址”新浪新闻爬虫采集步骤2步骤2:创建列表循环1)打开网页之后,鼠标选中第一个新闻列表的标题,系统会自动识别出其他相似的链接,然后在右面的提示框中选择“选中全部”新浪新闻爬虫采集步骤32)接着选择“采集以下链接文本”新浪新闻爬虫采集步骤4然后选择“点击该链接”。
新浪新闻爬虫采集步骤5步骤3:提取详细信息1)进入列表详情页面,鼠标选中文章内容第一段,系统会自动识别出其他相似的链接,然后在右面的提示框中选择“选中全部”,新浪新闻爬虫采集步骤6之后选择“采集以下元素文本”新浪新闻爬虫采集步骤72)选完需要的数据以后,可以打开右上角的流程按钮,对字段进行修改。
新浪新闻爬虫采集步骤83)选中提取数据的步骤,鼠标点击“自定义数据字段”新浪新闻爬虫采集步骤9之后选择“自定义数据合并方式新浪新闻爬虫采集步骤10勾选第二个选项,同一字段合并为同一行新浪新闻爬虫采集步骤11步骤4:修改Xpath及高级选项设置1)选中整个“循环步骤”,打开“高级选项”,可以看到,八爪鱼默认生成的元素列表的Xpath并不能定位到所有的文章,所以需要修改新浪新闻爬虫采集步骤122)在火狐浏览器中打开要采集的网页并观察源码。
观察网页源码,修改此条Xpath为:“//p”, 将修改后的Xpath,复制粘贴到八爪鱼中所示位置,然后点击“确定”。
新浪新闻爬虫采集步骤13由于网站涉及到Ajax新浪新闻爬虫采集步骤14步骤5:新浪新闻数据采集及导出1)点击左上角的“保存”,然后点击“开始采集”,选择“启动本地采集”新浪新闻爬虫采集步骤152)采集完成后,会跳出提示,选择“导出数据”,选择“合适的导出方式”,将采集好的数据导出, 一份完好的新浪新闻数据就导出来了,这里我们选择excel作为导出为格式,数据导出后如下图新浪新闻爬虫采集步骤16相关采集教程:新浪博客文章采集:/tutorialdetail-1/sinablogcj.html uc头条文章采集:/tutorialdetail-1/ucnewscj.html 文章采集:/blog/224-2.html自媒体文章采集:/tutorialdetail-1/wyhcj.html公众号文章采集:/tutorialdetail-1/wxcjimg.html 爆文采集:/tutorialdetail-1/baowencj.html八爪鱼——90万用户选择的网页数据采集器。
基于API天气数据抓取的特定网络爬虫的研究与实现
基于API天气数据抓取的特定网络爬虫的研究与实现基于API天气数据抓取的特定网络爬虫的研究与实现一、引言随着互联网的快速发展,数据的获取和利用成为了各行各业不可或缺的一部分。
爬虫技术作为一种有效的网络数据获取手段,被广泛应用于信息搜集、舆情监测、市场调研等多个领域。
而天气数据作为一种具有重要价值的信息资源,对于农业、交通、旅游等行业至关重要。
因此,基于API天气数据抓取的特定网络爬虫的研究与实现具有重要的现实意义。
二、API与天气数据抓取API(Application Programming Interface)是指应用程序接口,是不同软件系统之间交互的一种方式。
在互联网应用中,API常用于访问外部服务提供商的开放数据。
天气数据API是指提供天气相关信息的接口,可以通过调用API获取所需数据。
天气数据抓取是指通过网络爬虫技术获取天气信息的过程。
传统的爬虫技术通常从网页中抓取数据,但随着API的流行和应用,天气数据的获取也可以通过调用API实现。
相比于传统的网页抓取方式,API天气数据抓取具有更高的效率和数据准确性。
三、特定网络爬虫的研究与实现1. 爬虫的工作原理爬虫是一种自动获取信息的程序,它通过模拟人的行为,从互联网上收集各种信息。
特定网络爬虫是指针对某种特定数据进行定制化开发的爬虫程序。
在开发特定网络爬虫时,首先要确定需要抓取的特定数据类型,然后根据数据源的不同,选择合适的爬取策略。
2. API天气数据抓取的实现步骤(1)明确需求:确定需要获取的具体天气数据,如温度、湿度、风速等。
(2)选择天气数据API:根据需求选择合适的天气数据API,获取API的调用方式和参数。
(3)编写代码:使用编程语言编写网络爬虫程序,通过调用API获取天气数据,并将数据保存或进行进一步处理。
(4)数据解析:对获取到的API响应数据进行解析,提取出所需的天气数据。
(5)数据存储:将解析得到的数据存储到数据库或文件中,便于后续的数据分析和应用。
Java实现天气预报
Java实现天⽓预报通过Java实现天⽓预报,该⽅法必须联⽹import org.apache.http.client.config.RequestConfig;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClientBuilder;import org.apache.http.util.EntityUtils;import java.io.IOException;public class GetWeather {public static String getResult(String url) {try (CloseableHttpClient httpClient = HttpClientBuilder.create().build();CloseableHttpResponse response = httpClient.execute(new HttpGetConfig(url))) {String result = EntityUtils.toString(response.getEntity(),"utf-8"); //设置编码,防⽌乱码return result;} catch (IOException e) {e.printStackTrace();return "";}}}class HttpGetConfig extends HttpGet {public HttpGetConfig(String url) {super(url);setDefaultConfig();}private void setDefaultConfig() {this.setConfig(RequestConfig.custom().setConnectionRequestTimeout(1000 * 10).setConnectTimeout(1000 * 10).setSocketTimeout(1000 * 10).build());this.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0"); }}import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes.Element;import org.jsoup.select.Elements;import java.util.ArrayList;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;public class GetWeatherMain {// public static void main(String[] args) {// GetWeatherMain htmlUtilTest= new GetWeatherMain();// htmlUtilTest.searchWeather("101110200");// }/**** @param* @return获取未来7天的天⽓预报*/public List<Map<String,String>> searchWeather(String id){String result= GetWeather.getResult("/weather/"+id+".shtml");Document document= Jsoup.parse(result);Elements elements;// 获取⽇期和星期elements=document.select("h1");List<String> dateList=new ArrayList<>();List<String> dayList=new ArrayList<>();for (int i = 0; i < 7; i++) {String text=elements.get(i).text();int length=text.length();dateList.add(text.substring(0,length-4));dayList.add(text.substring(length-3,length-1));}//System.out.println(dateList);//System.out.println(dayList);// 获取天⽓elements=document.select("p[class=wea]");List<String> weatherList=new ArrayList<>();for (Element item : elements) {weatherList.add(item.text());}//System.out.println(weatherList);// 获取温度,最⾼温和最低温elements=document.select("p[class=tem]");int i=0;List<String> highTempList=new ArrayList<>();List<String> lowTempList=new ArrayList<>();for (Element item : elements) {highTempList.add(item.select("span").text()+"℃");lowTempList.add(item.select("i").text());}//System.out.println(highTempList);//System.out.println(lowTempList);// 封装结果,每天⼀⾏,未来7天List<Map<String,String>> list=new ArrayList<>();for (int j = 0; j < 7; j++) {Map<String,String> map=new LinkedHashMap<>();map.put("⽇期",dateList.get(j));map.put("day",dayList.get(j));map.put("天⽓",weatherList.get(j));map.put("最⾼温度",highTempList.get(j));map.put("最底温度",lowTempList.get(j));list.add(map);}//list.forEach(System.out::println);return list;}}测试类public static void main(String[] args){String msg = "";GetWeatherMain getWeatherMain = new GetWeatherMain();List<Map<String,String>> list = getWeatherMain.searchWeather("101240101"); //这⾥需要传⼊城市ID,可以通过该链接进⾏查看msg = "【南昌地区天⽓预报】\n"+ list.get(0).toString() +"\n"+ "-----------------------------" + "\n" + list.get(1).toString(); //这⾥只获取两天的天⽓预报 msg = msg.replace('=',':').replace('{',' ').replace('}',' ').replace(',','\n');System.out.println(msg);}。
java 获取天气预报 简单例子 保存数据库版
Java 获取天气预报信息1项目结构2准备条件开始之前首先需要下载dom4j、mysql 驱动、连接池架包。
文件分别如下:dom4j-1.6.1.jarmysql-connector-java-5.1.22-bin.jarcommons-dbcp-1.4.jarcommons-pool-1.6.jar3代码讲解3.1数据连接代码在项目的目录结构下,找到config .xml文件。
打开盖文件,在该文件的下面有<db></db>的标签。
在该标签中填写关于数据的连接。
如下图:在该文件中,数据路的连接只需要修改如下的代码:<db><db_driver>com.mysql.jdbc.Driver</db_driver><db_url>jdbc:mysql://数据库IP:3306/tianqi</db_url><db_username>用户名</db_username><db_password>密码</db_password></db>3.2创建数据脚本城市信息表:CREATE TABLE `city` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`city` varchar(255) DEFAULT NULL,`sheng` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8; 天气信息表:CREATE TABLE `tianqi` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`city` varchar(255) DEFAULT NULL,`sheng` varchar(255) DEFAULT NULL,`update_time` varchar(20) DEFAULT NULL,`shikuang1` varchar(500) DEFAULT NULL,`kongqi1` varchar(200) DEFAULT NULL,`tianqi1` varchar(500) DEFAULT NULL,`gaikuang1` varchar(200) DEFAULT NULL,`qiwen1` varchar(200) DEFAULT NULL,`fengli1` varchar(200) DEFAULT NULL,`tupian_1_1` varchar(60) DEFAULT NULL,`tupian_1_2` varchar(60) DEFAULT NULL,`gaikuang2` varchar(200) DEFAULT NULL,`qiwen2` varchar(200) DEFAULT NULL,`fengli2` varchar(200) DEFAULT NULL,`tupian_2_1` varchar(60) DEFAULT NULL,`tupian_2_2` varchar(60) DEFAULT NULL,`gaikuang3` varchar(200) DEFAULT NULL,`qiwen3` varchar(200) DEFAULT NULL,`fengli3` varchar(200) DEFAULT NULL,`tupian_3_1` varchar(60) DEFAULT NULL,`tupian_3_2` varchar(60) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;3.3城市信息配置在config.xml文件中,复制如下的代码:<sheng_name name="河南"><city_name name="郑州" value="y"/><city_name name="周口" value="y"/><city_name name="开封" value="y"/><city_name name="洛阳" value="y"/><city_name name="商丘" value="n"/><city_name name="新乡" value="n"/><city_name name="焦作" value="n"/></sheng_name>sheng_name:省的名称city_name:属于该省的城市。
使用轻量级JAVA爬虫Gecco工具抓取新闻DEMO
使⽤轻量级JAVA爬⾍Gecco⼯具抓取新闻DEMO写在前⾯最近看到Gecoo爬⾍⼯具,感觉⽐较简单好⽤,所有写个DEMO测试⼀下,抓取⽹站,主要抓取新闻的标题和发布时间做为抓取测试对象。
抓取HTML节点通过像Jquery选择器⼀样选择节点,⾮常⽅便,Gecco代码主要利⽤注解实现来实现URL匹配,看起来⽐较简洁美观。
Gecoo GitHub地址Gecoo 作者博客添加Maven依赖<dependency><groupId>com.geccocrawler</groupId><artifactId>gecco</artifactId><version>1.0.8</version></dependency>编写抓取列表页⾯1 @Gecco(matchUrl = "/home.html?pageIndex={pageIndex}&pageSize={pageSize}",pipelines = "zJNewsListPipelines")2public class ZJNewsGeccoList implements HtmlBean {3 @Request4private HttpRequest request;5 @RequestParameter6private int pageIndex;7 @RequestParameter8private int pageSize;9 @HtmlField(cssPath = "#content > div > div > div.con_index > div.r.main_mod > div > ul > li > dl > dt > a")10private List<HrefBean> newList;11 }1 @PipelineName("zJNewsListPipelines")2public class ZJNewsListPipelines implements Pipeline<ZJNewsGeccoList> {3public void process(ZJNewsGeccoList zjNewsGeccoList) {4 HttpRequest request=zjNewsGeccoList.getRequest();5for (HrefBean bean:zjNewsGeccoList.getNewList()){6//进⼊祥情页⾯抓取7 SchedulerContext.into(request.subRequest(""+bean.getUrl()));8 }9int page=zjNewsGeccoList.getPageIndex()+1;10 String nextUrl = "/home.html?pageIndex="+page+"&pageSize=100";11//抓取下⼀页12 SchedulerContext.into(request.subRequest(nextUrl));13 }14 }编写抓取祥情页⾯1 @Gecco(matchUrl = "/news/{code}.html" ,pipelines = "zjNewsDetailPipeline")2public class ZJNewsDetail implements HtmlBean {34 @Text5 @HtmlField(cssPath = "#headline")6private String title ;78 @Text9 @HtmlField(cssPath = "#content > div > div.news_con > div.news-content > div:nth-child(1) > div > p.go-left.post-time.c-gray")10private String createTime;11 }1 @PipelineName("zjNewsDetailPipeline")2public class ZJNewsDetailPipeline implements Pipeline<ZJNewsDetail> {3public void process(ZJNewsDetail zjNewsDetail) {4 System.out.println(zjNewsDetail.getTitle()+" "+zjNewsDetail.getCreateTime());5 }6 }启动主函数1public class Main {2public static void main(String [] rags){3 GeccoEngine.create()4//⼯程的包路径5 .classpath("com.zhaochao.gecco.zj")6//开始抓取的页⾯地址7 .start("/home.html?pageIndex=1&pageSize=100") 8//开启⼏个爬⾍线程9 .thread(10)10//单个爬⾍每次抓取完⼀个请求后的间隔时间11 .interval(10)12//使⽤pc端userAgent13 .mobile(false)14//开始运⾏15 .run();16 }17 }抓取结果项⽬完成代码。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据挖掘下面是一个例子,抓取新浪天气新闻的数据我做了个程序把新浪上的天气新闻抓过来存到本地,考虑访问速度问题,新闻中的图片也要保存到本地。
程序如下package .weather1;import java.io.BufferedReader;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import .URL;import .URLConnection;import java.util.regex.Matcher;import java.util.regex.Pattern;import mons.logging.Log;import mons.logging.LogFactory;import .update.Getdata;/*** 正则方式抓取新浪天气新闻上的新闻* 地址/weather/news/index.html* @param args*/public class Newlist {private static final Log log = LogFactory.getLog(Newlist.class);/*** 测试* @param args*/public static void main(String args[]){Newlist n=new Newlist();String[] k=n.getNewList();for (int i=0;i<k.length;i++){System.out.println(k[i].replace("href=\"", "href=\"newinfo2.jsp?url="));}String[] m=n.getNewinfo("news/2008/1119/35261.html");for (int l=0;l<m.length;l++){System.out.println(m[l]);}}/*** 由url地址获得新闻内容string[]* 新闻中的图片下载到本地,文中新闻地址改成本地地址* @param url* @return*/public String[] getNewinfo(String url){String URL="/"+url;//30是指取30段满足给出的正则条件的字符串,如果只找出10个,那数组后面的全为nullString[] s = analysis("<p>(.*?)</p>" , getContent(URL) , 30);for (int i=0;i<s.length;i++){Pattern sp = pile("src=\"(.*?)\"");Matcher matcher = sp.matcher(s[i]);if (matcher.find()){String imageurl=analysis("src=\"(.*?)\"" , s[i] , 1)[0];if(!imageurl.startsWith("http://")){imageurl="/"+imageurl;}System.out.println("新闻有图片:"+imageurl);String content=getContent(imageurl);String[] images=imageurl.split("/");String imagename=images[images.length-1];System.out.println("图片名:"+imagename);try {File fwl = new File(imagename);PrintWriter outl = new PrintWriter(fwl);outl.println(content);outl.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("s[i]:"+s[i]);//修改文件图片地址s[i]=s[i].replace(analysis("src=\"(.*?)\"" , s[i] , 1)[0], imagename);}}return s;}public String[] getNewList(){String url="/weather/news/index.html";return getNewList(getContent(url));}private String[] getNewList(String content ){//String[] s = analysis("align=\"center\" valign=\"top\"><img src=\"../images/a(.*?).gif\" width=\"70\" height=\"65\"></td>" , content , 50);String[] s = analysis("<li>(.*?)</li>" , content , 50);return s;}private String[] analysis(String pattern, String match , int i){Pattern sp = pile(pattern);Matcher matcher = sp.matcher(match);String[] content = new String[i];for (int i1 = 0; matcher.find(); i1++){content[i1] = matcher.group(1);}//下面一段是为了剔除为空的串int l=0;for (int k=0;k<content.length;k++){if (content[k]==null){l=k;break;}}String[] content2;if (l!=0){content2=new String[l];for (int n=0;n<l;n++){content2[n]=content[n];}return content2;}else{return content;}}/*** 由地址获取网页内容* @param strUrl* @returnprivate String getContent(String strUrl){try{//URL url = new URL(strUrl);//BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));URLConnection uc = new URL(strUrl).openConnection();//通过修改http头的User-Agent来伪装成是通过浏览器提交的请求uc.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 5.0; Windows XP; DigExt)");System.out.println("-----------------------------------------");System.out.println("Content-Length: "+uc.getContentLength());System.out.println("Set-Cookie: "+uc.getHeaderField("Set-Cookie"));System.out.println("-----------------------------------------");//获取文件头信息System.out.println("Header"+uc.getHeaderFields().toString());System.out.println("-----------------------------------------");BufferedReader br=new BufferedReader(new InputStreamReader(uc.getInputStream(), "gb2312"));String s = "";StringBuffer sb=new StringBuffer();while((s = br.readLine())!=null){sb.append(s+"\r\n");}System.out.println("长度+"+sb.toString().length());return sb.toString();}catch(Exception e){return "error open url" + strUrl;}}*/public static String getContent (String strUrl){URLConnection uc = null;String all_content=null;try {all_content =new String();URL url = new URL(strUrl);uc = url.openConnection();uc.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 5.0; Windows XP; DigExt)");System.out.println("-----------------------------------------");System.out.println("Content-Length: "+uc.getContentLength());System.out.println("Set-Cookie: "+uc.getHeaderField("Set-Cookie"));System.out.println("-----------------------------------------");//获取文件头信息System.out.println("Header"+uc.getHeaderFields().toString());System.out.println("-----------------------------------------");if (uc == null)return null;InputStream ins = uc.getInputStream();ByteArrayOutputStream outputstream = new ByteArrayOutputStream();byte[] str_b = new byte[1024];int i = -1;while ((i=ins.read(str_b)) > 0) {outputstream.write(str_b,0,i);}all_content = outputstream.toString();// System.out.println(all_content);} catch (Exception e) {e.printStackTrace();log.error("获取网页内容出错");}finally{uc = null;}// return new String(all_content.getBytes("ISO8859-1"));System.out.println(all_content.length());return all_content;}}现在的问题是:图片下载不全,我用后面两种getContent方法下图片,下来的图片大小都和文件头里获得的Content-Length,也就是图片的实际大小不符,预览不了。