首頁 後端開發 Python教學 利用Python爬蟲為孩子取個好名字

利用Python爬蟲為孩子取個好名字

Feb 20, 2017 am 10:13 AM

前言

相信每位家長都有所體會,因為要在孩子出生後兩週內取個名字(需要辦理出生證明了),估計很多人都像我一樣,剛開始是很慌亂的,雖然感覺漢字非常的多隨便找個字做名字都行,後來才發現真不是隨便的事情,怎麼想都發現不合適,於是到處翻字典、網上搜、翻唐詩宋詞、詩經、甚至武俠小說,然而想了很久得到的名字,往往卻受到家屬的意見和反對,比如不順口、和親戚重名重音等問題,這樣就陷入了重複尋找和否定的循環,越來越混亂。

於是我們再次回到網上各種搜索,找到很多網上給出的“男寶寶好聽的名字大全”之類的文章,這些文章一下子給出幾百上千個名字,看的眼花撩亂沒法使用。而有不少的測名字的網站或者APP,輸入名字能給八字或者五格的評分,這樣的功能感覺還挺好的能給個參考,然而要么我們需要一個個名字的輸入進行測試、要么這些網站或是APP自身的名字很少、要嘛無法滿足我們的需求比如限定字、要嘛就開始收費,到最後也找不到一個好用的。

於是我想做這麼一個程式:

  1. 主要的功能,是給批次名字提供參考,這些名字是結合寶寶的生辰八字算出來的;

  2. 自己可以擴充名字庫,例如網路上發現了一批詩經裡的好名字,想看看怎麼樣,加入進去就能用;

  3. 可以限定名字的使用字,例如有的家譜有限定,目前是「國」字輩,名字中必須有「國」字;

  4. 名字清單可以給予評分,這樣倒排後就可以從高分往低分來看名字;

透過這種方式可以得到一份符合自己孩子生辰八字、自己的家譜限制、以及自己喜好的名字列表,並且該列表已經給出了分數用於參考,以此為基準我們可以挨個琢磨找出心儀的名字。當然如果有新的想法,隨時可以把新的名字加到詞庫裡面,重新計算。

程式的程式碼結構

利用Python爬蟲為孩子取個好名字

程式碼介紹:

  • /chinese-name-score 程式碼根目錄

  • /chinese-name-score/main 程式碼目錄

  • /chinese-name- score/main/dicts 字典檔案目錄

  • /chinese-name-score/main/dicts/names_boys_double.txt 字典文件,男孩的雙字名字

  • /chinese-name-score/main/dicts/names_boys_single.txt 字典文件,男孩的單字名稱

  • /chinese-name-score/main/dicts/names_girls_single. txt 字典文件,女孩的雙字名字

  • /chinese-name-score/main/dicts/names_grils_double.txt 字典文件,女孩的單字名字

  • /chinese-name-score/main/outputs 輸出資料目錄

  • /chinese-name-score/main/outputs/names_girls_source_wxy.txt 輸出的範例檔案

  • /chinese-name-score/main/scripts 一些對字典檔案做預處理的腳本

  • /chinese-name-score/main/scripts /unique_file_lines.py 設定字典文件,對字典中的名字去重和去空白行

  • /chinese-name-score/main/sys_config.py 程式的系統配置,包含爬取得目標URL、字典檔案路徑

  • /chinese-name-score/main/user_config.py 程式的使用者配置,包括寶寶的年月日時分性別等設定

  • /chinese-name-score/main/get_name_score.py 程式的運行入口

使用程式碼的方法:

  1. 如果沒有限定字,就找到字典文件names_boys_double.txt和names_grils_double.txt,可以在這裡添加自己找到的一些名字列表,按行分割添加在最後即可;

  2. 如果有限定字,就找到字典文件names_boys_single.txt和names_girls_single.txt,在這裡添加自己預先中意的單字列表,按行分割添加在最後即可;

  3. 開啟user_config.py,進行配置,配置項目見下一節;

  4. 運行腳本get_name_score.py

  5. 在outputs目錄中,檢視自己的產出文件,可以複製到Excel,進行排序等操作;

程式的設定入口

程式的配置如下:

# coding:GB18030
 
