전국 대학교 이름을 크롤링 하여 DB에 저장하기 -1
개요
Toy Project에서 사용하기 위해 전국의 대학교를 미리 저장하여 DB에 정리하고, 이를 회원가입시에 저장된 DB를 미리 노출 시켜 통일된 양식으로 소속 학교를 받을 수 있도록 나무위키의 전국 대학교가 나와있는 html 페이지를 크롤링 하여 DB에 저장하여본다.
목차
소개
1. 해당하는 페이지의 Robots.txt
나무위키의 Robots.txt 확인하기
나무위키의 대학교가 나와 있는 페이지를 크롤링하기 위해 먼저 나무위키의 robots.txt를 확인해 주어야 한다.
조회하려는 url은 아래와 같다.
이 때 나무위키의 robots.txt는 /w 경로를 Allow 하고 있음을 확인 할 수 있으므로, 크롤링을 계속하여 진행해 나가도록 한다.
2. html page의 tag 목록
추출하려는 값의 tag를 확인하기
내가 추출하고자 하는 data의 tag 정보를 확인한다.
이 때 대학교의 이름이 나와 있는 태그는 <a> 태그의 class = "wiki-link-internal"임을 확인 할 수 있다. 그리고 해당하는 내용의 대학교 정보는 <a> 태그 안의 title 값과 일반 text에서 살펴 볼 수 있다.
3. 파이썬 크롤링 코드
정보를 가져오고자 하는 html page를 추출
def get_html(url): #html 페이지 가져오기
scraper = cloudscraper.create_scraper()
html = ""
g_html = scraper.get(url)
if g_html.status_code == 200:
html = g_html.text
return html
페이지를 읽어와 상태 코드가 200으로 통과한 html 페이지를 return 하여준다.
가져온 html 페이지에서 필요로 하는 정보 추출
def crawl_html(html): #가져온 html 페이지의 tag 속 정보 가져오기
u_list = []
soup_html = BeautifulSoup(html,'html.parser')
title = soup_html.find_all('a', class_= "wiki-link-internal")
for t in title:
tmp = t["title"]
if '목록' not in tmp:
u_list.append(tmp)
s_list = set(u_list)
return s_list
BeautifulSoup Module을 통해 html 페이지를 객체에 등록한다.
soup_html = BeautifulSoup(html,'html.parser')
BeaultifulSoup 객체의 함수인 find_all 함수를 통해 태그의 class="wiki-link-internal"인 정보들을 전부 가져온다.
title = soup_html.find_all('a', class_= "wiki-link-internal")
위의 값에서 추출하고자 하는 값은 title 값이므로 아래의 코드를 통해 title 값을 추출한다.
for t in title:
tmp = t["title"]
그 후 값을 정렬하면 원하는 값을 가져올 수 있게 된다.
전체코드
import cloudscraper
from bs4 import BeautifulSoup
def get_html(url): #html 페이지 가져오기
scraper = cloudscraper.create_scraper()
html = ""
g_html = scraper.get(url)
if g_html.status_code == 200:
html = g_html.text
return html
def crawl_html(html): #가져온 html 페이지의 tag 속 정보 가져오기
u_list = []
soup_html = BeautifulSoup(html,'html.parser')
title = soup_html.find_all('a', class_= "wiki-link-internal")
for t in title:
tmp = t["title"]
if '목록' not in tmp:
u_list.append(tmp)
s_list = set(u_list)
return s_list
html = get_html('https://namu.wiki/w/%EB%8C%80%ED%95%9C%EB%AF%BC%EA%B5%AD%EC%9D%98%20%EB%8C%80%ED%95%99%EA%B5%90%20%EB%AA%A9%EB%A1%9D')
univ_list = crawl_html(html)
univ_list = list(univ_list)
univ_list.sort()
for univ in univ_list:
print(univ, end='\n')
'Toy Project > Web Crawling' 카테고리의 다른 글
[Web Crawling] 전국 대학교 이름 크롤링 하여 DB에 저장하기 -2 (0) | 2022.01.27 |
---|---|
[Web Crawling] 웹 크롤링(Web Crawling)이란? (0) | 2021.08.05 |