본문 바로가기
프로그래밍언어/Python

파이썬 웹 크롤링 (Python web crawling or scraping) 만들기 어떤 라이브러리 사용하면되나요? With anaconda Step 1

by by 앵과장 2022. 1. 18.
반응형

안녕하세요
앵과장입니다.

바로전에 맥에 아나콘다 설치 후 가상환경 구성까지 진행하였습니다.

맥 아나콘다 가상환경 파이썬 설치 방법

 

python3 M1 맥 파이썬 아나콘다 가상 개발 환경 설정

안녕하세요 앵과장입니다. 파이썬 가상환경 설정을 진행해보도록 하겠습니다. 바로 앞에서 pyenv 가상환경을 설정해봤는데 M1에서 그렇게 나이스한 가상환경설정은 아닌것 같아서 아나콘다 로

angryfullstack.tistory.com

 

크롤링 하는 이유?

크롤링을 사용하는 이유는 무엇일까요?
개발에는 항상 의도적인 목적이 존재하는데 크롤링하면 왠지 남에정보를 가져오거나 좋은의도로 접근하지 않는것 같은 느낌이 있는데요!!

크롤링 이슈로 몇가지 서비스플랫폼에소 법적인 이슈가 있던적이 있는데 알게모르게 서비스 플랫폼회사들은 크롤링을 하게됩니다.

여기어때와 야놀자의 정보 이슈
사람인과 잡코리아 정보 이슈
은행권 크롤링 이슈
중국인들의 무분별한 상품 크롤링 이슈

이것말고도 무수히 많은 크롤링으로 우리는 정보를 긁어오고 있는중입니다.


 

크롤링을 사용할수 있는 기능
서비스 테스트 목적

서비스 플랫폼 개발을 하거나 신규 적용을 해야할때 기존에 동작하는 중요한 프로세스흐름을 소스레벨에서 테스트 하고 QA검수도 하지만 사람이 화면에서 동작하는것처럼 테스트가 필요할경우에도 셀레니움이나 BS4를 이용해서 비정상으로 동작하는 오류를 검출하는방법도 있습니다.

반복업무 자동 등록

해외구매대행을 진행하면서 상품이 구매되면 배송대행지에 등록해야하는 이슈가 존재했는데 엑셀파일 Row줄수만큼 읽어들인후 배송대행지 사이트에 로그인하고 등록하는것들을 구현한적이 있는데 Api가 존재하지 않다보니 이런 반복적이고 수고스러운 일들을 크롤링 하는방법으로 구현도 할수 있습니다.

특정 서비스 시간별 자동체크

나이키 신발 추첨이나 특정 좌석예약같은 경우 특정시간에 오픈되고 빠르게 진행해야되는데 이럴경우 사람의 손으로 하는것보다는 크롤링방법으로 접근시도하는것도 방법입니다.
물론 퇴근 사람인지 체크하는 로직들이 존재하지만 이런것도다 뚫어버리는 방법들이 존재합니다.

 

 

개발 언어별 웹 크롤링에 사용되는 라이브러리

 

Python 웹 크롤링 라이브러리

Python 최신버전

각 Local 설정 및 Linux, Lamda 등 다양한 가상환경에 오류가 안나는 적정한 Python 버전으로 설치하시면됩니다.

 

beautifulsoup4

Html 문서를 파싱하기위해서 다루기 쉬운 형태로 만들어 원하는 것만 가져올때 필요한 라이브러리이며 이작업을 파싱이라고 합니다.

 

requests

Html 문서를 가져올때 사용하는 패키지 입니다.

requests는 사용자 친화적 문법을 사용하여 다루기 쉬우면서 안정성이 뛰어나다고합니다.

 

selenium

chromedriver 를 이용해 chrome를 제어하기 위해 사용합니다. 

크롤링 하다보면 입력하거나 특정 버튼을 눌러야 하는 상황이 발생할때 selenium라이브러리를 이요하면 사용가능합니다.

chrome driver 드라이버가 필요합니다.

 

Java 웹 크롤링 라이브러리

Jsoup

정적인 자료 수집하는 경우 사용

정적 데이터는 비교적 빠르게 수집할수 있지만 브라우저가 아닌 Http Request 를 사용하기 때문에 동적 데이터를 수집하기 위해서는 해당 서버의 인증키 요구 등 수집할수 없는 데이터들이 많아집니다. 동적인 기능에는 사용하기 불편합니다.

 

selenium

Java에서도 셀레니움 사용가능합니다. 동적 기능을 처리하기위해서 필요합니다.

 

Node JS

Puppeteer 
구글 크롬 devtools protocol 을 통해 크롬 을 제어하기위한 API를 제공합니다. 

공식 사이트 주소 :

https://pptr.dev/ 

 

Puppeteer | Puppeteer

Build status npm puppeteer package

pptr.dev

request, cheerio, iconv 등을 사용합니다.

 

2010년정도에는 웹크롤링 하는 방법이 쉽지않았는데 각 언어와 라이브러리등이 웹크롤링을 기존보다 쉽게 접근할수있게 제공하는것들이 많은것을 확인할수 있네요!!

 

처음 java로 웹크롤링 아래 라이브러리 사용할때만해도 쉽지 않은데 이러면서 사용한 기억이 있네요

html parser

jericho html parser

 

요새는 서비스를 구성하는데 웹크롤링을 많이 사용하기때문에 개발자들이 쉽게 접근할수 있는 것들이 많은데 

웹크롤링이 빈번한 사이트(아마존, 타오바오, 각종 쇼핑몰) 들은 크롤링을 차단하기 위한 다양한 방법이 있기때문에 실제로 해보면

웹크롤링을 한다고해도 어렵게 느껴지는 구간이 발생합니다.

 

로그인 처리 같은 부분들이 예시로 들수있는데 

타오바오 같은경우 중국 대량 상품을 위한 상품 긁어오는 행위가 많다보니 로그인 해야 접근할수있게 구성을 했고

로그인할때 ID/PW 외에 6자리번호, 같은 이미지 클릭, 이미지 퍼즐 등 다양한 크롤링 차단 방법이 되어있는상태입니다.

 

일단 각 언어별로 크롤링을 알아봤고 저는 파이썬으로 진행을 해보도록 하겠습니다!!

자바로 짜볼려고했는데 회사에서도 크롤링 해야하는 기획안도 나왔고 저도 파이썬으로 짜보고 싶었기때문에 겸사겸사 진행예정입니다.