java爬取深圳新房备案价

Java爬取深圳新房备案价

这是我做好效果,一共分3个页面
1、列表;2、统计;3、房源表

列表
在这里插入图片描述
价格分析页面
在这里插入图片描述
房源页面
在这里插入图片描述

一、如何爬取

第一步:获取深圳新房备案价

链接是:http://zjj.sz.gov.cn/ris/bol/szfdc/index.aspx
在这里插入图片描述

第二步:通过楼盘名查询获取明细

链接:http://zjj.sz.gov.cn:8004/

在这里插入图片描述
更多详情
在这里插入图片描述
获取到具体明细
在这里插入图片描述

数据库建立

爬取到的数据存放在mysql数据里面,建立自己新房价格数据。
第一个表:主列表设计 命名 t_fcProject
在这里插入图片描述
数据效果:
在这里插入图片描述
第二个表:楼栋 命名t_fcFloor

在这里插入图片描述
数据效果:
在这里插入图片描述
第三表:单元 命名:fcBranch

在这里插入图片描述
数据效果:
在这里插入图片描述
第四表:具体到房 命名:t_fcHouse
在这里插入图片描述
数据效果:
在这里插入图片描述
第五表:数据统计 命名:t_fcAnalyse

在这里插入图片描述
数据效果:
在这里插入图片描述

java代码

用到的是springboot,这里展示是service层

解析一下代码意思:
获取最新的时间,获取官网页面10条项目
日期相同则,比较取证号是否存在;日期不相同,比较是否在日期之前。

private List<FcProject> getListIndex() {
   
        //获取最新时间 从redis获取,获取不到从数据库获取
        Object o = redisUtil.get("checkFc");
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date d1 = new Date();
        if (o != null) {
   
            try {
   
                d1 = dateFormat.parse(o.toString());
            } catch (Exception e) {
   
                System.out.println("日期转化失败1");
            }
        } else {
   
            d1 = fcProjectMapper.queryNewDate();
            redisUtil.setValue("checkFc", dateFormat.format(d1));
        }
        //获取官方页面 最新10条
        String url = "http://zjj.sz.gov.cn/ris/bol/szfdc/index.aspx";
        Document doc = Jsoup.parse(httpsUtil.doGetHtml(url));
        Elements trs = doc.select("table").select("tr");

        List<FcProject> list = new ArrayList<>();
        for (int i = 1; i < trs.size() - 1; i++) {
   
            Elements tds = trs.get(i).select("td");
            //1-5 date 2023-11-24
            String dateStr = tds.get(5).text();
            //string => date
            Date d2 = null;
            try {
   
                d2 = dateFormat.parse(dateStr);
            } catch (Exception e) {
   
                System.out.println("日期转化失败2");
            }
            //日期相同则,比较取证号是否存在;日期不相同,比较是否在日期之前。
            if (d2 != null) {
   
                boolean isPass=false;
                //日期相同
                if (d2.equals(d1)) {
   
                    //判断取证号是否存在
                    isPass=fcProjectMapper.queryByProve(tds.get(1).text())==null;
                } else if (d2.after(d1)) {
   
                    //是否在日期之前
                    isPass=true;
                }

                if(isPass){
   
                    FcProject fcProject = new FcProject();
                    //1-1 prove
                    fcProject.setProve(tds.get(1).text());
                    //1-2 name
                    fcProject.setName(tds.get(2).text());
                    //1-4 region 龙岗
                    String region = tds.get(4).text();
                    fcProject.setRegion(regionStrToInt(region));
                    //日期
                    fcProject.setDate(d2);
                    ThrowException.illegal(fcProjectMapper.insertSelective(fcProject) < 1, "添加失败");
                    list.add(0, fcProject);
                }
            }
        }

        //删除redis日期
        if(!list.isEmpty()){
   
            redisUtil.del("checkFc");
        }
        return list;
    }