"""
在这里写好配置
"""
 
setting = {}
 
# 限定字,如果配置了该值,则会取用单字字典,否则取用多字字典
setting["limit_world"] = "国"
# 姓
setting["name_prefix"] = "李"
# 性别,取值为 男 或者 女
setting["sex"] = "男"
# 省份
setting["area_province"] = "北京"
# 城市
setting["area_region"] = "海淀"
# 出生的公历年份
setting['year'] = "2017"
# 出生的公历月份
setting['month'] = "1"
# 出生的公历日子
setting['day'] = "11"
# 出生的公历小时
setting['hour'] = "11"
# 出生的公历分钟
setting['minute'] = "11"
# 结果产出文件名称
setting['output_fname'] = "names_girls_source_xxx.txt"
登入後複製

根據配置項setting[“limit_world”] ,系統自動來決定選用單字字典還是多字字典:

  1. 如果设置了该项,比如等于“国”,那么程序会组合所有的单字为名字用于计算,比如国浩和浩国两个名字都会计算;

  2. 如果不设置该项,保持空字符串,则程序只会读取*_double.txt的双字词典

程序的原理

这是一个简单的爬虫。大家可以打开http://www.php.cn/网站查看,这是一个POST表单,填写需要的参数,点提交,就会打开一个结果页面,结果页面的最下方包含了八字分数和五格分数。

如果想得到分数,就需要做两件事情,一是爬虫自动提交表单,获取结果页面;二是从结果页面提取分数;

对于第一件事情,很简单,urllib2即可实现(代码在/chinese-name-score/main/get_name_score.py):

 post_data = urllib.urlencode(params)
 req = urllib2.urlopen(sys_config.REQUEST_URL, post_data)
 content = req.read()
登入後複製

这里的params是个参数dict,使用这种方式,就进行了POST带数据的提交,然后从content得到了结果数据。

params的参数设定如下:

 params = {}
 
 # 日期类型,0表示公历,1表示农历
 params['data_type'] = "0"
 params['year'] = "%s" % str(user_config.setting["year"])
 params['month'] = "%s" % str(user_config.setting["month"])
 params['day'] = "%s" % str(user_config.setting["day"])
 params['hour'] = "%s" % str(user_config.setting["hour"])
 params['minute'] = "%s" % str(user_config.setting["minute"])
 params['pid'] = "%s" % str(user_config.setting["area_province"])
 params['cid'] = "%s" % str(user_config.setting["area_region"])
 # 喜用五行,0表示自动分析,1表示自定喜用神
 params['wxxy'] = "0"
 params['xing'] = "%s" % (user_config.setting["name_prefix"])
 params['ming'] = name_postfix
 # 表示女,1表示男
 if user_config.setting["sex"] == "男":
  params['sex'] = "1"
 else:
  params['sex'] = "0"
  
 params['act'] = "submit"
 params['isbz'] = "1"
登入後複製

第二件事情,就是从网页中提取需要的分数,我们可以使用BeautifulSoup4来实现,其语法也很简单:

 soup = BeautifulSoup(content, 'html.parser', from_encoding="GB18030")
 full_name = get_full_name(name_postfix)
 
 # print soup.find(string=re.compile(u"姓名五格评分"))
 for node in soup.find_all("p", class_="chaxun_b"):
  node_cont = node.get_text()
  if u'姓名五格评分' in node_cont:
   name_wuge = node.find(string=re.compile(u"姓名五格评分"))
   result_data['wuge_score'] = name_wuge.next_sibling.b.get_text()
  
  if u'姓名八字评分' in node_cont:
   name_wuge = node.find(string=re.compile(u"姓名八字评分"))
   result_data['bazi_score'] = name_wuge.next_sibling.b.get_text()
登入後複製

通过该方法,就能对HTML解析,提取八字和五格的分数。

运行结果事例

