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;
    }
}


相关文章
|
1月前
|
数据采集 Python
爬虫实战-Python爬取百度当天热搜内容
爬虫实战-Python爬取百度当天热搜内容
72 0
|
1月前
|
网络协议 算法 Java
|
1月前
|
数据采集 JSON 数据格式
python爬虫之app爬取-charles的使用
charles 基本原理,charles抓包,分析,重发。
58 0
|
1月前
|
数据采集 JavaScript 前端开发
实用工具推荐:适用于 TypeScript 网络爬取的常用爬虫框架与库
实用工具推荐:适用于 TypeScript 网络爬取的常用爬虫框架与库
|
1月前
|
数据采集 测试技术 API
python爬虫之app爬取-微信朋友圈
搭建appium环境,appium基本使用,API操作等等
80 0
|
2天前
|
数据采集 存储 Java
高德地图爬虫实践:Java多线程并发处理策略
高德地图爬虫实践:Java多线程并发处理策略
|
8天前
|
监控 Java 开发者
深入理解 Java 网络编程和 NIO
【4月更文挑战第19天】Java网络编程基于Socket,但NIO(非阻塞I/O)提升了效率和性能。NIO特点是非阻塞模式、选择器机制和缓冲区,适合高并发场景。使用NIO涉及通道、选择器和事件处理,优点是高并发、资源利用率和可扩展性,但复杂度、错误处理和性能调优是挑战。开发者应根据需求选择是否使用NIO,并深入理解其原理。
|
10天前
|
网络协议 Java API
深度剖析:Java网络编程中的TCP/IP与HTTP协议实践
【4月更文挑战第17天】Java网络编程重在TCP/IP和HTTP协议的应用。TCP提供可靠数据传输,通过Socket和ServerSocket实现;HTTP用于Web服务,常借助HttpURLConnection或Apache HttpClient。两者结合,构成网络服务基础。Java有多种高级API和框架(如Netty、Spring Boot)简化开发,助力高效、高并发的网络通信。
|
12天前
|
JavaScript Java 测试技术
基于Java的网络游戏交易系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的网络游戏交易系统的设计与实现(源码+lw+部署文档+讲解等)
26 0
|
12天前
|
SQL 安全 Java
Java安全编程:防范网络攻击与漏洞
【4月更文挑战第15天】本文强调了Java安全编程的重要性,包括提高系统安全性、降低维护成本和提升用户体验。针对网络攻击和漏洞,提出了防范措施:使用PreparedStatement防SQL注入,过滤和转义用户输入抵御XSS攻击,添加令牌对抗CSRF,限制文件上传类型和大小以防止恶意文件,避免原生序列化并确保数据完整性。及时更新和修复漏洞是关键。程序员应遵循安全编程规范,保障系统安全。