java随机姓名 根据网络爬虫爬取百家姓和名字

简介: java随机姓名 根据网络爬虫爬取百家姓和名字

思路讲解:


1.获取百家姓和男生名字以及女生名字的资源链接,资源在网上随便找一个都可以


 String firstNameStr="https://hanyu.baidu.com/shici/detail?from=kg1&highlight=&pid=0b2f26d4c0ddb3ee693fdb1137ee1b0d&srcid=51369";


2.爬取网站的所有数据,以字符串储存数据


String boyName=webcrawling(boynameStr);


3.利用正则表达式获取数据中所需的中文姓氏和名字,根据网站汉字的格式编写正则


ArrayList<String>  boyData = getData(boyName, "([\\u4e00-\\u9fa5]{2})[、]", 1);


4.正则表达式获取的数据是四个一组,重新切割获取每一个中文字符



5. 将姓氏和姓名进行拼接,利用HashSet确保拼接的名字唯一


ArrayList<String>  data=getName(firstData,boyData,girlData,10,10);


效果图:



全部代码:


import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class text01 {
    public static void main(String[] args) throws IOException {
       String firstNameStr="https://hanyu.baidu.com/shici/detail?from=kg1&highlight=&pid=0b2f26d4c0ddb3ee693fdb1137ee1b0d&srcid=51369";
       String boynameStr="https://m.pcbaby.com.cn/mip/baike/qzbd/180747.html";
       String girlnameStr="https://zhuanlan.zhihu.com/p/522400912";
        String firstName=webcrawling(firstNameStr);
        ArrayList<String>  firstTempData = getData(firstName, "(.{4})[,。]", 1);
        String boyName=webcrawling(boynameStr);
        ArrayList<String>  boyData = getData(boyName, "([\\u4e00-\\u9fa5]{2})[、]", 1);
        String girlName=webcrawling(girlnameStr);
        ArrayList<String>  girlData = getData(girlName, "([\\u4e00-\\u9fa5]{1,2})(、)", 1);
        //因为姓氏是4个字一组获取到的,所以要重新切割获取每一个字
        ArrayList<String> firstData=new ArrayList<>();
        for (String str : firstTempData) {
            for (int i = 0; i < str.length(); i++) {
                char c=str.charAt(i);
                firstData.add(c+"");
            }
        }
        ArrayList<String>  data=getName(firstData,boyData,girlData,10,10);
        Collections.shuffle(data);
        System.out.println(data);
    }
    public static ArrayList<String> getName( ArrayList<String> firstData,ArrayList<String>  boyData,ArrayList<String>  girlData,int boycount,int girlcount){
        ArrayList<String> arr=new ArrayList<>();
        HashSet<String> hs=new HashSet<>();
        while (boycount-->0){
            Collections.shuffle(firstData);
            Collections.shuffle(boyData);
            hs.add(firstData.get(0)+boyData.get(0));
        }
        while (girlcount-->0){
            Collections.shuffle(firstData);
            Collections.shuffle(girlData);
            hs.add(firstData.get(0)+girlData.get(0));
        }
        for (String s : hs) {
            arr.add(s);
        }
        return arr;
    }
    public static String webcrawling(String net) throws IOException {
        //使用sb拼接爬取到的字符串
        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();
    }
    public static ArrayList<String> getData(String str,String regex,int index){
        //利用list数组存取最后的数据
       ArrayList<String> arr=new ArrayList<>();
       //获取正则表达式的规则
        Pattern pattern = Pattern.compile(regex);
        //按照pattern的规则到str中获取数据
        Matcher matcher = pattern.matcher(str);
        while (matcher.find()){
            //index是获取正则表达是的第几组,如果是0则是完整数据
            String group = matcher.group(index);
            arr.add(group);
        }
        return arr;
    }
}


相关文章
|
2月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
202 1
|
2月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
226 1
|
2月前
|
机器学习/深度学习 分布式计算 Java
Java与图神经网络:构建企业级知识图谱与智能推理系统
图神经网络(GNN)作为处理非欧几里得数据的前沿技术,正成为企业知识管理和智能推理的核心引擎。本文深入探讨如何在Java生态中构建基于GNN的知识图谱系统,涵盖从图数据建模、GNN模型集成、分布式图计算到实时推理的全流程。通过具体的代码实现和架构设计,展示如何将先进的图神经网络技术融入传统Java企业应用,为构建下一代智能决策系统提供完整解决方案。
386 0
|
3月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
|
4月前
|
JSON 移动开发 网络协议
Java网络编程:Socket通信与HTTP客户端
本文全面讲解Java网络编程,涵盖TCP与UDP协议区别、Socket编程、HTTP客户端开发及实战案例,助你掌握实时通信、文件传输、聊天应用等场景,附性能优化与面试高频问题解析。
|
4月前
|
数据采集 JSON Java
Java爬虫获取1688店铺所有商品接口数据实战指南
本文介绍如何使用Java爬虫技术高效获取1688店铺商品信息,涵盖环境搭建、API调用、签名生成及数据抓取全流程,并附完整代码示例,助力市场分析与选品决策。
|
4月前
|
数据采集 存储 前端开发
Java爬虫性能优化:多线程抓取JSP动态数据实践
Java爬虫性能优化:多线程抓取JSP动态数据实践
|
8月前
|
数据采集 存储 网络协议
Java HttpClient 多线程爬虫优化方案
Java HttpClient 多线程爬虫优化方案
|
9月前
|
存储 网络协议 安全
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
411 23
|
10月前
|
数据采集 算法 Java
如何在Java爬虫中设置动态延迟以避免API限制
如何在Java爬虫中设置动态延迟以避免API限制