Java网络爬虫拼接姓氏,名字并写出到txt文件(实现随机取名)

目录

  • 1.爬取百家姓
    • 1.爬取代码
    • 2.爬取效果
  • 2.爬取名字
    • 1.筛选男生名字
    • 2.筛选女生名字
  • 3.数据处理(去除重复)
  • 4.拼接数据
  • 5.将数据写出到文件中

1.爬取百家姓

目标网站,仅作为实验目的。

①爬取姓氏网站: https://hanyu.baidu.com/shici/detail?from=aladdin&pid=0b2f26d4c0ddb3ee693fdb1137ee1b0d&showPinyin=1
②爬取男生名字网站:https://baijiahao.baidu.com/s?id=1744863812577130101&wfr=spider&for=pc
③爬取女生名字网站:https://baijiahao.baidu.com/s?id=1743833274577209720&wfr=spider&for=pc

1.爬取代码

1.爬虫函数(使用转换流,输入输出流)

    /**
     *从网络中爬取数据,将数据拼接成字符串
     * @param net 网址
     * @return 爬取的数据
     */
    public static String webCrawler(String net) throws IOException {
        //拼接爬取到的数据
        StringBuilder sb = new StringBuilder();
        //创建一个url对象
        URL url = new URL(net);
        //网络连接
        URLConnection conn = url.openConnection();
        //读取数据
        InputStreamReader isr = new InputStreamReader(conn.getInputStream());//转换流
        int ch;
        while ((ch = isr.read()) != -1){
            sb.append((char) ch);
        }
        //释放资源
        isr.close();
        //将读取的数据进行返回
        return sb.toString();
    }
}

