- 수업 내용 리마인드 및 아카이빙 목적의 업로드
Q. 아래 URL의 메인페이지에서 인피니티 스크롤을 통해 10페이지까지의 제목을 크롤링하여 json 파일 형태로 저장해주세요.
A. ChatGPT에게 필요한 정보를 제공하고, 프롬프트를 통해 데이터를 파일로 저장하는 코드 작성 요청
1) 프롬프트 작성 및 요청하기
너는 웹 크롤링 전문가야. 'Selenium'을 사용하여 아래의 웹 페이지에서 '인피니티 스크롤'을 통해 '기사 제목'을 '10페이지'까지 크롤링하고, 이를 JSON 파일로 저장하는 코드를 작성해줘.
제공하는 정보:
1. 웹 페이지 URL: https://www.jungle.co.kr/
2. 크롤링할 요소:
- 각 페이지에 나오는 기사 제목
- 제목의 CSS 선택자: 'ul.thumb_list > li span.title'
- 페이지 이동 버튼 CSS 선택자: 'div#existMore a#more'
3. 페이지 구조:
- "더보기" 버튼을 클릭하여 다음 페이지로 이동
- 페이지 로딩 후 3초 대기 필요
4. 데이터 저장 방법:
- JSON 파일로 저장
- 필드 구조: ['title'] 리스트로 저장
- 파일 경로: 'Jungle_data.json'
5. 시작 코드:
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver = webdriver.Chrome()
driver.get('https://www.jungle.co.kr/')
2) ChatGPT 답변 코드 확인하기
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import json
# 크롬 웹 드라이버 설정
driver = webdriver.Chrome()
# 웹 페이지 열기
driver.get('https://www.jungle.co.kr/')
# 크롤링한 기사 제목을 저장할 리스트
titles = []
# 페이지를 10번 반복하여 크롤링
for page in range(10):
# 기사 제목 크롤링
elements = driver.find_elements(By.CSS_SELECTOR, 'ul.thumb_list > li span.title')
for element in elements:
titles.append({'title': element.text})
# 다음 페이지로 이동 (더보기 버튼 클릭)
try:
more_button = driver.find_element(By.CSS_SELECTOR, 'div#existMore a#more')
more_button.click()
except Exception as e:
print(f"페이지 {page + 1}에서 더보기 버튼을 찾을 수 없습니다: {e}")
break
# 페이지 로딩을 위해 3초 대기
time.sleep(3)
# 크롬 드라이버 종료
driver.quit()
# JSON 파일로 저장
with open('Jungle_data.json', 'w', encoding='utf-8') as f:
json.dump(titles, f, ensure_ascii=False, indent=4)
print(f"총 {len(titles)}개의 기사를 크롤링하였습니다.")
- 설명:
- 웹 드라이버 설정: webdriver.Chrome()을 사용하여 Chrome 브라우저를 제어합니다.
- 기사 제목 크롤링: 각 페이지에서 지정된 CSS 선택자를 사용하여 기사 제목을 추출합니다.
- 페이지 이동: "더보기" 버튼을 클릭하여 다음 페이지로 이동합니다. 만약 "더보기" 버튼을 찾을 수 없다면 크롤링을 중단합니다.
- 대기 시간: 페이지가 로드되는 동안 3초를 기다립니다.
- JSON 파일로 저장: 크롤링한 기사 제목을 JSON 파일로 저장합니다.
3) 출력 결과
[
{
"title": "[디자인정글 시론] ‘잡플래닛’의 역할과 책임: 중소기업 경영인의 시각에서 본 HR 플랫폼의 한계"
},
{
"title": "[포커스 인터뷰] 위안과 격려의 카피, <한 줄 카피> 정규영 저자"
},
{
"title": "[디자인정글 미술관] 사람이 좋아서 사람을 그리는 사람 좋은 캐리커처 작가 노호룡 "
},
{
"title": "테디 베어에서 영감받은 엑소 카이와 구찌의 컬래버레이션 "
},
{
"title": "2024 미래엔아이세움 제 8회 미래엔 어린이책 공모전"
},
{
"title": "한강수계법 제정 25주년 기념 한강사진 전시회"
},
{
"title": "문화, 예술가로 구성된 FC더조이플러스 축구단, 스포츠 및 문화예술 분야 민간 교류 활동 펼쳐 "
},
{
"title": "락앤락, 세계 환경의 날 기념 ‘라인프렌즈 에디션’ 출시"
},
{
"title": "광주요, 맑은 소리로 마음을 울리는 구슬잔 출시"
},
{
"title": "'보브(VOV)' 서핑 브랜드 체험 공간 오픈"
},
{
"title": "[다이슨] 국제 엔지니어링 및 디자인 공모전 제임스 다이슨 어워드 2024 참가자 모집"
},
{
"title": "[디자인정글 시론] ‘잡플래닛’의 역할과 책임: 중소기업 경영인의 시각에서 본 HR 플랫폼의 한계"
},
{
"title": "[포커스 인터뷰] 위안과 격려의 카피, <한 줄 카피> 정규영 저자"
},
{
"title": "[디자인정글 미술관] 사람이 좋아서 사람을 그리는 사람 좋은 캐리커처 작가 노호룡 "
},
{
<하략>
'+ 개발' 카테고리의 다른 글
MySQL을 활용한 크롤링 데이터 저장(ft.Python) (0) | 2024.08.23 |
---|---|
데이터베이스 기초 (1) | 2024.08.21 |
혼합 방식(동기+비동기) 웹 크롤링(#뉴스기사)_Gen.AI (0) | 2024.08.17 |
Scrapy를 이용한 웹 크롤링 (0) | 2024.08.16 |
Selenium을 이용한 웹 크롤링 (0) | 2024.08.15 |