java爬取最近30天天气预报实战
首先看看原网站部分代码
<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级"
}
]
}
}