林偉強---第二次作業

陽光宅男6發表於2022-03-15
這個作業屬於哪個課程 至誠軟工實踐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外掛託管專案