전체 글
-
장고 DB에 파싱한 내용 담기web/Django 2019. 12. 4. 20:35
지금 부터는 만들어둔 크롤러를 가지고 장고에 적용시켜 사용자가 원할 때 마다 해당 크롤러를 작동시켜 장고 DB (Models) 에 추가 적용하는 것을 해볼 것이다. 정리하면서 문제점이 보여 수정함 문제점 1. 마감 & 매진의 좌석의 경우 크롤러가 파싱하지 않기 때문에 해당 시간 대와 좌석 정보가 빈 값으로 있음 해결 : 파싱할 때 좌석의 마감 & 매진의 정보까지 불러와서 마감되거나 매진된 좌석을 정보를 확인 할 수 있음 Models 만들기 가장 먼저 해야할 일은 Models.py 에 가서 현재 내가 담고 싶은 객체들을 어떻게 담을지 정의 해 주는 것이다. 해당 작업은 데이터베이스에 테이블을 생성하고 해당 테이블에 어떻게 넣을지 정의하는 것이 라고 볼수 있으며 테이블은 class로 정의한다 다음과 같이 정..
-
장고 APP 생성 후 DB에 담을 준비web/Django 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..
-
장고 설치 -> 프로잭트 생성 -> DB 생성web/Django 2019. 11. 28. 17:10
장고를 설치할 때 에는 가상환경에서 실행 할 것이기 때문에 가상환경 안에서 설치하면 됨 다음과 같이 가상환경에 접속해서 pip install django 명령어로 설치를 진행하면 됨 설치가 완료되었다면 새로운 프로잭트를 생성하면 된다 프로잭트 이름은 cgv_web 이라고 생성 다음과 같이 cgv_web, manage.py 라는 디렉터리와 파일이 생성된 것을 볼 수 있다 이제 생성한 프로잭트에서 DB에 변경사항을 확인하고 새로우 DB를 만들어 줄 것이다 makemigrations 명령어를 통해 변경사항을 확인 했더니 다음과 같이 변경사항이 없다고 나타났다. 이제 DB를 만들어 보자 migrate 명령어를 통해 성공적으로 DB가 만들어 진것을 볼 수 있다. 이제 runserver를 하고 로컬 PC의 8000..
-
에디터 & 깃 허브 설정web/Django 2019. 11. 28. 16:46
전에 크롤링한 CGV의 데이터를 가지고 최종적으로는 AWS에 인스턴스를 하나 생성해서 실제로 서비스를 구현하는 것이 목표이다 이때 웹 서버 애플리케이션의 역할을 해주는 장고라는 웹 프레이워크를 사용한다면 손쉽게 웹 서비스를 제공해 줄 수 있음 이제 부터는 간단한 장고의 환경 설정과 사용법을 익히면서 차근차근 나아가보려고 한다 가장먼저 해야 할 일은 장고 프로잭트를 가상환경 안에서 돌려주기 위해 환경 설정을 바꾸어 준다 -> 왜냐하면 나중에 인스턴스를 하나 받아서 서비스를 하려고 할 때 현재 나의 PC와 받은 PC가 다르기 때문에 동작하는데 있어서 문제가 생길 수 있기 때문에 가상환경 안에서 일단 APP을 만드는 것 가상환경에 접속 했다면 이제부터 git을 사용 github에 버전관리를 할 것 이다. 이때..
-
CGV 파싱Web Crawler 2019. 11. 27. 20:54
위의 사진은 전에 iframe 페이지를 크롬 브라우저요 요청한 결과이다 div 태그의 클래스 sect-showtimes인 하위 태그들 li가 있으며 해당 li태그 들은 각각의 영화 정보들을 나누어서 담고 있다 그렇다면 이제 이 li 태그들을 하나씩 불러와서 필요한 정보를 불러온다면 성공적으로 크롤링하는 것이다. 가장 먼저 내가 필요로 하는 정보는 다음과 같다 영화 이름 영화 상영관 위치 영화 상영 시간 상영관 잔여 좌석 상영 날짜 이제 각 정보들이 포함되어 있는 태그들을 찾아야 한다. 영화 이름 -> 다음과 같은 위치에 영화 이름에 대한 정보가 있는 것을 찾았다 바로 한번 정보를 불러와 보자 for i in soup.select("div.sect-showtimes > ul > li") : name = i..
-
CGV 필요한 데이터 파싱Web Crawler 2019. 11. 27. 20:43
이전에 셀레니움을 통해서 각 CGV 지역별 상영관 페이지에 대한 정보를 가져왔다. 이제부터는 가져온 페이지들을 반복문을 통해서 하나하나씩 페이지를 불러와서 필요한 정보만 파싱해오는 것을 할 것이다. 파싱할 페이지를 보니 파싱할 데이터가 있는 부분이 iframe 태그로 되어 있는 것을 확인 할 수 있다 니움을 통해서 각 CGV 지역별 상영관 페이지에 대한 정보를 가져왔다. 이제부터는 가져온 페이지들을 반복문을 통해서 하나하나씩 페이지를 불러와서 필요한 정보만 파싱해오는 것을 할 것이다. 파싱할 페이지를 보니 파싱할 데이터가 있는 부분이 iframe 태그로 되어 있는 것을 확인 할 수 있다 해당 iframe 태그는 현재 페이지에 새로운 페이지를 하나더 추가 할 수 있게 해주는 태그라는 것을 찾을 수 있었다...
-
크롤링 시작 ( 각 지역별 상영관 )Web Crawler 2019. 11. 27. 20:17
가장먼저 크롤링할 페이지를 보자 내가 크롤링 할 데이터는 서울에 속한 전 지역들의 상영 정보이다. 그러기 위해서는 해당 페이지의 네비게이션 바에 연결되있는 링크를 가져와야 한다. 하지만 해당 페이지는 JS로 바뀌기 때문에 Requests 를 통해서 응답을 받기에는 무리가 있음 -> Selenium 사용 위의 사진은 해당 네비게이션 바에 연결 된 링크의 위치이다. li 태그가 각 지역별로 존재하면서 해당 li 태그의 하위 태그인 a태그의 href 속성 값 으로 각 지역 페이지를 요청할 때 필요한 파라미터 값이 담겨져 있다 그렇다면 해당 속성 값을 불러와 URL 요청 양식에 맞게 요청을 한다면 원하는 페이지가 불러와질 것이다. from bs4 import BeautifulSoup from selenium i..
-
CGV 크롤러 (Requests & selenium)Web Crawler 2019. 11. 27. 19:54
크롤링을 할때 분명히 정확한 경로의 태그를 불어와도 none을 반환해주는 경우가 있음 이럴 경우에는 소스를 볼때 해당 태그가 소스에 없을 경우에 none을 출력함 이유를 알기 위해서는 아래의 방식 2가지의 차이점과 웹페이지에 대해 알고 있어야함 웹페이지는 HTML이라는 언어와 CSS, 자바스크립트라는 3가지 언어로 구성이 되어있음 HTML소스를 보는 방식 2가지의 차이점 1. 페이지 소스 메뉴를 통해 본 HTML은 웹서버로부터 받은 최초의 HTML이기 때문 + 이 페이지 소스 메뉴를 통해본 HTML소스의 구조는 자바스크립트로 인해 로딩 후에 변경될 수 있기 때문 EX ) 만약 페이지 소스 메뉴에는 있지만 개발자 도구에서 본 소스에 없는 경우에는 자바스크립트로 인해서 해당 내용이 지워진 경우라고 할 수 있..