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.mzph.cn/news/536759.shtml

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

相关文章

小狐狸ChatGPT系统 H5前端底部菜单导航文字修改方法

小狐狸ChatGPT系统后端都前端都是编译过的&#xff0c;需要改动点什么非常难处理&#xff0c;开源版修改后也需要编译后才能使用&#xff0c;大部分会员也不会使用&#xff0c;像简单的修改下底部菜单文字、图标什么的可以对照处理。这里以小狐狸ChatGPT系统1.9.2版本H5端为例&…

JWT signature does not match locally computed signature

1. 问题背景 最近在协助团队小盆友调试一个验签问题&#xff0c;结果还“节外生枝”了&#xff0c;原来不是签名过程的问题&#xff0c;是token的问题。 当你看到“JWT signature does not match locally computed signature. JWT validity cannot be asserted and should not…

多维时序 | MATLAB实CNN-Mutilhead-Attention卷积神经网络融合多头注意力机制多变量时间序列预测

多维时序 | MATLAB实CNN-Mutilhead-Attention卷积神经网络融合多头注意力机制多变量时间序列预测 目录 多维时序 | MATLAB实CNN-Mutilhead-Attention卷积神经网络融合多头注意力机制多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 多维时序 | …

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…

IDEA基本设置

本博客适用于纯新手小白&#xff0c;或者刚下载IDEA想要优化开发添加配置的读者。 基础设置 滚轮调整字体大小 打开 IntelliJ IDEA。 转到菜单栏中的 “File” -> “Settings”&#xff08;Windows/Linux&#xff09;或 “IntelliJ IDEA” -> “Preferences”&#xff…

CTF show 71

CTF show 71 在源码中可以看到程序把缓冲区内容全部替换成了问号 ​​ ob_get_contents函数把缓冲区内容读到以后赋值给了变量s&#xff0c;类型是字符串。 ob_end_clean()函数清空当前缓冲区并且关闭缓冲区 ​​ 所以展示的结果中全是问号。所以我们需要在读取到文件以后…

计算机网络基础知识分享

计算机网络基础知识分享 发送一个http请求&#xff0c;从客户端到服务器端&#xff0c;都经历了什么? **Ⅰ&#xff0c;浏览器生成消息 ** &#xff08;1&#xff09;浏览器输入网址 我们的探索之旅从在浏览器中输入网址开始&#xff0c;网址&#xff0c;准确来说应该叫 UR…

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对象模型…

Isaac Sim urdf文件导入

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

VR全景展示的功能有哪些?适合用于哪些领域?

现如今&#xff0c;VR全景展示技术已经逐渐融入了我们的日常生活中&#xff0c;可能大部分人都还没有意识到VR全景是如何应用的&#xff0c;但其实VR全景针对多个行业的垂直领域都有一定的落地使用。在互联网高速发展的今天&#xff0c;多媒体所包含的种类也越来越多&#xff0…

SpringAOP复习

SpringAOP AOP为Aspect Oriented Programming的缩写&#xff0c;意为&#xff1a;面向切面编程。他是一种可以在不修改原来核心代码的情况侠给程序动态统一进行增强的一种技术 SpringAOP&#xff1a;批量对Spring容器中的bean方法做增强&#xff0c;并且这种增强不会与原来方…

Odoo16 实用功能之在Form视图的各个部位加入按钮

目录 1、 如何在form视图中的头部加上按钮 2、如何在form视图中的身体加上按钮 3、如何在notebook标签中加入按钮 1、 如何在form视图中的头部加上按钮 以CRM中的渠道form视图为例子介绍&#xff08;实现红框中的效果&#xff09; 直接在<header>标签里加入按钮即可 …

树莓派4B搭建开源NAS系统openmediavault

目录 搭建过程使用镜像准备硬件准备软件账号信息制作系统盘首次启动配置获取树莓派IP地址 ssh登录到树莓派上登录到openmediavualt连接到wifi 搭建过程 搭建过程参考链接两篇文章,已经搭建完毕.期间遇到一些坑,为了方便大家,我把搭建好的镜像和使用到的工具放在百度网盘共享了…

HashSet 和HashMap的区别、优缺点、使用场景

HashSet和HashMap是Java集合框架中的两个常用类&#xff0c;它们都用于存储和管理数据&#xff0c;但在使用方式、功能和性能上有很大的区别。 HashSet和HashMap的区别 区别一&#xff1a;用途不同 HashSet&#xff1a;HashSet是一个基于哈希表的集合&#xff0c;用于存储不…

常用两种Linux命令生成器

在Linux中&#xff0c;可以使用多种命令来生成随机密码。以下是其中两种常用的命令&#xff1a; 1.pwgen&#xff1a;这个命令可以生成随机、无意义的但容易发音的密码。生成的密码可以只包含小写字母、大小写混合或数字。大写字母和数字会以一种便于记忆的方式放置&#xff0…

Java_Stream流

一、JDK8新特性&#xff08;Stream流&#xff09; 接下来学习一个全新的知识&#xff0c;叫做Stream流&#xff08;也叫Stream API&#xff09;。它是从JDK8以后才有的一个新特性&#xff0c;是专业用于对集合或者数组进行便捷操作的。有多方便呢&#xff1f;我们用一个案例体…

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

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

TwIST算法MALTLAB主程序详解

TwIST算法MALTLAB主程序详解 关于TwIST算法的具体原理可以参考&#xff1a; 链接: https://ieeexplore.ieee.org/abstract/document/4358846 链接: https://blog.csdn.net/jbb0523/article/details/52193209 该算法的MATLAB源代码&#xff1a; 链接: http://www.lx.it.pt/~bi…

Node.js(二)-模块化

1. 模块化的基本概念 1.1 什么是模块化 模块化是指解决一个复杂问题时&#xff0c;自顶向下逐层将系统拆分成若干模块的过程。对于整个系统来说&#xff0c;模块是可组合、分解和更换的单元。 1.2 编程领域中的模块化 编程领域中的模块化&#xff0c;就是遵守固定的规则&…

48V转12V 300mA降压芯片,60V耐压、0.6A稳压芯片带ECO模式-AH590L

AH590L是一种48V转12V 300mA降压芯片&#xff0c;具有60V耐压、0.6A稳压电流的特点&#xff0c;并且还带有ECO模式&#xff0c;是一种理想的开关电源解决方案。 AH590L是PWM模式 DC/DC降压转换器。TEL&#xff1a;l86*4884*3702*宽输入电压范围4至60V适用于工业领域的广泛应用…