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


相关文章
|
23天前
|
Java 程序员
JAVA程序员的进阶之路:掌握URL与URLConnection,轻松玩转网络资源!
在Java编程中,网络资源的获取与处理至关重要。本文介绍了如何使用URL与URLConnection高效、准确地获取网络资源。首先,通过`java.net.URL`类定位网络资源;其次,利用`URLConnection`类实现资源的读取与写入。文章还提供了最佳实践,包括异常处理、连接池、超时设置和请求头与响应头的合理配置,帮助Java程序员提升技能,应对复杂网络编程场景。
49 9
|
23天前
|
人工智能 Java 物联网
JAVA网络编程的未来:URL与URLConnection的无限可能,你准备好了吗?
随着技术的发展和互联网的普及,JAVA网络编程迎来新的机遇。本文通过案例分析,探讨URL与URLConnection在智能API调用和实时数据流处理中的关键作用,展望其未来趋势和潜力。
42 7
|
1月前
|
数据采集 缓存 Java
Python vs Java:爬虫任务中的效率比较
Python vs Java:爬虫任务中的效率比较
|
3月前
|
Java
【思维导图】JAVA网络编程思维升级:URL与URLConnection的逻辑梳理,助你一臂之力!
【思维导图】JAVA网络编程思维升级:URL与URLConnection的逻辑梳理,助你一臂之力!
56 1
|
3月前
|
XML JSON 搜索推荐
【高手过招】JAVA网络编程对决:URL与URLConnection的高级玩法,你敢挑战吗?
【高手过招】JAVA网络编程对决:URL与URLConnection的高级玩法,你敢挑战吗?
70 0
|
23天前
|
Java 开发者
JAVA高手必备:URL与URLConnection,解锁网络资源的终极秘籍!
在Java网络编程中,URL和URLConnection是两大关键技术,能够帮助开发者轻松处理网络资源。本文通过两个案例,深入解析了如何使用URL和URLConnection从网站抓取数据和发送POST请求上传数据,助力你成为真正的JAVA高手。
43 11
|
23天前
|
安全 Java API
深入探索Java网络编程中的HttpURLConnection:从基础到进阶
本文介绍了Java网络编程中HttpURLConnection的高级特性,包括灵活使用不同HTTP方法、处理重定向、管理Cookie、优化安全性以及处理大文件上传和下载。通过解答五个常见问题,帮助开发者提升网络编程的效率和安全性。
|
23天前
|
JSON 安全 算法
JAVA网络编程中的URL与URLConnection:那些你不知道的秘密!
在Java网络编程中,URL与URLConnection是连接网络资源的两大基石。本文通过问题解答形式,揭示了它们的深层秘密,包括特殊字符处理、请求头设置、响应体读取、支持的HTTP方法及性能优化技巧,帮助你掌握高效、安全的网络编程技能。
46 9
|
23天前
|
JSON Java API
JAVA网络编程新纪元:URL与URLConnection的神级运用,你真的会了吗?
本文深入探讨了Java网络编程中URL和URLConnection的高级应用,通过示例代码展示了如何解析URL、发送GET请求并读取响应内容。文章挑战了传统认知,帮助读者更好地理解和运用这两个基础组件,提升网络编程能力。
41 5
|
27天前
|
Java
[Java]Socket套接字(网络编程入门)
本文介绍了基于Java Socket实现的一对一和多对多聊天模式。一对一模式通过Server和Client类实现简单的消息收发;多对多模式则通过Server类维护客户端集合,并使用多线程实现实时消息广播。文章旨在帮助读者理解Socket的基本原理和应用。
21 1
下一篇
无影云桌面