본문 바로가기
Python/Python_Crawling

CGV 무비차트 크롤링

by Mr.DonyStark 2024. 2. 11.

□ 과정

  ○ 데이터 영역 Select_one으로 지정

  ○ 영역에서 특정영역 Select 으로 지정

  ○ 반복문을 활용해 '부모태그.클래스명 > 자식태그.클래스명'식으로 정확한 타겟 지정후 string으로 추출

    * ('span.txt-info >  strong').next_element 사용시 strong 태그가 열리고나서 출현하는 첫번째 텍스트 또는 태그값 가져옴. 도중 중간에 태그가 있다면 그 전까지만 가져옴. 하위 태그 및 텍스트까지 가져오고 싶다면  .find_next() 활용.

                        <span class="txt-info">
                            <strong>
                                2024.02.07 
                                <span>개봉</span>
                                
                            </strong>

 

□ 코드 및 결과

#라이브러리 호출
import requests
from bs4 import BeautifulSoup

#타겟
target_url = 'http://www.cgv.co.kr/movies/'

#request setting
get_info = requests.get(target_url)
all_data = get_info.text
#parser setting
parser_tool = BeautifulSoup(all_data, 'html.parser')

#영역처리
#└영화차트가 모아진 영역 select_one으로 선택
mv_area = parser_tool.select_one('div.sect-movie-chart')
#└영역에 li태그들을 모두 선택하기위해 select 선택
mv_area_list = mv_area.select('li')
#└선택된 li태그 중 하위태그들에 포함된 타이틀이나 예매율 정보 크롤링 
for index, v in enumerate(mv_area_list):
    index += 1
    #(1)영화제목
    mv_title = v.select_one('div.box-contents > a > strong.title').string
    #(2)예매율
    mv_reserve_rate = v.select_one('div.box-contents > div.score > strong.percent > span').string
    #(3)평점:에그지수
    mv_egg_rate = v.select_one('div.box-contents > div.score > div.egg-gage.small > span.percent').string
    #(4)개봉일
    # .next_element = 앞에서 태그지정하고 그다음 바로 요소(택스트)를 바로 가져옴
    mv_opendate = v.select_one('div.box-contents > span.txt-info > strong').next_element.strip()
    print(f'□ {index} 순위 영화\t:\t{mv_title}\n예매율\t:\t{mv_reserve_rate}\t/\t평점(에그지수)\t:\t{mv_egg_rate}\n개봉일\t:\t{mv_opendate}')