這個作業屬於哪個課程 | 至誠軟工實踐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檔案介面
- fiddler抓取的介面:https://j1.pupuapi.com/client/product/storeproduct/detail/7c1208da-907a-4391-9901-35a60096a3f9/b3fc4708-3f1d-412a-8d18-efc4b6951fa7 其中 "store_id":"7c1208da-907a-4391-9901-35a60096a3f9"為商店id;"product_id":"b3fc4708-3f1d-412a-8d18-efc4b6951fa7"為商品id。( 猜測可能是先查詢商店id在查詢商品id,通過這種方式來減輕資料訪問壓力。)
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外掛託管專案
- 具體使用流程點選查詢這裡不贅述
- commit列表
- 控制檯輸出