ホームページ  >  記事  >  バックエンド開発  >  名前を取得するための Python クローラー実装コード例

名前を取得するための Python クローラー実装コード例

Y2J
Y2Jオリジナル
2017-05-10 11:42:164800ブラウズ

誰もが人生で何かに遭遇するでしょう。それが起こる前は気にしませんが、それが起こると、それは非常に重要であり、短期間で大きな決断を下す必要があることがわかります。生まれたばかりの赤ちゃんに名前を付けよう。以下の記事では主にPythonクローラーを使って子供に良い名前を付ける方法を紹介していますので、困っている友達は参考にしてみてください。

はじめに

生まれてから2週間以内に名前を付けなければならないので(出生証明書が必要)、最初はとてもパニックになった人も多いと思います。漢字が多すぎて、どんな文字でも名前にできるような気がしましたが、どう考えてもそんなことはないことが後で分かりました。不適切だと思い、あちこちの辞書を調べたり、ネットで検索したり、唐宋の詩や宋書、さらには武侠小説まで読みました。しかし、長い間考えてきた名前は、しばしば意見や反対に遭遇します。名前の発音が難しい、親戚の名前とアクセントが同じなど、家族の名前について、検索と否定を繰り返し、ますます混乱してしまいます。

それで、私たちは再びインターネットに戻って検索し、「良い赤ちゃんの名前の完全なリスト」などの多くの記事をインターネット上で見つけました。これらの記事には一度に何百、何千もの名前が掲載されており、読んでいて眩しかったです。使用する方法。名前を入力すると 8 文字または 5 文字の評価が得られるウェブサイトやアプリがたくさんありますが、この機能は非常に優れており、参考にすることができます。または、これらの Web サイトやアプリの名前は非常に少なく、修飾語などのニーズを満たせないか、有料になり、最終的には役立つものが見つかりません。

そこで、次のようなプログラムを作成したいと思いました:

  1. 主な機能は、バッチ名の参照を提供することです。これらの名前は、赤ちゃんの生年月日に基づいて計算されます。

  2. 名前ライブラリを拡張できます。たとえば、インターネット上の歌の本で素敵な名前を見つけました。それらを追加して使用できます。

  3. たとえば、一部の家系図には制限があり、現在、名前には「国」という単語が含まれている必要があります。そのため、名前リストにはスコアが付けられます。反転後、名前を高スコアから低スコアまで見ることができます

  4. このようにして、お子様の生年月日、家系図の制限、および一致する名前のリストが表示されます。あなたの好みに合わせて、リストにスコアが付けられています。これに基づいて、好みの名前を見つけることができます。もちろん、新しいアイデアがあれば、いつでも新しい名前を語彙に追加して再計算できます。

  5. プログラムのコード構造

コードの紹介:

/chinese-name-scoreコードルートディレクトリ

  • /chinese-name-score/

    main

    コードディレクトリ
  • /chinese-name-score/main/dicts 辞書ファイルディレクトリ

  • /chinese-name-score/main/dicts/names_boys_double.txt 辞書ファイル、男の子の 2 文字の名前

  • /chinese-name -score /main/dicts/names_boys_single.txt 辞書ファイル、男の子の 1 文字の名前

  • /chinese-name-score/main/dicts/names_girls_single.txt 辞書ファイル、女の子の 2 文字の名前

  • /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 プログラムの実行入り口


  • コードの使用方法:

該当する単語がない場合は、辞書ファイル names_boys_double.txt および names_grils_double.txt を検索して、いくつかの名前リストを追加できます。ここで見つけたものを行ごとに分割して最後に追加します;

  1. 修飾された単語がある場合は、辞書ファイル names_boys_single.txt と names_girls_single.txt を見つけて、事前に好きな単一の単語のリストを追加してください。行ごとに分割して最後に追加します

  2. user_config.py を開き、設定項目については次のセクションを参照してください

  3. スクリプト get_name_score.py を実行します。
  4. 出力ディレクトリで、出力ファイルを表示し、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. この項目が設定されている場合、たとえば「国」に等しい場合、プログラムは、すべての単語を計算用の名前に結合します。たとえば、Guohao と Haoguo という 2 つの名前が計算されます

  2. この項目を設定せず、空の

    文字列 を保持した場合、プログラムは double のみを読み取ります。 -*_double.txtの単語辞書

プログラムの原理

これは爬虫類の簡単なものです。 life.httpcn.com/xingming.asp Web サイトを開いて表示できます。これは POST フォームであり、必要なパラメータを入力して [送信] をクリックすると、結果ページの下部に 8 文字が表示されます。スコアと5フレームスコア。

スコアを取得したい場合は、2 つのことを行う必要があります。1 つは、クローラーが自動的にフォームを送信し、結果ページを取得することです。もう 1 つは、結果ページからスコアを抽出することです。それは非常に簡単で、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 はパラメータ辞書です。 このメソッドを使用して、データを含む POST が送信されます。次に、結果データがコンテンツから取得されます。

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"

2 番目のことは、Web ページから必要なスコアを抽出することです。これを実現するために 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 は BaZi と WuGe のスコアを分析して抽出することができます。

実行結果の例

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. 現在、プログラムは 1 つの Web サイトのコンテンツのみをクロールできます。アドレスは http://life.httpcn.com/xingming.asp
  2. このリストは参考用です。読んでください。いくつかの記事では、多くの有名人や歴史上の偉人は星占いのスコアが非常に低いですが、彼らは皆素晴らしい業績を残しています。名前には多少の影響力がありますが、時にはキャッチーな言葉が最適です。
  3. このリストから名前を選択した後、Baidu Check 、Renren などの場所で検索して、否定的な人が同じ名前を持ったり、この名前を持つ人が多すぎて街が台無しになるのを防ぐことができます。

    8文字のスコアは中国から受け継がれ、5フレームのスコアは現代の日本人によって発明されました。時々、西洋の干支の命名方法を試すこともできます。ホロスコープと5つのスコアが大きく異なるのは不思議です。さまざまな Web サイトのスコアは、これが参照のみであることをさらに証明しています
  4. この記事のコードは
  5. git

    hub に

    アップロードされています

【関連する推奨事項】 1. Python 無料ビデオチュートリアル

2.

Python meets データ収集ビデオチュートリアル

3.

Python 学習マニュアル

以上が名前を取得するための Python クローラー実装コード例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。