2.数据筛选函数(正则表达式

   /**
     *根据正则表达式获取数据
     * @param str 完整的字符串
     * @param rule 正则表达式
     * @return 姓氏
     */
    private static ArrayList<String> getData(String str, String rule,int index) {
        //存放数据
        ArrayList<String> list = new ArrayList<>();
        //获取编译器
        Pattern compile = Pattern.compile(rule);
        //使用编译器匹配字符串
        Matcher matcher = compile.matcher(str);

        while (matcher.find()){
            String group = matcher.group(index);
            list.add(group);
        }

        return list;
    }

3.主函数main

public class Test1 {
    public static void main(String[] args) throws IOException {
        //定义变量记录爬取目标的网址
        String familyNameNet = "https://hanyu.baidu.com/shici/detail?from=aladdin&pid=0b2f26d4c0ddb3ee693fdb1137ee1b0d&showPinyin=1";
        String boyName = "https://baijiahao.baidu.com/s?id=1744863812577130101&wfr=spider&for=pc";
        String girlName = "https://baijiahao.baidu.com/s?id=1743833274577209720&wfr=spider&for=pc";

        //爬取数据,把网址上所有的数据拼接成一个字符串
        String family = webCrawler(familyNameNet);
        String boy = webCrawler(boyName);
        String girl = webCrawler(girlName);

        //使用正则表达式,筛选数据
        ArrayList<String> familyNameTemp = getData(family, "(.{4})(,|。)", 1);

        System.out.println(familyNameTemp);
    }

2.爬取效果

使用集合(ArrayList)存储

在这里插入图片描述

2.爬取名字

1.筛选男生名字

使用正则表达式匹配汉字

        ArrayList<String> boyNameTemp = getData(boy, "([\\u4E00-\\u9FA5]{2})(、|。)", 1);
        System.out.println(boyNameTemp);

效果:
在这里插入图片描述

2.筛选女生名字

        ArrayList<String> girlNameTemp = getData(girl, "([\\u4E00-\\u9FA5]{2})(、|。)", 1);
        System.out.println(girlNameTemp);

效果:
在这里插入图片描述

3.数据处理(去除重复)

        //处理男生名字
        //去除重复元素
        ArrayList<String> boyList = new ArrayList<>();
        for (String str : boyNameTemp) {
            if (!boyList.contains(str)){
                boyList.add(str);
            }
        }
        System.out.println(boyList);

        //处理男生名字
        //去除重复元素
        ArrayList<String> girlList = new ArrayList<>();
        for (String str : girlNameTemp) {
            if (!girlList.contains(str)){
                girlList.add(str);
            }
        }
        System.out.println(girlList);

4.拼接数据

拼接成指定集合元素的格式:“张三-性别-年龄

    /**
     * 作用:
     * 获取男生和女生的信息:张三-男-23
     *
     * @param familyList 参数一:装着姓氏的集合
     * @param boyList    参数二:装着男生名字的集合
     * @param girlList   参数三:装着女生名字的集合
     * @param boyCnt     参数四:男生的个数
     * @param girlCnt    参数五:女生的个数
     * @return
     */
    public static ArrayList<String> getInfos(ArrayList<String> familyList, ArrayList<String> boyList, ArrayList<String> girlList, int boyCnt, int girlCnt) {
        //生成不重复的名字
        //男生
        HashSet<String> boyhs = new HashSet<>();
        while (true) {
            if (boyhs.size() == boyCnt) {
                break;
            }
            //随机生成
            Collections.shuffle(familyList);
            Collections.shuffle(boyList);
            boyhs.add(familyList.get(0) + boyList.get(0));

        }
        //生成女生
        HashSet<String> girlhs = new HashSet<>();
        while (true) {
            if (girlhs.size() == girlCnt) {
                break;
            }
            //随机生成
            Collections.shuffle(familyList);
            Collections.shuffle(girlList);
            girlhs.add(familyList.get(0) + girlList.get(0));

        }

        //最终格式;张三-男-21
        ArrayList<String> list = new ArrayList<>();
        Random random = new Random();
        //添加男生:年龄要求在18到27岁
        for (String boyName : boyhs) {
            int age = random.nextInt(10) + 18;
            list.add(boyName + "-男-" + age);
        }
        //添加女生:年龄要求在18到25岁
        for (String girlName : girlhs) {
            int age = random.nextInt(8) + 18;
            list.add(girlName + "-女-" + age);
        }
        return list;
    }

主函数添加代码:

        ArrayList<String> infos = getInfos(familyList, boyList, girlList, 10, 10);
        //打乱集合顺序
        Collections.shuffle(infos);
        System.out.println(infos);

效果:

在这里插入图片描述

5.将数据写出到文件中

        //写出数据
        BufferedWriter bw = new BufferedWriter(new FileWriter("G:\\JavaReview\\day33\\names.txt"));
        for (String info : infos) {
            bw.write(info);
            bw.newLine();
        }

        bw.close();

查看效果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/269108.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux系统基础】(5)在Linux上集群化环境前置准备及部署Zookeeper、Kafka软件详细教程

集群化环境前置准备 介绍 在前面&#xff0c;我们所学习安装的软件&#xff0c;都是以单机模式运行的。 后续&#xff0c;我们将要学习大数据相关的软件部署&#xff0c;所以后续我们所安装的软件服务&#xff0c;大多数都是以集群化&#xff08;多台服务器共同工作&#xf…

python使用apscheduler定时任务,固定周几运行程序

在add_job中添加参数day_of_week即可&#xff1a; day_of_week "0"表示&#xff1a;只有周一运行day_of_week "0-4"表示&#xff1a;周一到周五运行day_of_week "0,1,2"表示&#xff1a;周一二三运行 示例程序 from datetime import datet…

C++ boost planner_cond_.wait(lock) 报错1225

1.如下程序段 boost unique_lock doesn’t own the mutex: Operation not permitted 问题&#xff1a; 其中makePlan是一个线程。这里的unlock导致错误这个报错 boost unique_lock doesn’t own the mutex: Operation not permitted bool navigation::makePlan(){ //cv::named…

MySQL中如何快速定位占用CPU过高的SQL

作为DBA工作中都会遇到过数据库服务器CPU飙升的场景&#xff0c;我们该如何快速定位问题&#xff1f;又该如何快速找到具体是哪个SQL引发的CPU异常呢&#xff1f;下面我们说两个方法。聊聊MySQL中如何快速定位占用CPU过高的SQL。 技术人人都可以磨炼&#xff0c;但处理问题的思…

JVM内存结构Java内存模型Java对象模型

悟空老师思维导图&#xff1a;https://naotu.baidu.com/file/60a0bdcaca7c6b92fcc5f796fe6f6bc9https://naotu.baidu.com/file/60a0bdcaca7c6b92fcc5f796fe6f6bc9 1.JVM内存结构&&Java内存模型&&Java对象模型 1.1.JVM内存结构 1.2.Java对象模型 Java对象模型…

顺序表的实现

目录 一. 数据结构相关概念​ 二、线性表 三、顺序表概念及结构 3.1顺序表一般可以分为&#xff1a; 3.2 接口实现&#xff1a; 四、基本操作实现 4.1顺序表初始化 4.2检查空间&#xff0c;如果满了&#xff0c;进行增容​编辑 4.3顺序表打印 4.4顺序表销毁 4.5顺…

酷开系统千屏千面,深度探索消费者喜好

为什么大家这么喜欢用酷开系统呢&#xff1f;当然是因为它好用啊&#xff01;酷开系统基于人工智能技术&#xff0c;为消费者提供个性化的服务。它具有“千人千面”的推荐特性&#xff0c;即根据消费者的需求和喜好&#xff0c;自动生成个性化的内容推荐和界面布局。 01.更智能…

pngPackerGUI是一款免费的图集打包工具,png图片打包plist工具

pngPackerGUI是一款免费的图集打包工具&#xff0c;png图片打包plist工具 手把手教你使用pngPackerGUI_V2.0此软件是在pngpacker_V1.1软件基础之后&#xff0c;开发的界面化操作软件&#xff0c;方便不太懂命令行的小白快捷上手使用。1.下载并解压缩软件&#xff0c;得到如下目…

Python桌面开发技术 PyQt6教程专栏 一周快速上手,开发桌面应用

大家好&#xff0c;我是python222小锋老师。 近日锋哥又卷了一波课程&#xff0c;Python桌面开发技术 PyQt6教程&#xff0c;文字版视频版。一周掌握。 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(…

LeetCode刷题--- 字母大小写全排列

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 http://t.csdnimg.cn/6AbpV 数据结构与算法 http://t.csdnimg.cn/hKh2l 前言&#xff1a;这个专栏主要讲述递归递归、搜索与回…

cesium实现二三维联动

记录项目中实现二三维地图联动 效果如下&#xff1a; 第一步&#xff1a;现在页面中加载二三维地图&#xff08;地图的初始化已省略&#xff09; <template><div><div><button click"show">二三维联动</button></div><div&…

css学习笔记7(浮动)

css学习笔记7&#xff08;浮动&#xff09; 六、浮动1.浮动的简介2.元素浮动后的特点3.浮动影响3.1浮动后会有哪些影响3.2浮动后会有哪些影响 4.浮动布局练习 六、浮动 1.浮动的简介 ​ 在最初&#xff0c;浮动是用来实现文字环绕图片效果的&#xff0c;现在浮动是主流的页面…

VR全景对普通人的生活有哪些好处?

许多普通人对VR全景还全然没有概念&#xff0c;这是因为VR全景虽然一直在快速发展&#xff0c;但目前为止也不过几年而已&#xff0c;但这发展的几年同样为我们普通人的生活带来了切实的改变和便利。VR全景技术为人们带来了沉浸感和真实感的体验&#xff0c;让我们感受到迥异于…

C# SqlSugar 数据库 T4模板

生成效果 模板代码 <# template debug"false" hostspecific"true" language"C#" #> <# output extension".cs" #> <# assembly name"System.Core" #> <# assembly name"System.Data" #>…

图片素材管理软件Eagle for mac提高素材整理维度

Eagle for mac是一款图片素材管理软件&#xff0c;支持藏网页图片&#xff0c;网页截屏&#xff0c;屏幕截图和标注&#xff0c;自动标签和筛选等功能&#xff0c;让你设计师方便存储需要的素材和查找&#xff0c;提供工作效率。 Eagle mac软件介绍 Eagle mac帮助你成为更好、…

小天使的小难题:新生儿疝气的关注与温馨呵护

引言&#xff1a; 新生儿疝气是一种在出生后可能出现的常见情况&#xff0c;虽然通常不会造成长期影响&#xff0c;但对于家长而言&#xff0c;了解如何正确应对新生儿疝气是至关重要的。本文将深入探讨新生儿疝气的原因、症状&#xff0c;以及家长在面对这一问题时应该采取的…

Isaac Sim urdf文件导入

本教程展示如何在 Omniverse Isaac Sim 中导入 urdf 一. 使用内置插件导入urdf 安装urdf 插件 方法是转到“window”->“Extensions” 搜索框中输入urdf, 并启用 通过转至Isaac Utils -> Workflows -> URDF Importer菜单来访问 urdf 扩展。 表格中的 1,2,3 对应着…

系列七(实战)、发送 接收单向消息(Java操作RocketMQ)

一、发送 & 接收单向消息 1.1、概述 发送单向消息&#xff0c;适用于发送方不关心或者不在意消息的发送结果&#xff0c;这种方式的吞吐量很大&#xff0c;但是存在消息丢失的风险&#xff0c;对于重要消息要慎用&#xff01;该种方式通常适用于对消息没有那么严格的场景中…

0基础学习VR全景平台篇第131篇:曝光三要素—光圈

上课&#xff01;全体起立~ 大家好&#xff0c;欢迎观看蛙色官方系列全景摄影课程&#xff01; 我们经常从电视或书刊上看到这样的照片&#xff0c;照片的主体清晰&#xff0c;前后镜朦胧虚化&#xff0c;整体看起来非常的漂亮。那这样的照片是如何拍出来的呢&#xff1f;他和…

A+CLUB管理人支持计划第十期 | 坤望基金

免责声明 本文内容仅对合格投资者开放&#xff01; 私募基金的合格投资者是指具备相应风险识别能力和风险承担能力&#xff0c;投资于单只私募基金的金额不低于100 万元且符合下列相关标准的单位和个人&#xff1a; &#xff08;一&#xff09;净资产不低于1000 万元的单位&…