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));}//最终格式;张三-男-21ArrayList<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();

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【OAuth2】授权框架的四种授权方式详解

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《OAuth 2》。&#x1f3af;&#x1f3af; &#x1…

经典文献阅读之--RenderOcc(使用2D标签训练多视图3D Occupancy模型)

0. 简介 3D占据预测在机器人感知和自动驾驶领域具有重要的潜力&#xff0c;它将3D场景量化为带有语义标签的网格单元。最近的研究主要利用3D体素空间中的完整占据标签进行监督。然而&#xff0c;昂贵的注释过程和有时模糊的标签严重限制了3D占据模型的可用性和可扩展性。为了解…

Netty-4-网络编程模式

我们经常听到各种各样的概念——阻塞、非阻塞、同步、异步&#xff0c;这些概念都与我们采用的网络编程模式有关。 例如&#xff0c;如果采用BIO网络编程模式&#xff0c;那么程序就具有阻塞、同步等特质。 诸如此类&#xff0c;不同的网络编程模式具有不同的特点&#xff0c…

​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化

2022年亚马逊云科技re:Invent盛会于近日在拉斯维加斯成功召开&#xff0c;吸引了众多业界精英和创新者。亚马逊云科技边缘服务副总裁Jan Hofmeyr在演讲中分享了关于亚马逊云科技海外服务器边缘计算的最新发展和创新成果&#xff0c;引发与会者热烈关注。 re:Invent的核心主题是…

VMware虚拟机的安装配置

目录 一. VMware虚拟机的安装 二. VMware配置虚拟机 三. VMware安装windows server 2012 一. VMware虚拟机的安装 1. 双击安装&#xff0c;点击下一步 2. 勾选接受许可&#xff0c;点击下一步 3. 选择安装位置&#xff0c;点击下一步 4. 用户体验设置&#xff08;可选&#…

2024年PMP考试新考纲-PMBOK第七版-项目管理原则真题解析(续3)

马上就要进入2024年了&#xff0c;要参加2024年PMP一季度考试的小伙伴可以准备起来了。2024年的PMP考试将继续采用新考试大纲&#xff0c;考试内容包括PMBOK第六版、PMBOK第七版和敏捷实践指南&#xff0c;而且敏捷&#xff08;或者叫混合&#xff09;的项目环境将占比超过50%&…

Python的基本数据类型和数据类型的转换

TOC 数据类型 类型查看 type 可以使用type内置函数查看变量所指的对象类型 a1 b1.0 c"1" d1, e[1] f{1:1} g{1}print(type(a)) print(type(b)) print(type(c)) print(type(d)) print(type(e)) print(type(f)) print(type(g))isinstance **如字面意思,isinstance()…

linux运行可执行文件,通过c语言调用java的main方法

前言&#xff1a;以前一直在做Android开发&#xff0c;在某本书上看过一句话“Android上面不只有App类的程序可以运行&#xff0c;能在linux下运行的程序&#xff0c;也可以在Android上面运行” 一.编写C语言部分代码 1.定义java.h头文件 #include <jni.h>#ifndef _JAV…

【微服务】springboot整合kafka-stream使用详解

目录 一、前言 二、kafka stream概述 2.1 什么是kafka stream 2.2 为什么需要kafka stream 2.2.1 对接成本低 2.2.2 节省资源 2.2.3 使用简单 2.3 kafka stream特点 2.4 kafka stream中的一些概念 2.5 Kafka Stream应用场景 三、环境准备 3.1 搭建zk 3.1.1 自定义d…

制作自己的 Docker 容器

软件开发最大的麻烦事之一&#xff0c;就是环境配置。用户必须保证操作系统的设置&#xff0c;各种库和组件的安装&#xff0c;只有它们都正确&#xff0c;软件才能运行。docker从根本上解决问题&#xff0c;软件安装的时候&#xff0c;把原始环境一模一样地复制过来。 以 koa-…

RHCE9学习指南 第9章 权限管理

9.1 所有者所属组 为了了解所有者和所属组的概念&#xff0c;我们先看图9-1。 图9-1 用房子来帮助理解所有者和所属组 张老板是公司老板&#xff0c;买了一套房作为员工宿舍给A部门的员工居住。张老板是房主&#xff0c;所以他对房子具有很多权限&#xff0c;A部门员工只能具…

SuperMap iServer发布的ArcGIS REST 地图服务如何通过ArcGIS API加载

作者&#xff1a;yx 文章目录 一、发布服务二、代码加载三、结果展示 一、发布服务 SuperMap iServer支持将地图发布为ArcGIS REST地图服务&#xff0c;您可以在发布服务时直接勾选ArcGIS REST地图服务&#xff0c;如下图所示&#xff1a; 也可以在已发布的地图服务中&#x…

【量化金融】证券投资学

韭菜的自我修养 第一章&#xff1a; 基本框架和概念1.1 大盘底部形成的技术条件1.2 牛市与熊市1.3 交易系统1.3.1 树懒型交易系统1.3.2 止损止损的4个技术 第二章&#xff1a;证券家族4兄弟2.1 债券&#xff08;1&#xff09;债券&#xff0c;是伟大的创新&#xff08;2&#x…

赛宁综合安全验证评估,筑牢关基网络安全屏障

在国际复杂态势和数字经济发展的驱动下&#xff0c;关键信息基础设施&#xff08;以下简称&#xff1a;关基&#xff09;的安全运营逐步走向实战化、体系化和常态化。验证评估作为安全运营的试金石&#xff0c;已成为实现动态防御、主动防御的有力手段。如何通过体系化验证评估…

Flutter 三: Dart

1 数据类型 数字(number) int double 字符串转换成 num int.parse(“1”) double.parse(“1”);double 四舍五入保留两位小数 toStringAsFixed(2) 返回值为stringdouble 直接舍弃小数点后几位的数据 可使用字符串截取的方式 字符串(string) 单引号 双引号 三引号三引号 可以输…

云计算与大数据之间的羁绊(期末不挂科版):云计算 | 大数据 | Hadoop | HDFS | MapReduce | Hive | Spark

文章目录 前言&#xff1a;一、云计算1.1 云计算的基本思想1.2 云计算概述——什么是云计算&#xff1f;1.3 云计算的基本特征1.4 云计算的部署模式1.5 云服务1.6 云计算的关键技术——虚拟化技术1.6.1 虚拟化的好处1.6.2 虚拟化技术的应用——12306使用阿里云避免了高峰期的崩…

Unity 人物方向旋转详细讲解

Unity 人物方向旋转详细讲解 人物的旋转有很多种一、在介绍之前我们需要理解Unity的向量也就是Vector3二、下面我们创建两个小球f1,f2左边的为f2 右边的为f1 三、我们将小球坐标用白色直线画出来&#xff0c;两个小球之间用黑色线画出来&#xff0c;两个小球的向量用黄线表示接…

关于JVM的垃圾回收GC的一些记录

目录 一、JVM内存区域划分 二、从一个基本问题开始引入垃圾回收 三、GC作用的区域 三、如何确定一个对象是否可以被当成垃圾进行回收 &#xff08;1&#xff09;引用计数法 &#xff08;2&#xff09;可达性分析算法 &#xff08;3&#xff09;引用的类型 &#xff08;3…

(Matlab)基于CNN-LSTM的多维时序回归预测(卷积神经网络-长短期记忆网络)

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、代码实际运行结果展示&#xff1a; 三、部分代码展示&#xff1a; 四、本文完整代码数据下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码…