获取到有新项目之后,则有楼盘名称和取证号
通过楼盘名查询到具体地址,为了避免还用了取证号做一下对比,相同才取
把具体地址解析成 经纬度(在小程序就可以直接跳转地图形式做准备)
获取楼栋

private void handleAll(Integer id, String name, String prove) {
   
        //请求接口--查询项目
        Map<String, Object> mapProject = getProjectMap(

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/418311.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv9理性解读 | 网络结构损失函数耗时评估

论文&#xff1a;https://arxiv.org/pdf/2402.13616.pdfHuggingFace Demo&#xff1a;https://hf-mirror.com/spaces/kadirnar/Yolov9Github&#xff1a;https://github.com/WongKinYiu/yolov9 由台北中研院和台北科技大学等机构的研究团队推出的新的目标检测算法&#xff0c;…

应用存储与持久化数据卷

1、PV 引入场景&#xff1a; ① Deployment 管理的 pod&#xff0c;在做镜像升级的过程中&#xff0c;会产生新的 pod并且删除旧的 pod &#xff0c;新旧 pod 之间如何复用数据&#xff1f; ② 宿主机宕机的时候&#xff0c;如何实现带卷迁移&#xff1f; ③ 多个 pod 之间&…

基于springboot+vue的相亲网站

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Stable Video Diffusion(SVD)视频生成模型发布 1.1版

前言 近日&#xff0c;随着人工智能技术的飞速发展&#xff0c;图像到视频生成技术也迎来了新的突破。特别是Stable Video Diffusion&#xff08;SVD&#xff09;模型的最新版本1.1&#xff0c;它为我们带来了从静态图像生成动态视频的全新能力。本文将深入解析SVD 1.1版本的核…

gpt-3.5-turbo与星火认知大模型v3.5回答对比

创建kernel // Create a kernel with OpenAI chat completionKernel kernel Kernel.CreateBuilder().AddOpenAIChatCompletion(modelId:"使用的模型id" ,apiKey: "APIKey").Build();使用讯飞星火认知大模型的话&#xff0c;可以参考我这一篇文章&#xff…

Linux系统——Nginx负载均衡模式

目录 一、Nginx优点 二、Nginx配置项——Conf Upstream 模块 三、Nginx负载均衡 1.负载均衡策略 1.1轮询 1.2IP_hash 1.3URL_hash 1.4Least_conn 1.5Weight 1.6Fair 2.Nginx负载均衡配置状态参数 3.什么是会话保持 3.1会话保持有什么作用呢 3.2Nginx会话保持 3…

JVM工作原理与实战(四十一):ShenandoahGC原理

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、ShenandoahGC介绍 二、ShenandoahGC 1.0版本 三、ShenandoahGC 2.0版本 四、ShenandoahGC执行流程 总结 前言 JVM作为Java程序的运行环境&#xff0c;其负责解释和执行字节码&…

ywtool check命令及ywtool clean命令

一.ywtool check命令 1.1 ywtool check -I 1.2 ywtool check all 1.3 ywtool check io 1.4 ywtool check elk 1.5 ywtool check php 1.6 ywtool check mysql 1.7 ywtool check nginx 1.8 ywtool check system 1.9 ywtool check docker_nbip [容器名称] 1.10 ywtool check 1.10…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之FlowItem容器组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之FlowItem容器组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、FlowItem组件 子组件 可以包含子组件。 接口 FlowItem() 使用该接口来…

从0到1使用C++实现一个模拟器-1-【实现最简CPU】

文章目录 uint64_tstdstd::arrayCPU和CU类构造函数size_tstatic_caststd::ifstreamriscv64-unknown-elf-objcopy -O binary add-addi add-addi.binriscv64-unknown-elf-gcc -Wl,-Ttext0x0 -nostdlib -o add-addi add-addi.s-wlstd::hex std::setw() std::setfill()各自的用法he…

DOM 创建节点、添加节点和删除节点

创建元素节点 document.createElement(‘标签名’) 创建文本节点document.createTextNode ( 内容 ) 根据传入的标签名创建出一个空的元素对象创建出来的默认不显示&#xff0c;要成为别人的子元素才能显示&#xff0c;所以要结合appendChild使用 添加节点&#xff08;后面&am…

【数据结构与算法】回溯法解题20240301

这里写目录标题 一、78. 子集1、nums [1,2,3]为例把求子集抽象为树型结构2、回溯三部曲 二、90. 子集 II1、本题搜索的过程抽象成树形结构如下&#xff1a; 三、39. 组合总和1、回溯三部曲2、剪枝优化 四、LCR 082. 组合总和 II1、思路2、树形结构如图所示&#xff1a;3、回溯…

Kaggle 竞赛入门

打比赛不用写算法源码&#xff0c;应用的时候不用自己写。学习的时候可以自己写。 Kaggle 竞赛入门 认识 Kaggle 平台Kaggle竞赛知识前提结构化数据前提图像数据文本数据 Kaggle竞赛套路一个赛题的完整流程 认识 Kaggle 平台 Kaggle 官网 主页&#xff0c;比赛&#xff08;数据…

Git分布式版本控制系统——git学习准备工作

一、Git仓库介绍 开发者可以通过Git仓库来存储和管理文件代码&#xff0c;Git仓库分为两种&#xff1a; 本地仓库&#xff1a;开发人员自己电脑上的Git仓库 远程仓库&#xff1a;远程服务器上的Git仓库 仓库之间的运转如下图&#xff1a; commit&#xff1a;提交&#xff…

【HbuilderX】 uniapp实现 android申请权限 和 退出app返回桌面

目录 android申请权限&#xff1a; 监听用户是否开启权限或关闭权限&#xff1a; 退出app返回桌面&#xff1a; android申请权限&#xff1a; 首先在 manifest.json 内添加你所需要用到权限 添加权限插件 permission.js 一次就好1/权限插件 - Gitee.comhttps://gitee.co…

安装 docker 可视化工具 portainer

portainer 官方网站 https://www.portainer.io/ 一、portainer 介绍 Portainer是一款开源的容器管理平台&#xff0c;它提供了一个直观易用的Web界面&#xff0c;帮助用户管理Docker容器集群、镜像、卷等资源。Portainer 支持多种 Docker 环境&#xff0c;包括本地Docker、Sw…

k8s 存储卷详解与动静部署详解

目录 一、Volume 卷 1.1 卷类型 emptyDir &#xff1a; hostPath&#xff1a; persistentVolumeClaim (PVC)&#xff1a; configMap 和 secret&#xff1a; 二、 emptyDir存储卷 2.1 特点 2.2 用途&#xff1a; 2.3 示例 三、 hostPath存储卷 3.1 特点 3.2 用途 …

面试经典 150 题 ---- 轮转数组

面试经典 150 题 ---- 轮转数组 轮转数组方法一&#xff1a;使用额外的数组方法二&#xff1a;数组翻转 轮转数组 方法一&#xff1a;使用额外的数组 我们可以使用额外的数组来将每个元素放至正确的位置。用 n 表示数组的长度&#xff0c;我们遍历原数组&#xff0c;将原数组…

Jenkins笔记(一)

个人学习笔记&#xff08;整理不易&#xff0c;有帮助点个赞&#xff09; 笔记目录&#xff1a;学习笔记目录_pytest和unittest、airtest_weixin_42717928的博客-CSDN博客 目录 一&#xff1a;简单了解 二&#xff1a;什么是DevOps 三&#xff1a;安装Jenkins 四&#xff1…

OSCP靶场--DVR4

OSCP靶场–DVR4 考点(1.windows&#xff1a;路径遍历获取私钥getshell 2.ssh shell中runas切换用户) 1.nmap扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap -sV -sC -p- 192.168.161.179 --min-rate 2000 Starting Nmap 7.92 ( https://nmap.org ) at 2024-02-29 07:14 EST…