Java web

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

2020-03-25  本文已影响0人  Ktry

首先看看原网站部分代码

<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级"
}
]
}
}

上一篇下一篇

猜你喜欢

热点阅读