[알토르] #2 mysql을 이용한 웹 크롤링 데이터 저장 (Sequel Ace)

Hyungjun·2024년 5월 12일
0

알토르

목록 보기
3/23

-> #1 과제
https://velog.io/@aut7410/0%EC%A3%BC%EC%B0%A8-f9jcy2uh

지난 시간에는 파이썬의 requests 모듈과 BS4 모듈을 사용하여 웹 페이지를 HTTP요청으로 가져오고 특정 태그안의 item을 출력해보는 미션을 진행했습니다. 이번에는 mysql을 설치하고 저번시간 크롤링한 데이터를 DB에 저장해보는 과정을 해보겠습니다. m1 사용자이기에 store에서 다운받을 수 있는 Sequel Ace로 편하게 저장 결과를 보는 것까지 해보겠습니다. mysql workbench는 m1 사용자 입장에서 버전 오류가 많아서 비추합니다.

Misson

  • mysql 로컬 컴퓨터에 설치, 크롤링한 데이터 넣을 테이블 만들기
  • Sequel Ace 설치 및 연결

배경지식

MySQL이란?

MySQL은 관계형 데이터베이스 관리 시스템(RDBMS)이라는 종류의 데이터베이스이다. 관계형 데이터베이스는 데이터가 하나 이상의 열과 행의 테이블(또는 '관계')에 저장되어 서로 다른 데이터 구조가 어떻게 관련되어 있는지 쉽게 파악하고 이해할 수 있도록 사전 정의된 관계로 데이터를 구성하는 정보 모음이다.

엑셀을 사용해봤으면 쉽게 파악할 수 있다. 엑셀 파일 하나하나가 DB이고 그 안의 sheet 하나하나가 table이다. 마지막으로 그안에 세로 한줄한줄 주제를 column이라 한다. 엑셀과 같은 칸 안에 데이터를 저장할 수 있게 만든 시스템이다.

Sequel Ace란?

대표적인 Mac OS mysql GUI이다. mysql은 터미널에서 실행하여 쿼리문을 작성하면서 DB를 만들 수 있다. 하지만 CLI 방식이라 구조를 파악하기에 불편하다. 이 문제를 해결하기 위해 다양한 데이터베이스 관리를 위한 GUI들이 나왔다. GUI에서도 쿼리문을 작성할 수도 있지만 이미 만들어져있는 버튼을 클릭만 하면 table 생성, 삭제 등을 할 수 있어 편리하다.

실습

1.mysql 충돌 방지

내 컴퓨터에는 이미 mysql workbench가 이미 깔려있었다.
mysql workbench란 GUI로 DB를 관리할 수 있는 앱이다. mysql을 홈페이지를 들어가서 다운을 받았었는데, m1은 homebrew 라는 맥os용 패키지 관리자가 있다. 터미널에서 명령어 한줄로 프로그램을 설치/제거 할 수 있다.
여기서 홈페이지에서 다운받은 mysql과 homebrew로 다운받은 mysql이 충돌할 수 있다.
그래서 기존에 있던 mysql을 삭제해줬다.

2.mysql 다운로드

homebrew로 새로 다운 받아준다.
1. Terminal 실행
2. mysql 다운 $ brew install mysql
3. mysql 접속시 비번 생성$ mysql_secure_installation
4. mysql 서버 실행 $ mysql.server start
5. mysql 접속, password 입력 $ mysql -uroot -p
(대문자를 써놨다 제발 까먹지 말아줘 나자신...)
6. mysql 종료 $ mysql > exit
7. mysql 서버 종료 $ mysql.server stop

3.mysql, sequel Ace, pymysql

에러와의 싸움 참고...

  1. 쿼리문을 치고 자신있게 엔터 눌렸는데도
    ->
    ->
    ->
    가 나올때 : 당신은 맨끝에 ;를 빠자먹었다. ;를 쓰고 엔터 쳐주면 탈출가능

  2. ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
    패스워드 정책을 STRONG으로 잡아서 새로운 유저를 만드는 것을 막아놓았다.

해결 :

$ SHOW VARIABLES LIKE 'validate_password%';
$ SET GLOBAL validate_password.policy=LOW;
  1. homebrew로 다운받았기 때문에 server 실행과 종료를 아래와 같은 커맨드로 하여야한다.
	$ brew services start mysql
    $ brew services stop mysql
  1. mysql workbench는 mysql의 버젼에 따라 너무 많은 에러가 있었다. 그래서 macos에서 사용가능한 sequel Ace로 mysql을 연결해보았다.

  2. mysql과 파이썬을 연결해주는 라이브러리는 pymysql과 mysqlclient가 있다. m1에서는 mysqlclient가 오류가 많이 난다고 해서 pymysql로 진행하였다.

파이썬과 mysql 연결

pymysql 모듈을 사용하면 mysql과 연결을 할 수 있다.
1. mysql에 'NBA'database에 연결

import requests
from bs4 import BeautifulSoup
import pymysql

conn = pymysql.connect(
	host='127.0.0.1',
	user='root',
	password='Han123123123!!',
	db='NBA',
	charset='utf8'
)

-> host는 localhost(내 컴퓨터)이기 때문에 127.0.0.1이다.
-> 사용해줄 DB도 선택해서 연결해 준다.

  1. cursor 객체 생성, 'teams'라는 이름의 table 생성,
    column으로 'team_rank','team name','winningodds' 만들기
cur = conn.cursor()
cur.execute("DROP TABLE IF EXISTS teams")
cur.execute("CREATE TABLE teams(team_rank INT NOT NULL AUTO_INCREMENT,team_name VARCHAR(64),winning_odds DEC(10,3),PRIMARY KEY (team_rank))")

  1. requests와 BS4 모듈을 이용하여 HTML문서 파싱하기
url = "https://sports.news.naver.com/basketball/record/index?category=nba"
r = requests.get(url)
soup = BeautifulSoup(r.text, "html.parser")

lankings = soup.select("td>div>span[id]")
winningOdds = soup.select("td>strong")
  1. table에 item들 넣기
for i in range(15):
	cur.execute(f"INSERT INTO teams VALUES({i+1},\"{lankings[i].text}\",\"{winningOdds[i].text}\")")

conn.commit()
conn.close()
  1. sequel Ace와 mysql을 연결할 때도 같은 ip주소와 비밀번호로 연결해주면 된다.
    아래 사진을 보니 sequel Ace로 DB에 크롤링한 값이 들어간 것을 확인할 수 있다.

출처
https://velog.io/@ongsim123/CSData-Base-Docker-mySQL

profile
Cloud Security Expert

0개의 댓글