전국 대학교 이름을 크롤링 하여 DB에 저장하기 -2
목차
소개
1. Library 선언
MySQL Library 선언
MySQL과 연동하기 위해 파이썬 모듈중에 하나인 MySQLdb 모듈을 선언하여 준다.
import MySQLdb
2. Database와 연결
Database Connect
모듈과 Database를 연결시켜 주기 위해, 파이썬의 MySQLdb 객체를 통해 MySQL과 연결시켜준다. 이 때 각 Parameter는 MySQL을 연결 할 때와 동일한 Parameter 이다.
conn = MySQLdb.connect(
user="userName",
passwd="password",
host="hostName",
db="database schema",
)
3. Cursor 생성
Cursor 생성
Query를 실행하기 위해 앞서 만들어진 Connect 객체의 cursor() method를 이용해 Cursor을 생성하여준다.
cursor = conn.cursor()
4. 파이썬에서 Query 실행
Query 실행
파이썬에서 크롤링한 데이터를 넣기 위해 cursor의 execute method를 통해 Query를 실행시켜준다.
def input_crawl_data(c_data):
global cursor,conn
for univ in c_data:
if " " in univ:
name,campus = map(str,univ.split())
cursor.execute(f"INSERT INTO University(name,campus) VALUES(\"{name}\",\"{campus}\")")
else :
cursor.execute(f"INSERT INTO University(name) VALUES(\"{univ}\")")
이 때 ex)연세대학교 서울캠퍼스와 같이 분교가 존재하는 학교는 " " 으로 구분되어 있어, 만약 " "가 있다면 캠퍼스를 구분시켜 Database에 저장해주도록 한다.
5. 입력된 데이터를 확인
입력된 Data 출력
cursor.execute("SELECT * FROM University")
rows = cursor.fetchall()
for row in rows:
print(row)
6. DB 연결 종료
DB 연결 종료
원하는 정보를 확인 후 Database와의 연결을 해제 시켜준다.
conn.commit()
conn.close()
7. 전체 소스 코드
import cloudscraper
import requests
import MySQLdb
from bs4 import BeautifulSoup
conn = MySQLdb.connect(
user="userName",
passwd="password",
host="hostName",
db="database schema",
)
def input_crawl_data(c_data):
global cursor,conn
for univ in c_data:
if " " in univ:
name,campus = map(str,univ.split())
cursor.execute(f"INSERT INTO University(name,campus) VALUES(\"{name}\",\"{campus}\")")
else :
cursor.execute(f"INSERT INTO University(name) VALUES(\"{univ}\")")
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 and '관련' 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()
cursor = conn.cursor()
input_crawl_data(univ_list)
cursor.execute("SELECT * FROM University")
rows = cursor.fetchall()
for row in rows:
print(row)
conn.commit()
conn.close()
'Toy Project > Web Crawling' 카테고리의 다른 글
[Web Crawling] 전국 대학교 이름 크롤링 하여 DB에 저장하기 -1 (0) | 2022.01.24 |
---|---|
[Web Crawling] 웹 크롤링(Web Crawling)이란? (0) | 2021.08.05 |