CS/ETC
웹사이트 상세페이지 크롤링
휴먼코딩
2024. 8. 17. 03:22
- http://www.cgv.co.kr 의 무비차트 링크를 가져와 상세페이지 정보를 가져온다
- https ssl 인증 무효화
- requests와 BeautifulSoup를 사용하여 구현
- pandas를 통해 CSV 파일로 출력
페이지에서 상세페이지 url을 가져와 url 안의 정보를 가져오는 방식으로 구현했다.
import requests
import pandas as pd
from bs4 import BeautifulSoup
# 요청 헤더 user agent 설정
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
# URL에 대한 GET 요청을 보내서 웹 페이지의 HTML 콘텐츠를 가져옵니다.
resp = requests.get('http://www.cgv.co.kr/movies/?lt=1&ft=0', headers=headers, verify=False)
# 응답 객체의 인코딩을 'utf-8'로 설정합니다.
resp.encoding = 'utf-8'
# 'lxml' 파서를 사용하여 HTML을 구문 분석한다.
soup = BeautifulSoup(resp.text, 'lxml')
# 1. <ol> 요소를 찾습니다.
ol = soup.find('ol')
# 2. <a> 태그에서 데이터 추출
data_rows = []
links = []
for li in ol.find_all('li'):
a_tag = li.find('a')
if a_tag:
href = a_tag.get('href', '') # <a> 태그의 href 속성 값
data_rows.append([href])
links.append(href)
print(links) # 링크 URL을 리스트에 추가
출력 결과
['/movies/detail-view/?midx=88499']
['/movies/detail-view/?midx=88499', '/movies/detail-view/?midx=88170']
['/movies/detail-view/?midx=88499', '/movies/detail-view/?midx=88170', '/movies/detail-view/?midx=88454']
# 3. 각 링크에 대해 추가 데이터 요청
additional_data = []
for link in links:
print("url:" , 'http://www.cgv.co.kr' + link )
response = requests.get('http://www.cgv.co.kr' + link, headers=headers, verify=False)
response.raise_for_status() # HTTP 요청 오류 발생 시 예외를 발생시킴.
page_soup = BeautifulSoup(response.text, 'html.parser')
# <div class='title'>에서 <strong> 태그의 텍스트 추출
title_div = page_soup.find('div', class_='title')
strong_tag = title_div.find('strong')
additional_info = strong_tag.text.strip()
# 추가 정보 리스트에 추가
additional_data.append(additional_info)
# 결과 출력
for data in additional_data:
print(data)
출력 결과
url: http://www.cgv.co.kr/movies/detail-view/?midx=88499
url: http://www.cgv.co.kr/movies/detail-view/?midx=88170
url: http://www.cgv.co.kr/movies/detail-view/?midx=88454
임영웅ㅣ아임 히어로 더 스타디움
에이리언- 로물루스
행복의 나라
# 4. 데이터프레임 생성
df = pd.DataFrame(data_rows, columns = ['영화 url'])
df['제목'] = additional_data
# 5. 생성된 DataFrame 출력
print(df)
출력 결과
# 4. 데이터프레임 생성
df = pd.DataFrame(data_rows, columns = ['영화 url'])
df['제목'] = additional_data
# 5. 생성된 DataFrame 출력
print(df)# 4. 데이터프레임 생성
df = pd.DataFrame(data_rows, columns = ['영화 url'])
df['제목'] = additional_data
# 5. 생성된 DataFrame 출력
print(df)
# CSV 파일로 저장
df.to_csv('movies.csv', index=False, encoding='utf-8')
DB에 CSV 데이터 넣기