当前位置: 首页 > news >正文

做的好的商城网站南昌网站搭建公司 赣ICP

做的好的商城网站,南昌网站搭建公司 赣ICP,注册一个免费的网站,做响应式网站项目需要未来40天气象,找了一圈气象api,不是收费就是不支持未来40天,干脆写了个爬虫自动爬取气象网站的数据。以前都是用Python写的,重新拾起来再用Java写别有一番风味。 目标气象网站:西安天气预报40天_西安天气预报…

项目需要未来40天气象,找了一圈气象api,不是收费就是不支持未来40天,干脆写了个爬虫自动爬取气象网站的数据。以前都是用Python写的,重新拾起来再用Java写别有一番风味。

目标气象网站:西安天气预报40天_西安天气预报40天查询,西安未来40天天气预报- 东方天气

第三方依赖:

<dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.15.3</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.1.0</version>
</dependency>

代码:

package com.test.main;import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;import java.io.FileOutputStream;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;@Slf4j
public class weatherSpider {public static void main(String[] args) {List<WeatherInfo> weatherInfos = new ArrayList<>();String url = "https://tianqi.eastday.com/xian/40/"; // 目标网页URL// 获取前两天的日期LocalDate twoDaysAgo = LocalDate.now().minusDays(2);// 设置日期格式DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");try {// 设置用户代理,尝试绕过访问限制Document document = Jsoup.connect(url).userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3").timeout(10000) // 设置超时时间.get();// 查找所有class为temp的div标签Elements tempElements = document.select("div.temp");// 遍历所有找到的div标签for (Element tempElement : tempElements) {// 获取div标签内的所有span标签Elements spanElements = tempElement.select("span");// 遍历所有span标签并打印内容for (Element spanElement : spanElements) {String spanText = spanElement.text();System.out.println(spanText);String lowTemp = spanText.split("~")[0];String highTempC = spanText.split("~")[1];String highTemp = highTempC.substring(0, highTempC.length() - 1);System.out.println("日期:" + twoDaysAgo.format(formatter) + " 温度:" + lowTemp + " ~ " + highTemp);WeatherInfo weatherInfo = new WeatherInfo();weatherInfo.setDate(twoDaysAgo.format(formatter));weatherInfo.setLowTemp(lowTemp); // 示例最低气温weatherInfo.setHighTemp(highTemp); // 示例最高气温weatherInfos.add(weatherInfo);twoDaysAgo = twoDaysAgo.plusDays(1);break;}}// 写入ExcelwriteWeatherToExcel(weatherInfos, "C:\\Users\\Xylon\\Desktop\\weather_forecast.xlsx");} catch (Exception e) {throw new RuntimeException(e);}}// 将天气数据写入Excelprivate static void writeWeatherToExcel(List<WeatherInfo> weatherInfos, String filePath) throws Exception {try (Workbook workbook = new XSSFWorkbook()) {Sheet sheet = workbook.createSheet("Weather Forecast");// 创建表头Row headerRow = sheet.createRow(0);String[] headers = {"Date", "LowTemp", "HighTemp"};for (int i = 0; i < headers.length; i++) {Cell cell = headerRow.createCell(i);cell.setCellValue(headers[i]);}// 写入天气数据for (int i = 0; i < weatherInfos.size(); i++) {Row row = sheet.createRow(i + 1);WeatherInfo weatherInfo = weatherInfos.get(i);row.createCell(0).setCellValue(weatherInfo.getDate());row.createCell(1).setCellValue(weatherInfo.getLowTemp());row.createCell(2).setCellValue(weatherInfo.getHighTemp());}// 写入文件try (FileOutputStream fileOut = new FileOutputStream(filePath)) {workbook.write(fileOut);}System.out.println("Weather data has been written to " + filePath);} catch (Exception e) {e.printStackTrace();}}// 天气信息类@Setter@Getterstatic class WeatherInfo {private String date;private String lowTemp;private String highTemp;}}

http://www.dtcms.com/a/469994.html

相关文章:

  • 软件测试资源笔记(4万字,持续更新中)
  • 做外贸网站做成哪种形式好WordPress购物个人中心
  • LeetCode 395 - 至少有 K 个重复字符的最长子串
  • 科技有限公司可以做网站建设吗成都网站网络建设
  • Qt绘制折线图
  • Idea中新建package包,变成了Directory
  • 如何自建淘宝客网站wordpress 知笔墨
  • Python爬虫实战:腾讯控股2024年资产负债分析
  • AI-调查研究-100-具身智能 现代AI方法全解析:强化学习、模仿学习与Transformer在机器人控制中的应用
  • Docker核心技术:深入理解网络模式 ——Host/None/Container 模式与混合云原生架构实践
  • 南通市住房城乡建设局网站磁力蜘蛛种子搜索
  • 解决HTML塌陷的方法
  • sqlite 使用: 03-问题记录:在使用 sqlite3_bind_text 中设置 SQLITE_STATIC 参数时,处理不当造成的字符乱码
  • 网站建设与维护难不难为什么找别人做网站
  • 广州木马网站建设公司医院门户网站建设规划
  • 大模型学习之 深入理解编码器与解码器
  • pyqt 触摸屏监听
  • C++ Primer Plus 第六版 第十三章 编程题
  • 大模型前世今生(十二):Hessian矩阵
  • 蛙跳积分法:分子动力学模拟中的高效数值积分技术
  • 详解 SNMPv1 与 SNMPv2 Trap 格式
  • 书法网站建设成都微信公众号制作
  • 宜春网站制作公司wordpress图片上传慢
  • Python串口通信与MQTT物联网网关:连接STM32与物联网平台
  • MyLanViewer(局域网IP扫描软件)
  • 湛江专业建站推荐40平米小户型装修效果图
  • 147.《手写实现 Promise.all 与 Promise.race》
  • 【HarmonyOS】异步并发和多线程并发
  • 使用docker 安装dragonfly带配置文件(x86和arm)版本
  • 企业信息型网站有哪些网站建设塞西