[Python] Beautiful Soup을 이용한 네이버 영화 랭킹 및 학교 강의계획안 크롤링

김서영·2020년 11월 22일
0
post-custom-banner

[Python] Beautiful Soup을 이용한 네이버 영화 랭킹 크롤링하기 예제

졸업프로젝트 '커벨리오'에서 개인의 성적표 및 강의 계획안 크롤링이 필요하다. 다만, 아직 학교 관계자로부터 정확한 답변은 받지 못해, 개인 성적표 크롤링을 할 수 있을 지는 불명확하다. 그래서 일단 강의 계획안으로 크롤링 해보았다.


Python – BeautifulSoup 은 Web crawling을 위한 라이브러리다.
git bash에서 명령어를 통해 다운 받을 수 있다.

Requests는 웹의 html 파일을 읽기 위한 라이브러리다.
마찬가지로, git bash에서 명령어를 통해 다운 받을 수 있다.

gitbash로 들어가서,
$pip install bs4 //beautiful soup 다운로드
$pip install requests //request 다운로드

이제 본격적으로 크롤링 연습을 해보자.

위 캡처화면 속 영화 랭킹을 크롤링해서 출력하고 싶다면,
F12를 누른 후, html 파일을 분석해본다.

영화 제목에 해당하는 부분을 찾았으면, 이제 코드를 작성한다.

import requests
from bs4 import BeautifulSoup
url = 'https://movie.naver.com/movie/sdb/rank/rmovie.nhn'
response= requests.get(url)
source = response.text

soup = BeautifulSoup(source, 'html.parser')

top_list = soup.findAll("div",{"class":"tit3"})

index = 1
for i in top_list:
print (index, i.text.strip())
index = index+1

50위 영화까지 아주 잘 나온다.

[Python] Beautiful Soup을 이용한 강의 계획안 크롤링

위에서 진행한 것처럼, 강의 계획안의 url을 가져온 후, class 이름을 찾아 크롤링한다.

import requests
from bs4 import BeautifulSoup

import pymysql #데베연동

#user, password, DB 는 본인 DB에 맞게 설정
conn = pymysql.connect(host='127.0.0.1', user='*', password='****',
db='***', charset='utf8')
curs = conn.cursor()
conn.commit()

sql = """select count(id) from offered;"""
curs.execute(sql)
result = curs.fetchone()
result_to_str = str(result[0])
count = int(result_to_str) +1

url = 'http://~~~'

def info(url):
response= requests.get(url)
source = response.text
soup = BeautifulSoup(source, 'html.parser')
list = soup.findAll("td",{"class":"GV_TL_L"})
index = 1
for i in list:
if index == 1:
name = i.text.strip()
print ('과목명:', name)
elif index == 3:
time = i.text.strip()
print ('시간:', time)
elif index == 4:
num = i.text.strip()
print ('학수번호:', num)
elif index == 7:
professor = i.text.strip()
print ('교수명:', professor)
index = index+1
list = soup.findAll("td", {"class":"GV_TL_C"})
index = 1
for i in list:
if index == 34:
mid = i.text.strip()
print(mid)
elif index == 55:
final = i.text.strip()
print(final)
index = index+1
sql = """insert into offered (id,lecture_name,lecture_time,lecture_id,lecture_professor,lecture_mid,lecture_final) values (%s,%s,%s,%s,%s,%s,%s)"""
curs.execute(sql, (count,name,time,num,professor,mid,final))
info(url)

#db의 변화 저장
conn.commit()
conn.close()

profile
하지만 저는 이겨냅니다. 김서영이죠?
post-custom-banner

0개의 댓글