首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >java随机姓名 根据网络爬虫爬取百家姓和名字

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

作者头像
用户10604450
发布于 2024-03-15 13:51:23
发布于 2024-03-15 13:51:23
6760
举报
文章被收录于专栏:练习两年半练习两年半

思路讲解:

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

代码语言:javascript
复制
 String firstNameStr="https://hanyu.baidu.com/shici/detail?from=kg1&highlight=&pid=0b2f26d4c0ddb3ee693fdb1137ee1b0d&srcid=51369";

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

代码语言:javascript
复制
 String boyName=webcrawling(boynameStr);

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

代码语言:javascript
复制
ArrayList<String>  boyData = getData(boyName, "([\\u4e00-\\u9fa5]{2})[、]", 1);

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

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

代码语言:javascript
复制
ArrayList<String>  data=getName(firstData,boyData,girlData,10,10);

效果图: 

全部代码: 

代码语言:javascript
复制
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;
    }


}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-15,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 思路讲解:
  • 效果图: 
  • 全部代码: 
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档