美文网首页Java web
java爬取最近30天天气预报实战

java爬取最近30天天气预报实战

作者: Ktry | 来源:发表于2020-03-25 09:28 被阅读0次

    首先看看原网站部分代码

    <div class="weatherbox3">
                <div class="box_day">
                    
                            <div class="table_day tbg">
                                                        <a href="/gongan/?qd=tq30" title="公安今天天气">
                                                                <h3><b>03月25日</b>  <em>今天</em></h3>
                                <ul>
                                    <li class="img"><img src="//static.tianqistatic.com/static/tianqi2018/ico2/b7.png" /></li>
                                    <li class="temp">小雨到中雨  17~<b>24</b>℃</li>
                                    <li>南风 3级</li>
                                </ul>
                                                </a>
                                                </div>
                        
                            <div class="table_day tbg">
                                                        <a href="/gongan/mingtian/?qd=tq30" title="公安明天天气">
                                                                <h3><b>03月26日</b>  <em>明天</em></h3>
                                <ul>
                                    <li class="img"><img src="//static.tianqistatic.com/static/tianqi2018/ico2/b7.png" /></li>
                                    <li class="temp">小雨到大雨  11~<b>23</b>℃</li>
                                    <li>南风 4级</li>
                                </ul>
                                                </a>
                                                </div>
                        
                            <div class="table_day tbg">
                                                        <a href="/gongan/houtian/?qd=tq30" title="公安后天天气">
                                                                <h3><b>03月27日</b>  <em>后天</em></h3>
                                <ul>
                                    <li class="img"><img src="//static.tianqistatic.com/static/tianqi2018/ico2/b7.png" /></li>
                                    <li class="temp">小雨到中雨  8~<b>11</b>℃</li>
                                    <li>北风 5级</li>
                                </ul>
                                                </a>
                                                </div>
                        
                            <div class="table_day ">
                                                            <a href="/tianqi/gongan/20200328.html?qd=tq30" title="公安2020年03月28日天气">
                                                        <h3><b>03月28日</b>  星期六</h3>
                                <ul>
                                    <li class="img"><img src="//static.tianqistatic.com/static/tianqi2018/ico2/b2.png" /></li>
                                    <li class="temp">阴  9~<b>14</b>℃</li>
                                    <li>东北风 3级</li>
                                </ul>
                                                </a>
                                                </div>
                        
                            <div class="table_day ">
                                                            <a href="/tianqi/gongan/20200329.html?qd=tq30" title="公安2020年03月29日天气">
                                                        <h3><b>03月29日</b>  星期日</h3>
                                <ul>
                                    <li class="img"><img src="//static.tianqistatic.com/static/tianqi2018/ico2/b7.png" /></li>
                                    <li class="temp">小雨到大雨  8~<b>11</b>℃</li>
                                    <li>东北风 3级</li>
                                </ul>
                                                </a>
                                                </div>
                        
                            <div class="table_day ">
                                                            <a href="/tianqi/gongan/20200330.html?qd=tq30" title="公安2020年03月30日天气">
                                                        <h3><b>03月30日</b>  星期一</h3>
                                <ul>
                                    <li class="img"><img src="//static.tianqistatic.com/static/tianqi2018/ico2/b2.png" /></li>
                                    <li class="temp">阴  10~<b>16</b>℃</li>
                                    <li>西北风 2级</li>
                                </ul>
                                                </a>
                                                </div>
                        
                            <div class="table_day ">
                                                            <a href="/tianqi/gongan/20200331.html?qd=tq30" title="公安2020年03月31日天气">
                                                        <h3><b>03月31日</b>  星期二</h3>
                                <ul>
                                    <li class="img"><img src="//static.tianqistatic.com/static/tianqi2018/ico2/b1.png" /></li>
                                    <li class="temp">多云  10~<b>18</b>℃</li>
                                    <li>南风 2级</li>
                                </ul>
                                                </a>
                                                </div>
                        
                            <div class="table_day ">
                                                        <h3><b>04月01日</b>  星期三</h3>
                                <ul>
                                    <li class="img"><img src="//static.tianqistatic.com/static/tianqi2018/ico2/b7.png" /></li>
                                    <li class="temp">小雨到中雨  12~<b>18</b>℃</li>
                                    <li>东北风 3级</li>
                                </ul>
                                                </div>
                        
                            <div class="table_day ">
                                                        <h3><b>04月02日</b>  星期四</h3>
                                <ul>
                                    <li class="img"><img src="//static.tianqistatic.com/static/tianqi2018/ico2/b7.png" /></li>
                                    <li class="temp">小雨  10~<b>13</b>℃</li>
                                    <li>东北风 3级</li>
                                </ul>
                                                </div>
                        
                            <div class="table_day ">
                                                        <h3><b>04月03日</b>  星期五</h3>
                                <ul>
                                    <li class="img"><img src="//static.tianqistatic.com/static/tianqi2018/ico2/b7.png" /></li>
                                    <li class="temp">小雨到中雨  10~<b>13</b>℃</li>
                                    <li>北风 2级</li>
                                </ul>
                                                </div>
                        
                            <div class="table_day ">
                                                        <h3><b>04月04日</b>  星期六</h3>
                                <ul>
                                    <li class="img"><img src="//static.tianqistatic.com/static/tianqi2018/ico2/b1.png" /></li>
                                    <li class="temp">多云  12~<b>17</b>℃</li>
                                    <li>西北风 2级</li>
                                </ul>
                                                </div>
                        
                            <div class="table_day ">
                                                        <h3><b>04月05日</b>  星期日</h3>
                                <ul>
                                    <li class="img"><img src="//static.tianqistatic.com/static/tianqi2018/ico2/b1.png" /></li>
                                    <li class="temp">多云  12~<b>17</b>℃</li>
                                    <li>西南风 2级</li>
                                </ul>
                                                </div>
                        
                            <div class="table_day ">
                                                        <h3><b>04月06日</b>  星期一</h3>
                                <ul>
                                    <li class="img"><img src="//static.tianqistatic.com/static/tianqi2018/ico2/b2.png" /></li>
                                    <li class="temp">阴  11~<b>17</b>℃</li>
                                    <li>西北风 2级</li>
                                </ul>
                                                </div>
                        
                            <div class="table_day ">
                                                        <h3><b>04月07日</b>  星期二</h3>
                                <ul>
                                    <li class="img"><img src="//static.tianqistatic.com/static/tianqi2018/ico2/b1.png" /></li>
                                    <li class="temp">多云  14~<b>19</b>℃</li>
                                    <li>东北风 3级</li>
                                </ul>
                                                </div>
                        
                            <div class="table_day ">
                                                        <h3><b>04月08日</b>  星期三</h3>
                                <ul>
                                    <li class="img"><img src="//static.tianqistatic.com/static/tianqi2018/ico2/b1.png" /></li>
                                    <li class="temp">多云  15~<b>22</b>℃</li>
                                    <li>东南风 2级</li>
                                </ul>
                                                </div>
                        
                            <div class="table_day ">
                                                        <h3><b>04月09日</b>  星期四</h3>
                                <ul>
                                    <li class="img"><img src="//static.tianqistatic.com/static/tianqi2018/ico2/b2.png" /></li>
                                    <li class="temp">阴  10~<b>15</b>℃</li>
                                    <li>东北风 小于3级</li>
                                </ul>
                                                </div>
                        
                            <div class="table_day ">
                                                        <h3><b>04月10日</b>  星期五</h3>
                                <ul>
                                    <li class="img"><img src="//static.tianqistatic.com/static/tianqi2018/ico2/b2.png" /></li>
                                    <li class="temp">阴  10~<b>10</b>℃</li>
                                    <li>西北风 小于3级</li>
                                </ul>
                                                </div>
                        
                            <div class="table_day ">
                                                        <h3><b>04月11日</b>  星期六</h3>
                                <ul>
                                    <li class="img"><img src="//static.tianqistatic.com/static/tianqi2018/ico2/b2.png" /></li>
                                    <li class="temp">阴  11~<b>18</b>℃</li>
                                    <li>东南风 小于3级</li>
                                </ul>
                                                </div>
                        
                            <div class="table_day ">
                                                        <h3><b>04月12日</b>  星期日</h3>
                                <ul>
                                    <li class="img"><img src="//static.tianqistatic.com/static/tianqi2018/ico2/b1.png" /></li>
                                    <li class="temp">多云  14~<b>19</b>℃</li>
                                    <li>暂无数据 小于3级</li>
                                </ul>
                                                </div>
                        
                            <div class="table_day ">
                                                        <h3><b>04月13日</b>  星期一</h3>
                                <ul>
                                    <li class="img"><img src="//static.tianqistatic.com/static/tianqi2018/ico2/b2.png" /></li>
                                    <li class="temp">阴  15~<b>20</b>℃</li>
                                    <li>暂无数据 小于3级</li>
                                </ul>
                                                </div>
                        
                            <div class="table_day ">
                                                        <h3><b>04月14日</b>  星期二</h3>
                                <ul>
                                    <li class="img"><img src="//static.tianqistatic.com/static/tianqi2018/ico2/b2.png" /></li>
                                    <li class="temp">阴  11~<b>19</b>℃</li>
                                    <li>西南风 小于3级</li>
                                </ul>
                                                </div>
                        
                            <div class="table_day ">
                                                        <h3><b>04月15日</b>  星期三</h3>
                                <ul>
                                    <li class="img"><img src="//static.tianqistatic.com/static/tianqi2018/ico2/b2.png" /></li>
                                    <li class="temp">阴  13~<b>21</b>℃</li>
                                    <li>西南风 小于3级</li>
                                </ul>
                                                </div>
                        
                            <div class="table_day ">
                                                        <h3><b>04月16日</b>  星期四</h3>
                                <ul>
                                    <li class="img"><img src="//static.tianqistatic.com/static/tianqi2018/ico2/b1.png" /></li>
                                    <li class="temp">多云  14~<b>24</b>℃</li>
                                    <li>西南风 小于3级</li>
                                </ul>
                                                </div>
                        
                            <div class="table_day ">
                                                        <h3><b>04月17日</b>  星期五</h3>
                                <ul>
                                    <li class="img"><img src="//static.tianqistatic.com/static/tianqi2018/ico2/b1.png" /></li>
                                    <li class="temp">多云  18~<b>26</b>℃</li>
                                    <li>东南风 小于3级</li>
                                </ul>
                                                </div>
                        
                            <div class="table_day ">
                                                        <h3><b>04月18日</b>  星期六</h3>
                                <ul>
                                    <li class="img"><img src="//static.tianqistatic.com/static/tianqi2018/ico2/b1.png" /></li>
                                    <li class="temp">多云  20~<b>28</b>℃</li>
                                    <li>东南风 小于3级</li>
                                </ul>
                                                </div>
                        
                            <div class="table_day ">
                                                        <h3><b>04月19日</b>  星期日</h3>
                                <ul>
                                    <li class="img"><img src="//static.tianqistatic.com/static/tianqi2018/ico2/b2.png" /></li>
                                    <li class="temp">阴  19~<b>26</b>℃</li>
                                    <li>西北风 小于3级</li>
                                </ul>
                                                </div>
                        
                            <div class="table_day ">
                                                        <h3><b>04月20日</b>  星期一</h3>
                                <ul>
                                    <li class="img"><img src="//static.tianqistatic.com/static/tianqi2018/ico2/b1.png" /></li>
                                    <li class="temp">多云  17~<b>20</b>℃</li>
                                    <li>西北风 小于3级</li>
                                </ul>
                                                </div>
                        
                            <div class="table_day ">
                                                        <h3><b>04月21日</b>  星期二</h3>
                                <ul>
                                    <li class="img"><img src="//static.tianqistatic.com/static/tianqi2018/ico2/b2.png" /></li>
                                    <li class="temp">阴  17~<b>21</b>℃</li>
                                    <li>西北风 小于3级</li>
                                </ul>
                                                </div>
                        
                            <div class="table_day ">
                                                        <h3><b>04月22日</b>  星期三</h3>
                                <ul>
                                    <li class="img"><img src="//static.tianqistatic.com/static/tianqi2018/ico2/b2.png" /></li>
                                    <li class="temp">阴  16~<b>21</b>℃</li>
                                    <li>暂无数据 小于3级</li>
                                </ul>
                                                </div>
                        
                            <div class="table_day ">
                                                        <h3><b>04月23日</b>  星期四</h3>
                                <ul>
                                    <li class="img"><img src="//static.tianqistatic.com/static/tianqi2018/ico2/b2.png" /></li>
                                    <li class="temp">阴  19~<b>24</b>℃</li>
                                    <li>暂无数据 小于3级</li>
                                </ul>
                                                </div>
                                    </div>
            </div>
            
    

    代码

    
    import com.example.api.util.BaseResult;
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import lombok.ToString;
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.nodes.Element;
    import org.jsoup.select.Elements;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.LinkedHashMap;
    
    /**
     * @Auyher: Ktry
     * @Date: 2020/3/19 23:29
     */
    @Controller
    public class Weather {
    
        /**
         *
         * @return 天气查询-返回最近30天的天气信息
         * @throws IOException
         */
        @ResponseBody
        @RequestMapping(value = {"weather"},method = {RequestMethod.GET})
        public BaseResult weather(@RequestParam(required = false,defaultValue = "")String site) throws Exception {
            if(site.equals("")){
                return new BaseResult("-1","请求出错");
            }
    
            ArrayList arrayList = new ArrayList();
            Res1 cs = new Res1();
    
            Document doc = null;
            doc = Jsoup.connect("https://www.tianqi.com/"+site+"/30").get();
    
            Element titles = doc.getElementsByClass("tit_img01").get(0);
            Element body = doc.getElementsByClass("box_day").get(0);
    
            cs.setTitle(titles.select("h1").get(0).text());
            cs.setImage(titles.select("img").get(0).attr("src"));
            cs.setTime(titles.select("span").get(0).text());
            cs.setToday(titles.select("p").get(0).text());
    
            Elements div = body.select("div.table_day");
    
            int i=0;
            for (Element v : div) {
                LinkedHashMap<String, String> map = new LinkedHashMap<>();
                map.put("when",v.select("h3").get(0).text());
                map.put("icon","https:"+v.select("img").get(0).attr("src"));
                map.put("temp",v.getElementsByClass("temp").get(0).text());
                map.put("wind",v.select("li").get(2).text());
    
                arrayList.add(map);
                i=1;
            };
    
            cs.setInfo(arrayList);
    
            if(i==1){
                return new BaseResult("200",cs);
            }else {
                return new BaseResult("-1","请求出错");
            }
    
    
        }
    
        @Data
        @AllArgsConstructor
        @NoArgsConstructor
        @ToString
        class Res1{
            private String title;
            private String image;
            private String time;
            private String today;
            private Object info;
        }
    
    }
    
    

    结果示例

    {
    "code": "200",
    "data": {
    "title": "荆州天气预报30天",
    "image": "http://pic.new.tianqistatic.com/tianqi/20170821/e328f1443bc61abfe9e74b62.jpeg",
    "time": "2020年03月25日 星期三 庚子年三月初二",
    "today": "今日天气:荆州区,多云转大雨,气温17℃~23℃,西北风1级,当前温度18℃。 温馨提示:今天可能要下雨,出门记得带伞",
    "info": [
    {
    "when": "03月25日 今天",
    "icon": "https://static.tianqistatic.com/static/tianqi2018/ico2/b7.png",
    "temp": "小雨到大雨 17~23℃",
    "wind": "南风 3级"
    },
    {
    "when": "03月26日 明天",
    "icon": "https://static.tianqistatic.com/static/tianqi2018/ico2/b7.png",
    "temp": "小雨到暴雨 11~22℃",
    "wind": "北风 3级"
    },
    {
    "when": "03月27日 后天",
    "icon": "https://static.tianqistatic.com/static/tianqi2018/ico2/b7.png",
    "temp": "小雨到中雨 7~12℃",
    "wind": "北风 5级"
    },
    {
    "when": "03月28日 星期六",
    "icon": "https://static.tianqistatic.com/static/tianqi2018/ico2/b2.png",
    "temp": "阴 7~15℃",
    "wind": "东北风 3级"
    },
    {
    "when": "03月29日 星期日",
    "icon": "https://static.tianqistatic.com/static/tianqi2018/ico2/b7.png",
    "temp": "小雨到中雨 6~12℃",
    "wind": "东北风 3级"
    },
    {
    "when": "03月30日 星期一",
    "icon": "https://static.tianqistatic.com/static/tianqi2018/ico2/b2.png",
    "temp": "阴 9~16℃",
    "wind": "北风 2级"
    },
    {
    "when": "03月31日 星期二",
    "icon": "https://static.tianqistatic.com/static/tianqi2018/ico2/b1.png",
    "temp": "多云 9~19℃",
    "wind": "南风 2级"
    },
    {
    "when": "04月01日 星期三",
    "icon": "https://static.tianqistatic.com/static/tianqi2018/ico2/b7.png",
    "temp": "小雨 11~18℃",
    "wind": "北风 3级"
    },
    {
    "when": "04月02日 星期四",
    "icon": "https://static.tianqistatic.com/static/tianqi2018/ico2/b2.png",
    "temp": "阴 10~13℃",
    "wind": "东北风 3级"
    },
    {
    "when": "04月03日 星期五",
    "icon": "https://static.tianqistatic.com/static/tianqi2018/ico2/b7.png",
    "temp": "小雨 10~13℃",
    "wind": "北风 2级"
    },
    {
    "when": "04月04日 星期六",
    "icon": "https://static.tianqistatic.com/static/tianqi2018/ico2/b1.png",
    "temp": "多云 11~17℃",
    "wind": "西北风 2级"
    },
    {
    "when": "04月05日 星期日",
    "icon": "https://static.tianqistatic.com/static/tianqi2018/ico2/b1.png",
    "temp": "多云 12~18℃",
    "wind": "西南风 2级"
    },
    {
    "when": "04月06日 星期一",
    "icon": "https://static.tianqistatic.com/static/tianqi2018/ico2/b2.png",
    "temp": "阴 11~18℃",
    "wind": "东北风 3级"
    },
    {
    "when": "04月07日 星期二",
    "icon": "https://static.tianqistatic.com/static/tianqi2018/ico2/b1.png",
    "temp": "多云 14~19℃",
    "wind": "东北风 3级"
    },
    {
    "when": "04月08日 星期三",
    "icon": "https://static.tianqistatic.com/static/tianqi2018/ico2/b1.png",
    "temp": "多云 15~22℃",
    "wind": "南风 2级"
    },
    {
    "when": "04月09日 星期四",
    "icon": "https://static.tianqistatic.com/static/tianqi2018/ico2/b2.png",
    "temp": "阴 9~13℃",
    "wind": "东北风 小于3级"
    },
    {
    "when": "04月10日 星期五",
    "icon": "https://static.tianqistatic.com/static/tianqi2018/ico2/b2.png",
    "temp": "阴 9~11℃",
    "wind": "东北风 小于3级"
    },
    {
    "when": "04月11日 星期六",
    "icon": "https://static.tianqistatic.com/static/tianqi2018/ico2/b2.png",
    "temp": "阴 9~19℃",
    "wind": "东南风 小于3级"
    },
    {
    "when": "04月12日 星期日",
    "icon": "https://static.tianqistatic.com/static/tianqi2018/ico2/b1.png",
    "temp": "多云 13~20℃",
    "wind": "暂无数据 小于3级"
    },
    {
    "when": "04月13日 星期一",
    "icon": "https://static.tianqistatic.com/static/tianqi2018/ico2/b2.png",
    "temp": "阴 15~21℃",
    "wind": "暂无数据 小于3级"
    },
    {
    "when": "04月14日 星期二",
    "icon": "https://static.tianqistatic.com/static/tianqi2018/ico2/b2.png",
    "temp": "阴 10~20℃",
    "wind": "西南风 小于3级"
    },
    {
    "when": "04月15日 星期三",
    "icon": "https://static.tianqistatic.com/static/tianqi2018/ico2/b2.png",
    "temp": "阴 11~21℃",
    "wind": "西北风 小于3级"
    },
    {
    "when": "04月16日 星期四",
    "icon": "https://static.tianqistatic.com/static/tianqi2018/ico2/b1.png",
    "temp": "多云 13~25℃",
    "wind": "东南风 小于3级"
    },
    {
    "when": "04月17日 星期五",
    "icon": "https://static.tianqistatic.com/static/tianqi2018/ico2/b1.png",
    "temp": "多云 18~26℃",
    "wind": "东南风 小于3级"
    },
    {
    "when": "04月18日 星期六",
    "icon": "https://static.tianqistatic.com/static/tianqi2018/ico2/b1.png",
    "temp": "多云 20~29℃",
    "wind": "东南风 小于3级"
    },
    {
    "when": "04月19日 星期日",
    "icon": "https://static.tianqistatic.com/static/tianqi2018/ico2/b2.png",
    "temp": "阴 18~26℃",
    "wind": "东北风 小于3级"
    },
    {
    "when": "04月20日 星期一",
    "icon": "https://static.tianqistatic.com/static/tianqi2018/ico2/b1.png",
    "temp": "多云 17~19℃",
    "wind": "西北风 小于3级"
    },
    {
    "when": "04月21日 星期二",
    "icon": "https://static.tianqistatic.com/static/tianqi2018/ico2/b2.png",
    "temp": "阴 16~21℃",
    "wind": "东北风 小于3级"
    },
    {
    "when": "04月22日 星期三",
    "icon": "https://static.tianqistatic.com/static/tianqi2018/ico2/b2.png",
    "temp": "阴 15~22℃",
    "wind": "东北风 小于3级"
    },
    {
    "when": "04月23日 星期四",
    "icon": "https://static.tianqistatic.com/static/tianqi2018/ico2/b2.png",
    "temp": "阴 19~24℃",
    "wind": "东北风 小于3级"
    }
    ]
    }
    }

    相关文章

      网友评论

        本文标题:java爬取最近30天天气预报实战

        本文链接:https://www.haomeiwen.com/subject/pextuhtx.html