web/Django
장고 APP 생성 후 DB에 담을 준비
JongSeok_12
2019. 11. 28. 18:45
app 생성은 다음과 같은 startapp [ app이름 ] 으로 생성하면 된다
생성한뒤 디렉터리를 보면 새롭게 cgv라는 app 디렉터리가 생긴 것 을 볼 수 있다
이제 생성한 app 안에 있는 model.py를 이용해
데이터베이스의 구조를 잡아보려고 한다.
다음과 같이 model.py 파일 안에 클래스를 만들었다
이는 DB에 Cgv_data 라는 테이블을 생성하고
name, start_tim, end_time ........ dt_area 의 컬럼을 생성한 것이다.
이제부터는
크롤링하는 소스를 함수형태로 바꾸어서
import 해서 사용할 수 있도록 만든뒤 본격적으로 DB에 담는 것을 수행한다.
from bs4 import BeautifulSoup
from selenium import webdriver
import requests
import os
movie_datas = []
# cgv 서울 지역별 url요청후 해당 지역의 iframe 링크를 받아온다
# 받아온 링크를 가지고 crawling이라는 함수의 인자값으로 전달
# 아래함수에서 추가한 list를 return
def get_cgv () :
url = 'http://www.cgv.co.kr'
driver = webdriver.Chrome()
driver.get('http://www.cgv.co.kr/reserve/show-times/')
html = driver.page_source
driver.close()
soup = BeautifulSoup(html, 'html.parser')
soup2 = soup.find('div', id='contents')
for area in soup2.select('ul > li:nth-child(1) > div.area > ul > li > a ') :
area_link = url + area.get('href')
res = requests.get(area_link)
soup = BeautifulSoup(res.content, "html.parser")
for i in soup.select("iframe#ifrm_movie_time_table"):
movie_data_link = url + i.get("src")
crawling(movie_data_link)
return movie_datas
# 받아온 인자값 movie_data_link 에는 iframe 링크가 담겨있음
# 본격적으로 필요한 정보들을 수집
# 좌석, 영화 이름, 시간 등등...
# 모든 데이터는 dic 형태로 담은뒤 movie_datas list에 추가
def crawling (movie_data_link) :
res = requests.get(movie_data_link)
soup = BeautifulSoup(res.content, "html.parser")
for i in soup.select("div.sect-showtimes > ul > li"):
for ec in i.select("div.type-hall > div.info-timetable > ul > li > a"):
movie_data = {
"name" : i.div.a.strong.text.strip(),
"start_time" : ec.get("data-playstarttime"),
"end_time" : ec.get("data-playendtime"),
"area" : ec.get("data-theatername"),
"seat" : ec.get("data-seatremaincnt"),
"dt_area" : ec.get("data-screenkorname")
}
movie_datas.append(movie_data)
# 직접 해당 파일을 실행시킬때만 get_cgv()함수의 리턴 값을 print
# 즉 해당 모듈을 import 해서 사용시에는 직접 함수를 불어와서 실행
if __name__ == '__main__' :
print(get_cgv())
결과
위와 같이 성공적으로 해당 parser.py 파일이 실행 되는 것을 볼 수 있음