林伟强---第二次作业

这个作业属于哪个课程 至诚软工实践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 = https://www.it610.com/article/(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 = https://www.it610.com/article/(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列表
    林伟强---第二次作业
    文章图片
  • 控制台输出
    林伟强---第二次作业
    文章图片

    推荐阅读