1/1287 李国锦 姓名八字评分=61.5 姓名五格评分=78.6 总分=140.1
2/1287 李国铁 姓名八字评分=61 姓名五格评分=89.7 总分=150.7
3/1287 李国晶 姓名八字评分=21 姓名五格评分=81.6 总分=102.6
4/1287 李鸣国 姓名八字评分=21 姓名五格评分=90.3 总分=111.3
5/1287 李柔国 姓名八字评分=64 姓名五格评分=78.3 总分=142.3
6/1287 李国经 姓名八字评分=21 姓名五格评分=89.8 总分=110.8
7/1287 李国蒂 姓名八字评分=22 姓名五格评分=87.2 总分=109.2
8/1287 李国登 姓名八字评分=21 姓名五格评分=81.6 总分=102.6
9/1287 李略国 姓名八字评分=21 姓名五格评分=83.7 总分=104.7
10/1287 李国添 姓名八字评分=21 姓名五格评分=81.6 总分=102.6
11/1287 李国天 姓名八字评分=22 姓名五格评分=83.7 总分=105.7
12/1287 李国田 姓名八字评分=22 姓名五格评分=93.7 总分=115.7
登入後複製

有了这些分数,我们就可以进行排序,是一个很实用的参考资料。

友情提示

  1. 分数跟很多因素有关,比如出生时刻、已经限定的字、限定字的笔画等因素,这些条件决定了有些名字不会分数高,不要受此影响,找出相对分数高的就可以了;

  2. 目前程序只能抓取一个网站的内容,地址是http://life.httpcn.com/xingming.asp

  3. 本列表仅供参考,看过一些文章,历史上很多名人伟人,姓名八字评分都非常低但是都建功立业,名字确实会有些影响但有时候朗朗上口就是最好的;

  4. 从本列表中选取名字之后,可以在百度、人人网等地方查查,以防有些负面的人重名、或者起这个名字的人太多了烂大街;

  5. 八字分数是中国传承,五格分数是日本人近代发明的,有时候也可以试试西方的星座起名法,并且奇怪的是八字和五个分数不同网站打分相差很大,更说明了这东西只供参考;

本文的代码已上传到github 

更多利用Python爬蟲為孩子取個好名字相关文章请关注PHP中文网!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1327
25
PHP教程
1273
29
C# 教程
1252
24
Python vs.C:申請和用例 Python vs.C:申請和用例 Apr 12, 2025 am 12:01 AM

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

Python:遊戲,Guis等 Python:遊戲,Guis等 Apr 13, 2025 am 12:14 AM

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

Python與C:學習曲線和易用性 Python與C:學習曲線和易用性 Apr 19, 2025 am 12:20 AM

Python更易學且易用,C 則更強大但複雜。 1.Python語法簡潔,適合初學者,動態類型和自動內存管理使其易用,但可能導致運行時錯誤。 2.C 提供低級控制和高級特性,適合高性能應用,但學習門檻高,需手動管理內存和類型安全。

Python和時間:充分利用您的學習時間 Python和時間:充分利用您的學習時間 Apr 14, 2025 am 12:02 AM

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python vs.C:探索性能和效率 Python vs.C:探索性能和效率 Apr 18, 2025 am 12:20 AM

Python在開發效率上優於C ,但C 在執行性能上更高。 1.Python的簡潔語法和豐富庫提高開發效率。 2.C 的編譯型特性和硬件控制提升執行性能。選擇時需根據項目需求權衡開發速度與執行效率。

Python標準庫的哪一部分是:列表或數組? Python標準庫的哪一部分是:列表或數組? Apr 27, 2025 am 12:03 AM

pythonlistsarepartofthestAndArdLibrary,herilearRaysarenot.listsarebuilt-In,多功能,和Rused ForStoringCollections,而EasaraySaraySaraySaraysaraySaraySaraysaraySaraysarrayModuleandleandleandlesscommonlyusedDduetolimitedFunctionalityFunctionalityFunctionality。

Python:自動化,腳本和任務管理 Python:自動化,腳本和任務管理 Apr 16, 2025 am 12:14 AM

Python在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。

學習Python:2小時的每日學習是否足夠? 學習Python:2小時的每日學習是否足夠? Apr 18, 2025 am 12:22 AM

每天學習Python兩個小時是否足夠?這取決於你的目標和學習方法。 1)制定清晰的學習計劃,2)選擇合適的學習資源和方法,3)動手實踐和復習鞏固,可以在這段時間內逐步掌握Python的基本知識和高級功能。

See all articles