마케팅을 위해 정보 리스트업이 필요했다. 단순 복사 붙여넣기를 하기엔 너무 오래 걸릴 것 같아
파이썬 크롤링을 해보기로 했다.
이전에 파이썬, 파이썬 웹 크롤링을 해본적이 있어 파이썬을 설치하였다.
이전 크롤링은 스크래핑 수준이었어서 동적 크롤링 학습이 필요했다.
시간이 많이 없었기 때문에 chat gpt의 도움을 많이 받았다 (머쓱)
웹 크롤링과 웹 스크래핑 개념
웹 크롤링과 웹 스크래핑은 어떤 차이가 있을까요? 먼저 웹 크롤링을 살펴보겠습니다.웹 크롤링은 'URL을 탐색해 반복적으로 링크를 찾고 가져오는 과정'입니다. '기어 다니다' 라는 뜻의 영어 단
velog.io
그 크롤링을 할 때 이용했던 라이브러리 몇가지를 정리해볼까 한다.
#1. beautifulsoup4
HTML 및 XML 파일을 구문 분석하는 라이브러리로 웹 페이지에서 원하는 데이터를 쉽게 추출할 수 있다.
pip install beautifulsoup4
HTML/XML 파싱
HTML 태그 속성, 텍스트 검색 및 추출, 트리구조 탐색
#2. pandas
데이터 조작 및 분석을 위한 라이브러리로 데이터 프레임이라는 데이터 구조를 사용하여 데이터를 처리하고 분석한다.
pip install pandas
데이터 프레임 생성 및 조작
데이터 필터링 및 정렬
결측치 처리
다양한 형식(CSV, Excel 등)의 데이터 읽기 및 쓰기
#3 openpyxl
엑셀 파일을 읽고 쓸 수 있는 라이브러리
pip install openpyxl
엑셀 파일 생성 및 수정, 셀 값 읽기 및 쓰기
스타일링 및 포맷팅
차트 생성
#4 selenium
동적 웹 페이지 크롤링
pip install selenium
웹브라우저 제어
웹페이지 요소 찾기 및 조작
스크린샷 찍기
자바스크립트 실행
#5 webdriver-manager
pip install webdriver-manager
웹 드라이버 자동 설치 및 업데이트 (셀레니움)
그리고 크롤링을 하다가 429 에러를 띄웠다. 아무 생각 없이 집에서 하다보니 ...........
일시적으로 ip 차단을 당한 것 같은데 당황스러웠다. 다행이도 지금은 들어가진다.
왜 429에러가 뜨며, 이걸 방지할 수 있는 방법을 서치하기 시작했다.
💧 429 에러가 뜬 이유
짧은 시간동안 너무 많은 반복되는 요청을 보냈기 때문이다.
크롤링 등을 막기 위해 홈페이지 자체에서 특정 시간을 설정해두기도 하나보다.
💧 예방 방법
대기 시간을 늘려준다.
retries = 3
for _ in range(retries):
try:
driver.get(url)
time.sleep(5) # 페이지 로딩 대기
break
except Exception as e:
print(f"Error fetching page: {e}")
time.sleep(10) # 오류 시 더 긴 대기 시간
else:
print("Failed to fetch page after retries.")
break
실제로 대기시간을 늘려주니 429 에러가 뜨지 않았다.
⚡ 마지막 페이지에서 무한 크롤링
마지막 페이지에서 크롤링이 종료되지 않고 무한 크롤링이 됐다.
어떻게 해야하지 고민이 많았는데 내가 크롤링하고자 하는 최대 페이지를 수동으로 입력해줬다.
max_pages = 2 # 최대 페이지를 2로 설정
...
while page <= max_pages: # 최대 페이지까지만 다음 코드를 반복
🍀 중간 광고 처리
리스트 사이사이에 광고가 들어가있어서 오류가 발생했다. 이 광고를 어떻게 처리할 수 있을까 고민을 했다.
광고들의 공통점을 찾아야만 했는데 같은 url로 이동하는 로직이었다.
그래서 해당 요소를 갖고 있는 경우에는 skip 하는 코드를 추가했다.
if "공통url" in onclick_value:
print("Skipping ad element.")
continue
그렇게 받아낸 엑셀파일
회사 컴퓨터에 excel이 없어서 설치하고 인증받느라 시간을 꽤 보냈다.
이 크롤링이 올바른 방식인지는 모르겠다. 우선 급한 일부터 처리하고 인프런에서 무료로 구독해둔
파이썬 크롤링 강의를 볼 예정이다. 뭐든 알아두면 좋으니 ! 하하하
'인턴일기(티디아이)' 카테고리의 다른 글
[사이드프로젝트] 배포이야기 -s3 포스트맨 테스트 (0) | 2024.08.05 |
---|---|
[사이드] swagger 적용 삽질 기록 (1) | 2024.07.25 |
사이드플젝 - 2 (0) | 2024.06.17 |
사이드 프로젝트 시작 -1 (1) | 2024.06.11 |
직무교육, 인턴 2일차 (1) | 2024.06.04 |