杨鸿炜---第二次作业

这个作业属于哪个课程 首页 - 至诚软工实践F班 - 福州大学至诚学院 - 班级博客 - 博客园 (cnblogs.com)
这个作业要求在哪里 第二次作业:个人编程 - 作业 - 至诚软工实践F班 - 班级博客 - 博客园 (cnblogs.com)
这个作业的目标 通过自身学习,初步掌握网络爬虫技术
Github 地址 mofei1234/java-fiddle (github.com)

一、准备工作

  • 首次接触fiddle抓包软件
  • 通过老师给予的PPT以及百度查询深入了解fiddle,并学会如何使用fiddle
  • 安装fiddle进行实操

二、爬虫实现思路

  • 对访问的网页使用fiddle进行抓包
  • 爬取到的数据使用java进行解析

三、项目开始

1.对fiddle进行配置并打开小程序中的朴朴小程序用fiddle找到所要的数据并截取头文件

2.开始网上翻阅有关Java爬虫方面的资料

先百度查阅java如何爬虫,然后在去B站上各种up主的解释和解析,了解java中String和JSON是如何进行转换的,之后开始实行操作,用java语言编写爬虫并输出数据

3.开始实操

首先先编写将朴朴页面的数据导入idea并使用java语言实现数据的引入和输出

package pupu;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class Pupushop {
    public String httpRequest(String requestUrl) {

                StringBuffer buffer = null;
                BufferedReader bufferedReader = null;
                InputStreamReader inputStreamReader = null;
                 InputStream inputStream = null;
                HttpURLConnection httpUrlConn = null;

                try {
                         // 建立get请求
                         URL url = new URL(requestUrl);
                         httpUrlConn = (HttpURLConnection) url.openConnection();
                         httpUrlConn.setDoInput(true);
                         httpUrlConn.setRequestMethod("GET");

                       // 获取输入流
                        inputStream = httpUrlConn.getInputStream();
                        inputStreamReader = new InputStreamReader(inputStream, "utf-8");
                        bufferedReader = new BufferedReader(inputStreamReader);

                        // 从输入流读取结果
                         buffer = new StringBuffer();
                        String str = null;
                        while ((str = bufferedReader.readLine()) != null) {
                                buffer.append(str);
                            }

                    } catch (Exception e) {
                        e.printStackTrace();
                    }  finally {
                        // 释放资源
                        if(bufferedReader != null) {
                                 try {
                                         bufferedReader.close();
                                     } catch (IOException e) {
                                         e.printStackTrace();
                                     }
                             }
                        if(inputStreamReader != null){
                                 try {
                                         inputStreamReader.close();
                                    } catch (IOException e) {
                                        e.printStackTrace();
                                     }
                             }
                         if(inputStream != null){
                                 try {
                                        inputStream.close();
                                    } catch (IOException e) {
                                        e.printStackTrace();
                                    }
                             }
                        if(httpUrlConn != null){
                                httpUrlConn.disconnect();
                            }
                    }
                 return buffer.toString();
             }
}

并用以下代码进行测试,能否正常获取朴朴数据以及输出数据

之后便完整的编写代码,其中包括String和JSON的相互转化,时间截取的循环代码,数据获取代码,及获取价格浮动代码,最后完成输出获取数据,完成实验要求

package pupu;

import com.alibaba.fastjson.JSONObject;
import com.sun.deploy.net.MessageHeader;
import sun.plugin.com.Utils;

import java.io.IOException;
import java.sql.SQLOutput;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) throws IOException, InterruptedException {
        String url = "https://j1.pupuapi.com/client/product/storeproduct/detail/deef1dd8-65ee-46bc-9e18-8cf1478a67e9/2266f16d-b00c-4739-acf3-3b06fd5017f0";
        Main m = new Main();
        m.getOut(url);

    }
        public void getOut(String url) throws IOException, InterruptedException {
            Main main = new Main();
            JSONObject jsonObject = JSONObject.parseObject(new Pupushop().httpRequest(url));
            JSONObject d = jsonObject.getJSONObject("data");
            Object name = (String) d.get("name");
            Object spec = (String) d.get("spec");
            Object price = (double) ((Integer) d.get("price")) / 100;
            Object market_price = (double) ((Integer)(d.get("market_price"))) / 100;
            Object share_content = d.get("share_content");
            System.out. println(" ---------------------商品:" + name + "-------------------");
            System.out.println("规格:" + spec);
            System.out.println("价格∶" + price);
            System.out.println("原价/折扣价︰"+market_price+" /"+price);
            System.out.println("详细信息:" + share_content);
            System.out.println(" ---------------------" + name +"的价格波动------------------");
            while (true){
                System.out.println("当前时间为:"+DateTime()+",价格为:"+price);
                TimeIntervalTest();
            }

        }
        public static String DateTime(){
                //将现在的时间通过LocalDateTime解析为字符串类型并返回
                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
                LocalDateTime dateTime = LocalDateTime.now();
                String date = dateTime.format(formatter);
                return date;
    }
        public double getData(String str){
        //把字符转json
        JSONObject dataObject = JSONObject.parseObject(str);
        JSONObject data = dataObject.getJSONObject("data");
        return Double.parseDouble(data.get("price").toString())/100.00;
    }

    public void TimeIntervalTest() throws InterruptedException {
                // 开始时间
                long time = System.currentTimeMillis();
                // 执行时间(2s)
                Thread.sleep(2000);
                // 结束时间
                long time1 = System.currentTimeMillis();
    }
}

四、GitHub连接与上传

五、课后思考

完成课题后并再一次在网上查询java爬虫的知识,发现JSONSerializer.toJSON()这个功能会比我使用String和JSON转化方法更方便,更快捷,再一次学到了新知识

六、课后总结

本次作业通过自身学习,零基础开始学习网上爬虫技能。一开始确实是比较艰难,编写过程中磕磕碰碰,出现过许许多多的问题,用引入数据流那边开始就学习和查阅了较多的时间,思考了许久,皇天不负有心人,编写了出来,之后主页面的输出、获取和转化代码在编写的过程中就没那么多的磕磕碰碰,虽然有少许不顺,出现数据类型不同无法转化的情况,向舍友咨询之后并解决问题,完成本次课题作业。

对于我来说本次的作业确实有难度,有涉及到许多未涉及过得问题和代码,虽然一 一解决了,但依然心有余悸吧。

posted @ 2022-03-20 18:34  mophy  阅读(50)  评论(0编辑  收藏  举报