数据库实验|姓名,课程的随机生成

学校的数据库实验中有 studentcoursegrade 三张表,后面的题目需要向这三张表中填入大量数据,同时老师要求使用 JDBC 向数据库插入数据。所以我在这次实验中一并使用 Java 来产生随机数据

1. 随机生成姓名

中文名是由姓 + 名组成的,而且一般为 2 ~ 3 个字。我们维护 3 个数组分别保存姓,男名和女名:

    static private final List<String> first_name = Arrays.asList(
    		"王", "李", "张", "刘", "陈", "杨", "黄", "赵", "吴", "周", "徐",
            "孙", "马", "朱", "胡", "郭", "何", "高", "林", "郑", "谢", "罗",
            "梁", "宋", "唐", "许", "韩", "冯", "邓", "曹", "彭", "曾", "萧",
            "田", "董", "袁", "潘", "于", "蒋", "蔡", "余", "杜", "叶", "程",
            "苏", "魏", "吕", "丁", "任", "沈", "姚", "卢", "姜", "崔", "钟",
            "谭", "陆", "汪", "范", "金", "石", "廖", "贾", "夏", "韦", "付",
            "方", "白", "邹", "孟", "熊", "秦", "邱", "江", "尹", "薛", "闫",
            "段", "雷", "侯", "龙", "史", "陶", "黎", "贺", "顾", "毛", "郝", 
            "龚", "邵", "万", "钱", "严", "覃", "武", "戴", "莫", "孔", "向",
            "汤"
    );
    static private final List<String> girl_name = Arrays.asList(
            "秀英", "桂英", "玉兰", "桂兰", "秀珍", "凤英", "玉珍", "玉英", "兰英",
            "秀英", "桂英", "英", "玉兰", "萍", "秀兰", "玉梅", "红", "敏", "丽",
            "艳", "敏", "芳", "霞", "红梅", "燕", "红", "英", "静", "丽", "娟", "艳",
            "燕", "敏", "娜", "芳", "丹", "玲", "婷", "婷婷", "丹", "倩", "婷", "欣怡",
            "婷婷", "悦", "敏", "佳怡", "雪", "颖", "雨欣", "欣怡", "梓涵", "诗涵",
            "梓宣", "子涵", "紫涵", "佳怡", "雨涵", "雨欣", "一诺"
    );
    static private final List<String> boy_name = Arrays.asList(
            "建国", "建华", "国华", "和平", "明", "建平", "军", "平", "志明", "徳明",
            "军", "勇", "强", "斌", "军", "伟", "强", "刚", "建军", "斌", "波", "辉",
            "伟", "磊", "勇", "超", "强", "鹏", "军", "波", "杰", "超", "涛", "杰",
            "鹏", "磊", "强", "鑫", "涛", "浩", "杰", "鑫", "俊杰", "磊", "帅", "宇",
            "鹏", "浩宇", "浩然", "宇轩", "子轩", "宇航", "皓轩", "子豪", "浩轩",
            "俊杰", "子涵"
    );

创建好这些数组后使用 Random 产生随机下标选取姓和名进行拼接即可,在拼接的同时还可以得到性别信息

2. 抓取课程名

如果使用上面产生随机姓名的方法来生成课程名,最终得到的结果并不好,谁知道会拼出啥课程名所以我使用爬虫的方法爬出1000门课程。

首先要选择数据来源。自家教务处的课程数据当然可以爬,课也多,学分课时之类的信息也比较全,但是可能需要登陆比较麻烦。所以我选择从中国大学 MOOC上爬,具体的课程列表来自大学-国家精品,这里有 1300 多门课,够用了

当然,自己写爬虫程序挺麻烦的,我使用 curlconverter 来辅助生成代码。详细步如下:

  1. 在 MOOC 网站上通过 F12 找到课程列表所在的请求报文

在“全部课程”里随便选一页后会抓到下面 xhr 类型的报文

  1. 复制 cURL 内容,右键选择复制即可(如下图)
  1. curlconverter 中将复制的内容粘贴后就能够生成对应的代码了,这个网站支持的语言还是蛮多的

生成出来的 Java 代码是被放在 Main 函数里面的,我们将它改成函数并将 response 作为返回值即可得到抓取的 json 数据,后面就可以使用 fastjson 等 json 库对其处理,这里不再详述。

一次抓到更多课程

你可能会注意到,上面的程序一次只能抓到 20 门课程的数据,那可不可以一次就把 1000 门课程都抓到吗?其实是可以的,我们会注意到代码中有如下片段:

httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("mocCourseQueryVo=%7B%22categoryId%22%3A-1%2C%22categoryChannelId%22%3A2001%2C%22orderBy%22%3A0%2C%22stats%22%3A30%2C%22pageIndex%22%3A2%2C%22pageSize%22%3A20%7D");
writer.flush();
writer.close();

尤其注意 write.write() 里面出现了 pageIndex%22%3A2%2C%22pageSize%22%3A20 这个字样,显然,修改这两处的值就可以控制一次抓取的课程数量了。这串内容是这么分解的:

"pageIndex%22%3A" + "2" + "%2C%22pageSize%22%3A" + "20"

这个 2 和 20 的意思就是选择第 2 页,每页有 20 门课。将其改为 1,1000 就可以一次抓出 1000 门课了(总共就只有 1300 个课程别超了,而且这里选择第几页的第 0 页和第 1 页经过测试都一样)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值