>  기사  >  백엔드 개발  >  이름을 가져오기 위한 Python 크롤러 구현 코드 예

이름을 가져오기 위한 Python 크롤러 구현 코드 예

Y2J
Y2J원래의
2017-05-10 11:42:164800검색

누구나 인생에서 한 가지 일을 겪게 됩니다. 그것이 나타나기 전에는 신경쓰지 않지만, 일단 나타나면 그것이 매우 중요하고 짧은 시간 내에 중대한 결정을 내려야 한다는 것을 알게 됩니다. 그것은 당신 자신을 위한 것입니다. 갓 태어난 아기에게 이름을 지어 주십시오. 다음 글에서는 파이썬 크롤러를 활용해 아이에게 좋은 이름을 지어주는 방법을 주로 소개합니다. 도움이 필요한 친구들이 참고할 수 있습니다.

서문

아이가 태어난 후 2주 이내에 이름을 정하는 데 시간이 많이 걸리기 때문에 부모라면 누구나 한 번쯤 경험했을 거라 믿는다. 모두가 저와 같습니다. 처음에는 한자가 너무 많다고 느꼈지만 아무 문자나 선택하여 이름을 만들 수 있다는 것을 나중에 깨달았습니다. 아무리 생각해도 부적절하다는 생각이 들어서 사전과 인터넷을 뒤져보니 당시, 노래 가사, 가경, 심지어 무술소설까지 찾아 봤습니다. 오랫동안 생각해 왔던 말투의 어려움, 친척의 이름과 같은 사투리 등의 문제 등 가족들의 의견과 반대가 자주 발생하게 되면서 반복되는 악순환에 빠지게 됩니다. 검색과 거부의 순환은 점점 더 혼란스러워집니다.

그래서 다시 인터넷에 를 검색해 보니 "좋은 남자아이 이름 전체 목록" 같은 기사가 한 번에 수백 개나 나오더라고요. 수천 개의 이름은 사용하기에는 너무 어지러워요. 이름을 테스트하는 웹사이트나 앱이 많이 있습니다. 이름을 입력하면 8자 또는 5자 등급을 얻을 수 있습니다. 이 기능은 상당히 좋으며 참고로 사용할 수 있습니다. 그러나 이름을 하나 입력해야 합니다. 테스트를 위해 하나씩 테스트하거나 이러한 웹 사이트나 앱에는 이름이 거의 없으며 한정 단어와 같은 요구 사항을 충족할 수 없거나 비용이 청구되기 시작하여 결국 유용한 항목을 찾을 수 없습니다.

그래서 저는 다음과 같은 프로그램을 만들고 싶었습니다.

  1. 주요 기능은 배치 이름에 대한 참조를 제공하는 것입니다. 아기 이름 생년월일과 별자리를 기준으로 계산됩니다.

  2. 예를 들어, 노래 책에서 좋은 이름을 찾으면 이름 라이브러리를 확장할 수 있습니다. 인터넷에서 해당 이름을 추가하여 사용할 수 있습니다.

  3. 예를 들어 일부 가계도에는 제한이 있습니다. 현재 "國" 문자가 있는 세대에 속해 있는 경우 이름에는 "國" 문자가 있어야 합니다.

  4. 이름 목록에 점수를 부여할 수 있으므로 반전 후 볼 수 있습니다. 높은 점수부터 낮은 점수까지 이름에서

이런 방법으로 사본을 얻을 수 있습니다. 자녀의 생년월일, 가계도와 일치하는 이름 목록이 있습니다. 제한 사항과 선호도, 그리고 목록에 참고용으로 점수가 주어져 있으며 이를 바탕으로 하나씩 알아내서 마음에 드는 이름을 찾을 수 있습니다. 물론, 새로운 아이디어가 있으면 언제든지 어휘에 새로운 이름을 추가하고 다시 계산할 수 있습니다.

프로그램 코드 구조

코드 소개:

  • /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 사전 파일, 1개 - 여자아이의 이름

  • /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. 출력 디렉터리에서 정렬 및 기타 작업을 위해 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. 이 항목을 설정하지 않고 빈 문자열 을 유지하면 프로그램은 이중 단어만 읽습니다. *_double.txt 사전

프로그램 원리

간단한 크롤러입니다. life.httpcn.com/xingming.asp 웹사이트를 열어서 확인할 수 있습니다. 이는 필수 매개변수를 입력하고 제출을 클릭하면 결과 페이지 하단에 8자가 표시됩니다. 점수와 5프레임 점수.

점수를 얻으려면 두 가지 작업을 수행해야 합니다. 하나는 자동으로 크롤러에 양식을 제출하고 결과 페이지를 가져오는 것입니다.

우선 매우 간단합니다. 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()

여기의 매개변수는 매개변수입니다. dict. 이 방법을 사용하면 데이터가 포함된 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"

두 번째는 웹 페이지에서 필요한 점수를 추출하는 것입니다. 이를 달성하기 위해 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을 구문 분석하고 8개 문자와 5개 그리드의 점수를 추출할 수 있습니다.

실행 결과의 예

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. 이 목록은 참고용입니다. 역사상 많은 유명인과 위대한 사람들이 있습니다. 그들의 이름은 매우 낮은 평가를 받았지만 모두 훌륭한 성과를 거두었습니다. , 이름은 어느 정도 영향력이 있지만 때로는 눈에 띄는 단어가 최고입니다. 🎜>

    이 목록에서 이름을 선택하면 Baidu, Renren 및 기타 장소에서 이름이 같거나 이 이름을 가진 사람이 너무 많을 경우를 대비하여 확인할 수 있습니다. 🎜>
  4. 8자 악보는 중국에서 물려받았고, 5자 악보는 근대에 일본인이 발명한 것이기도 합니다. 5개의 점수는 웹사이트마다 매우 다릅니다. 이는 이 항목이

  5. 다음 사이트에

    업로드
  6. 되었음을 증명합니다.
git

허브 요약

[관련 추천]

1. 🎜>

2.

Python, 데이터 수집을 만나다 영상 튜토리얼

3. Python 학습 매뉴얼

위 내용은 이름을 가져오기 위한 Python 크롤러 구현 코드 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.