48_PYTHON 크롤러 개발: 원하는 데이터 추출
http 상태(응답) 코드
- 웹 자원 요청 결과
ex) 404, 301, 200, ...
크롤러로 데이터 추출하여 정렬하기
크롤러로 데이터 추출하여 정렬하기
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import requests | |
from bs4 import BeautifulSoup as bs | |
from konlpy.tag import Okt | |
URL = "https://nyj001012.github.io/" | |
def get_tags(): | |
#가져온 결과 저장할 리스트 선언 | |
tags_list = [] | |
# div.initial-content > div#main > div.archive | |
rq = requests.get(URL) | |
print(rq.status_code) | |
if rq.status_code == 200: | |
soup = bs(rq.content, 'html.parser') | |
# (class, id, ...), attr = {key : value, ...} | |
# initial_list: Recent post부터 웹 페이지의 맨 아랫부분까지 | |
initial_list = soup.find_all('div', class_ = 'initial-content') | |
for i in initial_list: | |
archive = i.select('div#main > div.archive') | |
for j in archive: | |
tags_list.append(j.get_text()) | |
return tags_list | |
else: | |
raise Exception("응답 코드가 200번이 아닙니다.") | |
def get_rank(): | |
rank = {} # 빈도수 측정할 딕셔너리 선언 | |
tags_list = get_tags() # get_tags() 호출하여 tags_list에 저장 | |
ok = Okt() | |
for tag in tags_list: | |
noun = ok.nouns(tag) # tag에서 명사만 추출하여 noun에 저장 | |
for n in noun: | |
if not (n in rank): | |
rank[n] = 0 # rank에 n이 없다면 0으로 초기화 | |
rank[n] += 1 # 딕셔너리 값 증가 | |
rank = sorted(rank.items(), key = lambda x:x[1], reverse = True) # 내림차순으로 많이 나온 순서대로 정렬 | |
for k, v in rank: | |
print("{} ({})".format(k, v), end = ' ') | |
if __name__ == "__main__": # name이 바로 실행하는 코드라면 get_rank() 호출 | |
get_rank() |
댓글남기기