lwq6
这个作业属于哪个课程 至诚软工实践F班
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzzcxy/ZhichengSoftengineeringPracticeFclass/homework/12532
这个作业的目标 Java爬虫 抓包解析json并展示数据
Gitee 地址 https://gitee.com/lwq02/rjgc6772

一,爬虫项目解析

1. 项目思路:模拟GET,POST等网络请求爬网站,软件等程序,获取json格式数据并解析 --> 存储 -->展示出来

  • 模拟GET,POST等网络请求爬网站,软件等程序
    • 可以选择java,python等语言来进行模拟网络请求,python在数据处理方面比较有优势,所以建议使用python来写爬虫程序,不过因为太多人用python,所以我用 java!(java才是最好的编程语言,不同意的话,我只能说啊对对对)
    • java项目导入jsoup包,使用jsoup模拟GET,POST等网络请求
  • 获取json格式数据的接口
    • 可以使用fiddler等抓包工具,抓取json文件接口
  • 解析 --> 存储 -->展示出来
    • java项目导入gson包,解析json格式
    • 使用mysql数据库存储
    • 使用echarts+ajax动态获取后端数据并展示出来

2. 具体实施方案

  • (1)fiddler抓取json文件接口
  • (2)springboot微服务框架的java项目模拟GET,POST等网络请求,请求接口得到返回的json文件解析成数据对象
  • (3)将数据对象存到mysql数据库
  • (4)前端使用echarts+ajax动态获取后端数据并展示出来

二,爬虫项目实施

1. fiddler抓取json文件接口

2. springboot (网络请求,解析json)

  • UtilsparsePuPu.java爬虫工具类

    点击查看代码
    package lwq6772.rjgc.Utils;
    
    import com.google.gson.Gson;
    import com.google.gson.internal.LinkedTreeMap;
    import org.jsoup.Connection;
    import org.jsoup.Jsoup;
    
    import java.io.IOException;
    import java.time.LocalDateTime;
    import java.util.HashMap;
    
    public class UtilsparsePuPu {
        LinkedTreeMap data ;
        String name;
        String spec;
        Double price;
        Double market_price;
        String content;
        public void parsePuPu() throws IOException {
    
            String url="https://j1.pupuapi.com/client/product/storeproduct/detail/831b632e-12bd-4c23-a6fd-a18749d8d508/188d7a73-f518-418e-a928-e293f4b17556";
    
            Connection.Response res = Jsoup.connect(url)
                    .header("Accept", "*/*")
                    .header("Accept-Encoding", "gzip, deflate")
                    .header("Accept-Language","zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3")
                    .header("Content-Type", "application/json;charset=UTF-8")
                    .timeout(10000).ignoreContentType(true).execute();
            //创建gson对象
            Gson gson = new Gson();
            //对获取到的数据进行转换
            HashMap hashMap = gson.fromJson(res.body(), HashMap.class);
            //获取data里面的值
            data = (LinkedTreeMap) hashMap.get("data");
    
            /* 获取对应数据 */
            name= (String) data.get("name");
            spec=(String) data.get("spec");
            price=(Double) data.get("price")/100;
            market_price=(Double) data.get("market_price")/100;
            content=(String) data.get("share_content");
    
        }
        public void timing() throws IOException, InterruptedException {
            //每3秒抓取一次商品信息
            while (true){
                parsePuPu();
                System.out.println("当前时间为"+ LocalDateTime.now()+" ,"+name+":价格为"+price);
                Thread.sleep(3000);
            }
        }
    
        public void show() throws InterruptedException, IOException {
            parsePuPu();
            //打印
            System.out.println("-----------------------商品:"+name+"-----------------------");
            System.out.println("规格:"+spec);
            System.out.println("价格:"+price);
            System.out.println("原价/折扣价:"+market_price+"/"+price);
            System.out.println("详细信息:"+content);
            System.out.println("--------------------"+name+"的价格波动--------------------");
            timing();
        }
    
    
    
    }
    
    
  • (1)代码分析

    • 网络请求

          String url="https://j1.pupuapi.com/client/product/storeproduct/detail/831b632e-12bd-4c23-a6fd-a18749d8d508/188d7a73-f518-418e-a928-e293f4b17556";
      
        Connection.Response res = Jsoup.connect(url)
                .header("Accept", "*/*")
                .header("Accept-Encoding", "gzip, deflate")
                .header("Accept-Language","zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3")
                .header("Content-Type", "application/json;charset=UTF-8")
                .timeout(10000).ignoreContentType(true).execute();
      
    • 解析json

        //创建gson对象
        Gson gson = new Gson();
        //对获取到的数据进行转换
        HashMap hashMap = gson.fromJson(res.body(), HashMap.class);
        //获取data里面的值
        data = (LinkedTreeMap) hashMap.get("data");
      
        /* 获取对应数据 */
        name= (String) data.get("name");
        spec=(String) data.get("spec");
        price=(Double) data.get("price")/100;
        market_price=(Double) data.get("market_price")/100;
        content=(String) data.get("share_content");
      

3. 作业截图

1.使用idea中的gitee插件托管项目

相关文章: