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.pswp.cn/news/536759.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536759.shtml
英文地址,請注明出處:http://en.pswp.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卷積神經網絡融合多頭注意力機制多變量時間序列預測預測效果基本介紹模型描述程序設計參考資料 預測效果 基本介紹 多維時序 | …

異或運算^簡述

異或運算&#xff1a;^ 兩個變量之間異或運算時&#xff0c;其二進制位相同取0&#xff0c;不同取1. 示例&#xff1a;a10 (0b 0000 1010) b3 (0b 0000 0011) a^b9(0b 0000 1001) 據此可以推算異或運算"^"有以下特性&#xff1a; a^a0 (0b 0000 0000)…

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…

2024年 Kubernetes 四大趨勢預測

Kubernetes 在生產環境中的復雜性已經成為常態&#xff0c;在2023年這個平臺工程盛行的時代&#xff0c;容器管理的最大亮點可能在于其靈活性&#xff0c;然而在運維政策和治理等方面仍然存在諸多挑戰。Kubernetes 最大的吸引力之一在于其可擴展性和跨環境的廣泛用例。但是&…

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 對應著…

問題回復:什么是 Java 中的 Lambda 表達式?有什么應用場景?

Lambda 表達式是 Java 8 引入的一項重要特性&#xff0c;它允許在代碼中以更簡潔的方式表達匿名函數&#xff08;也稱為閉包&#xff09;。Lambda 表達式的引入是為了提供一種更簡單、更便捷的方式來寫匿名內部類。 Lambda 表達式的語法如下&#xff1a; (parameters) -> …

C語言例題3

1.設x、y、z和k都是int型變量&#xff0c;則執行表達式&#xff1a;x&#xff08;y4&#xff0c;z16&#xff0c;k32&#xff09;后&#xff0c;x的值為&#xff08;32&#xff09;&#xff1b; x(y4,z16,k32),x的值為32 理解逗號運算符在c語言中的工作方式&#xff1a;逗號運算…

Visual Basic的故事

Visual Basic&#xff08;VB&#xff09;是一種由Microsoft開發的面向對象的事件驅動編程語言。VB的故事始于上世紀90年代初&#xff0c;它在Windows平臺上的成功對于圖形用戶界面&#xff08;GUI&#xff09;應用程序的開發產生了深遠的影響。以下是關于VB發展過程和相關開發者…

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

現如今&#xff0c;VR全景展示技術已經逐漸融入了我們的日常生活中&#xff0c;可能大部分人都還沒有意識到VR全景是如何應用的&#xff0c;但其實VR全景針對多個行業的垂直領域都有一定的落地使用。在互聯網高速發展的今天&#xff0c;多媒體所包含的種類也越來越多&#xff0…

【美團大數據面試】大數據面試題附答案

目錄 1.hdfs讀寫流程解析 2.hdfs副本機制&#xff0c;三副本原因&#xff0c;副本存放策略 3.hdfs容錯機制原理 4.MapReduce執行流程詳解 5.spark和mr的區別 6.TopN求法&#xff0c;大數據量無法完全寫入內存解決方案&#xff0c;MapReduce實現方法 7.spark部署、調度原…

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 搭建過程 搭建過程參考鏈接兩篇文章,已經搭建完畢.期間遇到一些坑,為了方便大家,我把搭建好的鏡像和使用到的工具放在百度網盤共享了…

谷歌Gemini中文疑似套殼百度文心一言

關注盧松松&#xff0c;會經常給你分享一些我的經驗和觀點。 哈哈哈&#xff0c;沒想到谷歌 Gemini 中文語言竟然來自百度的文心一言。 最近知名博主闌夕發微博稱&#xff1a;在 Poe 平臺上對 Gemini-Pro 進行了一個測試。問它 " 你是誰 "&#xff0c;Gemini-Pro 上…