[python] 크롤러 만들어 db에 정보 insert 하기  

일단, 아래 소스에서 영화 제목과 평점을 뽑아 오는 과정은

타 블로그에서 소스를 가져왔습니다..

(해당 소스가 여기저기 블로그에 많이 있어서 어디가 원본인지 파악이 힘듦)

 

파이썬을 이용해서 크롤러를 만들기 위해 구글 선생님한테 가서 무척이나 많은 검색을 부탁드렸고,

아래와 같이, 비교적 간단한 크롤링을 구현하는 소스를 구하게 되었다.

 

그냥 소스를 돌리기만 하면 그건 내 것이 아니니..

소스 분석을 해보았다.

 

그리고 내가 가지고 있는 TEST DB에 그 데이터를 insert 하는데 까지 일단 성공!

블로그에 흔적을 남겨둔다.

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

from bs4 import BeautifulSoup
from urllib.request import urlopen

#선언부로, 어떤 모듈을 쓸것인지.. 선언하는 부분.

#위와 같이 선언한다고 다 쓸수 있는건 아니다. 해당 모듈을 설치하고, 선언을 해야지..

#pip3 install BeautifulSoup

#pip3 install urlopen

#모듈을 설치 해보자.

url = "http://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=cur&date=20180802"

#url 이란 변수에 http...로 시작하는 url 주소를 저장


page = urlopen(url)
soup = BeautifulSoup(page, "html.parser")

#page란 변수에 urlopen함수로 반환받은 url값의 객체를 저장

#잘 모르겠을땐.. 위 함수 돌린다음에, 주피터 노트북에서 print(page) 해보면 이해하기 쉬움

#soup 역시, 해당 변수에 BeautifulSoup 함수에서 반환하는 파싱한 값을 저장


movie_name = [soup.find_all('div', 'tit5')[n].a.string for n in range(0, len(title_n))]
# 전체 영화의 제목을 뽑아옴


movie_point = [soup.find_all('td', 'point')[n].string for n in range(0, len(title_n))]

# 전체 순위의 평점을 뽑아옴



#위 두줄에서 보면 div, tit5, td, point 등이 있는데, 이런값을 어떻게 알아내냐면,

#크롤링할 웹페이지를 크롬에서 열어 F12키를 누르면 html문서 소스가 나온다.

#여기에서 우리가 크롤링하려는 데이터 대상이 어떤 변수에 저장이 되어 화면에 나타나는지

#잘 살펴보면 알 수 있다. 저기 저 웹페이지에 가서 한번 확인 해보자.


import pymysql

#이것역시, pymysql이란 모듈을 쓰겠다고 import 하는 부분이다.

#안깔려있다면, pip3 install pymysql 로 설치..

#pymysql은 mysql 이나 mariadb에 python으로 접속을 할 수 있게 하는 모듈이다.

conn = pymysql.connect(host='192.168.1.25',
user = 'DB유저', password='비밀번호', db = '스키마명',charset = 'utf8')

#접속할 대상 DB의 접속정보

curs = conn.cursor(pymysql.cursors.DictCursor)

#DB에 연결한다 정도..

for x,y in zip(movie_name,movie_point):
#위에서 뽑아낸 영화이름과 평점만큼 insert문을 돌려야 하기에.. 

#두 변수를 zip이라는 변수로 합쳐서 돌립니다. 각각의 데이터를 x,y에 대입합니다.


     sql = "insert into python_test_01 values (%s,%s)"
     val = (x,y)

     curs.execute(sql,val)

#sql변수에 insert....문을 만들어 넣어주고, 영화제목과 평점 부분은 %s라고 받아 넣습니다.

#그리고 val에 x,y변수를 넣어주고, 이것은 위에서 선언한 영화제목, 그리고 평점 데이터 입니다.

#마지막 세번째 명령문에서 sql을 실행하고, %s에 순서대로 변수에 저장된 데이터를 넣어라... 가 됩니다.

conn.commit()

#commit을 치는 부분입니다.

conn.close()

#세션을 닫습니다.

 

*여기에서 처음 시작하는 파린이들에게 해드리고 싶은 말은...

insert문을 for문으로 돌릴 때 for문 아래 세줄의 명령문이 들여 쓰기 되어 있는데,

파이썬은 loop문에 괄호 같은 게 없기 때문에 들여 쓰기로 구분이 됩니다.

다른 언어들과는 달리 들여 쓰기에 의미가 있으니, 잘 파악하시길 바랍니다.

 

감사합니다.



출처: https://stricky.tistory.com/80 [The DataBase that i am good at]

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
15 [python 데이터분석] [jupyter] 주피터 노트북에 이미지 삽입 file 졸리운_곰 2025.09.06 526
14 [python 데이터분석] [Python] Streamlit 사용법 (python 데이터분석 웹 만들기) file 졸리운_곰 2024.12.22 462
13 [python 데이터분석] Anaconda : Error while loading conda entry point: conda-libmamba-solver (libarchive.so.19: cannot open shared object file: No such file or directory) 졸리운_곰 2024.12.14 520
12 [python 데이터분석] Anaconda | Conda update 반영 안됨(update 후에도 버전 변경 없음) file 졸리운_곰 2024.11.18 431
11 [python 데이터분석] Keeping Anaconda Up To Date 졸리운_곰 2024.05.30 552
10 [python 데이터 분석] 국내 경제 100대 통계지표 졸리운_곰 2024.02.18 672
9 [python 데이터 분석] Python 에서 R언어 패키지 호출 : Calling R From Python With rpy2 file 졸리운_곰 2024.01.28 676
8 [python 데이터 분석] 파이썬을 활용한 코스피, 달러 환율정보 수집부터 차트 시각화까지 file 졸리운_곰 2023.12.11 735
7 [Python 데이터분석][pandas] [Python pandas] DataFrame의 문자열 칼럼을 숫자형으로 바꾸기 : pd.to_numeric(), DataFrame.astype() file 졸리운_곰 2023.12.09 357
6 [Python 데이터분석] [Python 환경설정] VS code 설치 및 Anaconda와 연동하기 file 졸리운_곰 2023.03.17 527
5 [Python 데이터분석][python 데이터분석 프로덕션] [Python] Docker를 사용한 Dash 웹앱 생성 file 졸리운_곰 2021.12.10 403
4 [Python 데이터분석] [pandas] 공공데이터(csv) 활용시 한글 깨짐 현상 해결 file 졸리운_곰 2021.09.30 592
3 [Python 데이터분석] 공공데이터포털::공휴일 데이터 조회 (REST API) file 졸리운_곰 2021.09.30 358
2 [Python 데이터 분석] pandas의 to_csv()를 사용해서 csv 파일로 저장하기(save 하기) 졸리운_곰 2021.09.29 603
1 [Python 데이터 분석] 데이터 과학을 단순하게 만드는 3가지 Python 패키지 file 졸리운_곰 2021.09.24 513
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED