Heim >Backend-Entwicklung >Python-Tutorial >Verwenden Sie den Python-Crawler, um Ihrem Kind einen guten Namen zu geben

Verwenden Sie den Python-Crawler, um Ihrem Kind einen guten Namen zu geben

高洛峰
高洛峰Original
2017-02-20 10:13:241638Durchsuche

Vorwort

Ich glaube, jeder Elternteil hat es erlebt, denn es ist notwendig, innerhalb von zwei Wochen nach der Geburt des Kindes einen Namen zu wählen (Sie müssen eine Geburtsurkunde beantragen) Ich schätze, vielen geht es genauso. Ich war zunächst sehr verwirrt, dass es so viele chinesische Schriftzeichen gibt, aber später wurde mir klar, dass es so war Egal wie ich darüber nachdachte, ich fand es unangemessen, also suchte ich im Internet nach Tang-Gedichten, Liederbüchern und sogar Kampfkunstromanen Der Name, über den ich schon lange nachdenke, stößt oft auf die Meinungen und Einwände meiner Familienmitglieder, wie z. B. Probleme wie Schwierigkeiten beim Aussprechen des Namens, der gleiche Akzent wie der Name von Verwandten usw. Auf diese Weise falle ich in einen Kreislauf des wiederholten Suchens und Verleugnens geraten, und je mehr es wird, desto verwirrender.

Also gingen wir noch einmal ins Internet, um erneut zu suchen, und fanden viele Artikel im Internet, wie zum Beispiel „Eine vollständige Liste guter Babynamen für Jungen“. Diese Artikel enthielten zu viele Namen auf einmal verwenden. Es gibt viele Websites oder Apps, die Namen testen. Sie können eine Bewertung mit acht oder fünf Zeichen erhalten. Diese Funktion ist recht gut und kann als Referenz verwendet werden von einem zum Testen, oder Diese Websites oder APPs haben nur sehr wenige Namen, können entweder unsere Anforderungen nicht erfüllen, z. B. qualifizierende Wörter, oder sie fangen an, Gebühren zu erheben, und am Ende können wir keine nützlichen finden.

Also wollte ich ein Programm wie dieses erstellen:

  1. Die Hauptfunktion besteht darin, Referenzen für Stapelnamen bereitzustellen, die mit dem kombiniert werden Babynamen werden anhand des Geburtsdatums und des Horoskops berechnet.

  2. Sie können Ihre Namensbibliothek beispielsweise im Buch der Lieder erweitern Wenn Sie im Internet sind und sehen möchten, wie sie sind, können Sie sie hinzufügen und verwenden. Sie können die im Namen verwendeten Zeichen einschränken befinden sich derzeit in der Generation mit dem Zeichen „国“, der Name muss das Zeichen „国“ haben; bei den Namen von hohen bis niedrigen Werten;

  3. Auf diese Weise können Sie eine Kopie erhalten. Es gibt eine Liste mit Namen, die zum Geburtsdatum Ihres Kindes und Ihrem Stammbaum passen Einschränkungen und Ihre Vorlieben, und die Liste hat Bewertungen als Referenz angegeben. Auf dieser Grundlage können wir einen nach dem anderen herausfinden, den Namen, der uns gefällt. Wenn Sie neue Ideen haben, können Sie den Wortschatz natürlich jederzeit um neue Namen ergänzen und neu berechnen.
  4. Codestruktur des Programms

Codeeinführung:

Verwenden Sie den Python-Crawler, um Ihrem Kind einen guten Namen zu geben/chinese-name-score Code-Stammverzeichnis

/chinese-name-score/main Codeverzeichnis

  • /chinese-name - Verzeichnis der Wörterbuchdateien „score/main/dicts“

  • /chinese-name-score/main/dicts/names_boys_double.txt Wörterbuchdatei, zweibuchstabige Namen für Jungen

  • /chinese-name-score/main/dicts/names_boys_single.txt Wörterbuchdatei, Einzelbuchstabennamen für Jungen

  • /chinese-name-score/main/ dicts/names_girls_single.txt-Wörterbuchdatei, aus zwei Buchstaben bestehende Mädchennamen

  • /chinese-name-score/main/dicts/names_grils_double.txt-Wörterbuchdatei, aus einem Buchstaben bestehende Mädchennamen

  • /chinese-name-score/main/outputs Ausgabedatenverzeichnis

  • /chinese-name-score/main/outputs/names_girls_source_wxy.txt Beispieldatei ausgeben

  • /chinese-name-score/main/scripts Einige Skripte zur Vorverarbeitung von Wörterbuchdateien

  • /chinese-name-score/ main/scripts /unique_file_lines.py Legen Sie die Wörterbuchdatei fest, entfernen Sie doppelte Namen und Leerzeilen im Wörterbuch

  • /chinese-name-score/main/sys_config.py Systemkonfiguration des Programms , einschließlich Crawlen der Ziel-URL, Wörterbuchdateipfad

  • /chinese-name-score/main/user_config.py Benutzerkonfiguration des Programms, einschließlich Alter, Monat, Tag, Stunde und Geschlecht des Babys und andere Einstellungen

  • /chinese-name-score/main/get_name_score.py Programm läuft Eingang

  • Anleitung Verwenden Sie den Code:

  • Wenn keine qualifizierenden Wörter vorhanden sind, suchen Sie die Wörterbuchdateien „names_boys_double.txt“ und „names_grils_double.txt“. Sie können einige Namenslisten hinzufügen, die Sie hier gefunden haben, und diese aufteilen ;

Wenn qualifizierte Wörter vorhanden sind, suchen Sie die Wörterbuchdateien „names_boys_single.txt“ und „names_girls_single.txt“ und fügen Sie im Voraus eine Liste mit einzelnen Wörtern hinzu, die Ihnen gefallen Teilen Sie sie hier nach Zeilen und fügen Sie sie am Ende hinzu. Öffnen Sie user_config.py und konfigurieren Sie sie

Führen Sie das Skript get_name_score.py aus
  1. Sehen Sie sich im Ausgabeverzeichnis Ihre eigenen Ausgabedateien an, die zum Sortieren und für andere Vorgänge nach Excel kopiert werden können;
  2. Konfigurationseingang des Programms

  3. Die Konfiguration des Programms ist wie folgt:

  4. Je nach Konfigurationselement

    entscheidet das System automatisch, ob ein Einzelzeichen-Wörterbuch oder ein Mehrwort-Wörterbuch verwendet wird:
    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 

    更多Verwenden Sie den Python-Crawler, um Ihrem Kind einen guten Namen zu geben相关文章请关注PHP中文网!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn