본문 바로가기
  • 2025
인턴일기(티디아이)

파이썬 크롤링으로 리스트업하기

by soonrang 2024. 7. 5.

마케팅을 위해 정보 리스트업이 필요했다. 단순 복사 붙여넣기를 하기엔 너무 오래 걸릴 것 같아 

파이썬 크롤링을 해보기로 했다.

 

이전에 파이썬, 파이썬 웹 크롤링을 해본적이 있어 파이썬을 설치하였다. 

이전 크롤링은 스크래핑 수준이었어서 동적 크롤링 학습이 필요했다. 

시간이 많이 없었기 때문에 chat gpt의 도움을 많이 받았다 (머쓱)

 

 

웹 크롤링과 웹 스크래핑 개념

웹 크롤링과 웹 스크래핑은 어떤 차이가 있을까요? 먼저 웹 크롤링을 살펴보겠습니다.웹 크롤링은 'URL을 탐색해 반복적으로 링크를 찾고 가져오는 과정'입니다. '기어 다니다' 라는 뜻의 영어 단

velog.io

https://velog.io/@bbkyoo/%EC%9B%B9-%ED%81%AC%EB%A1%A4%EB%A7%81%EA%B3%BC-%EC%9B%B9-%EC%8A%A4%ED%81%AC%EB%9E%98%ED%95%91-%EA%B0%9C%EB%85%90

그 크롤링을 할 때 이용했던 라이브러리 몇가지를 정리해볼까 한다. 

 

#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이 없어서 설치하고 인증받느라 시간을 꽤 보냈다. 

이 크롤링이 올바른 방식인지는 모르겠다. 우선 급한 일부터 처리하고 인프런에서 무료로 구독해둔 

파이썬 크롤링 강의를 볼 예정이다. 뭐든 알아두면 좋으니 ! 하하하