张凌--第二次作业

这个作业属于哪个课程 至诚软工实践F班
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzzcxy/ZhichengSoftengineeringPracticeFclass/homework/12532
这个作业的目标 自学fiddler,掌握抓包过程,通过代码将数据呈现出来
学号 212106746

一. 作业分析

第一次看到这次作业的介绍我的感觉是实现这个功能应该是非常有意思的,马上就百度了一下fiddler是做什么用的,也看了很多关fiddler的使用视频。了解到fiddler可以爬取网站信息还有手机app信息。
本次作业是需要爬取扑扑上面的商品,然后将商品的信息与价格实时的信息在控制台进行输出。

二. 使用fiddler爬取扑扑商品信息

第一次接触fiddler找了特别多的资料
推荐几个b站什么我感觉特别好的教程
这个是fiddler的原理:
这个是fiddler的使用教程:(ps:这个教程相对于新手是特别有好的时间也不是特别的长而且讲的特别的细致)
这次爬取朴朴商品信息有特别多的方法
我选择的是用电脑端微信访问朴朴小程序进行爬取

1.fiddler爬到的内容

2.需要抓取的扑扑商品页面

3.抓取到的网页信息

4.json文件的分析(从中找到我们需要的商品信息)

三. 使用JAVA实时展示商品信息

展示商品信息选择使用那个语言我考虑了特别的久
最后我还是选择了使用比较熟悉的java语言
因为这次的作业是将获取的网页信息在控制台输出,之前没有接触过就找了特别多的资料
最开始的时候怎么百度都百度不到,后面经过舍友了解到百度也是有技巧的,要知道我需要java做什么然后对具体的办法进行搜索,
因为之前搜索的范围都过于广以至于找不到自己想要的。后面知道需的步骤后就很快找到了。
最后在博客园找到了一个教程https://www.cnblogs.com/peachh/p/13658125.html
这个教程提供了两种方法,我使用的是第一种方法。

1.在java上建立与抓取的商品信息URL之间的连接

我使用的是HttpURLConnextion进行访问,通过BufferedReader获取流
HttpURLConnextion是一个支持HTTP特定功能的URLConnection,通过它与URL进行连接
BufferedReade是一个通用的缓冲方式文本读取方式可以使字符、数组和行的高效读取。
(ps:这个就是上面教程提供的第一种方法,我觉得特别的实用,也很容易理解)

//创建getURL方法访问从扑扑爬取的商品信息接口地址,使用HttpURLConnextion进行访问,通过BufferedReader获取流,已得到返回的值
    public static String getURL() throws Exception {
        //获取爬到的信息
        String strURL = "https://j1.pupuapi.com/client/product/storeproduct/detail/deef1dd8-65ee-46bc-9e18-8cf1478a67e9/bc0a0cda-d80d-421a-9c8b-64f97f3d0545";
        URL url = new URL(strURL);
        HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();//创建URL实例,打开URLConnection
        httpURLConnection.connect();//调用连接
        BufferedReader reader = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream()));
        String line;
        StringBuilder buffer = new StringBuilder();
        while ((line = reader.readLine()) != null) {
            buffer.append(line);
        }
        reader.close();//关闭读取
        httpURLConnection.disconnect();//关闭连接
        return buffer.toString();//返回读取到的数据
    }

2.提取商品URL中的有用的信息进行输出

这个代码的实现我也百度了很久最后是通过舍友的帮助完成了这段代码
因为通过上面代码我们已经获取到了商品的信息返回的是一个String类型的字符串,我通过JSONSerializer.toJSON()将其转成Json类型的字符串然后通过JSONObject获取到网站的data首部键值key,通过fiddler中的json我们知道商品的信息存储在data首部键值中,通过这个我们获取到商品名字信息、商品规格、商品价格、商品原价、商品详细信息等内容:

JSONObject jsonStr = (JSONObject) JSONSerializer.toJSON(getURL());//将获取的String字符串转换成json字符串
            JSONObject data = jsonStr.getJSONObject("data");//获取扑扑商品的key data信息
            String name = data.getString("name");//获取商品名字信息
            String spec = data.getString("spec");//获取商品规格
            Double price = data.getDouble("price");//获取商品当前售价信息
            Double oPrice = data.getDouble("market_price");//获取商品原价信息
            String sub = data.getString("sub_title");//获取商品简介

3.最后通过Timer定时访问商品页面,获取实时的商品销售价格

通过timer.schedule设定指定任务task在指定延迟delay后进行固定延迟peroid的执行 peroid的执行

//通过Timer定时访问商品页面,获取实时的商品销售价格
    public static void timing() {
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            public void run() {
                try {
                    //定时需要做的任务
                    LocalDateTime localDateTime = LocalDateTime.now();//获取当前时间
                    JSONObject jsonStr = (JSONObject) JSONSerializer.toJSON(getURL());
                    JSONObject data = jsonStr.getJSONObject("data");
                    String name = data.getString("name");
                    Double price = data.getDouble("price");
                    System.out.println("当前时间" + localDateTime + "," + name + ",价格" + price / 100 + "元");
                } catch (Exception e) {
                    e.printStackTrace();
                }


            }
        }, 1000, 5000);//设置访问时间为5秒每次


    }

4.完整代码展示

5.结果展示

四.上传到仓库

这次采用IDEA上的gitee插件进行上传

1.下载gitee插件

2.通过IDEA连接gitee账号后将.java文件进行上传

3.仓库展示

五.感想

通过这次作业收获到特别多的东西fiddler的抓包,使用java获取网页信息等,从一开始懵懂到后来的渐渐熟悉
到现在完成作业回头看发现也不是特别的难,关键是学会特别多的东西,这种成就感非常的好。特别是找资料的过程中无形的学习到了很多的知识。
我相信这种自学的方式会对今后的学习和生活产生很大的影响。

posted @ 2022-03-20 16:53  zzzzzling  阅读(49)  评论(2编辑  收藏  举报