Study/파이썬[Python]

파이썬[Python] 004. 크롤링을 하기 전에.. 라이브러리란?

jaeyeong 2022. 3. 5. 17:37

안녕하세요!

지난 글에서 크롤링에 대해 알려드렸는데요.

 

( 못보신 분들은 참고해주세요=) )

 

파이썬[Python] 003. 크롤링의 정의

저는 모각코에서 파이썬 - 크롤링편 프로젝트를 진행하고 있어요. 프로젝트 설명을 보면서 따라하는건 쉽지만 그것으로 끝내면 완전히 내 것이 되지 않는다는 생각이 들어서 복습을 해보려고

jae-yeong.tistory.com


오늘은 크롤링을 본격적으로 하기 전에 알아야 할 요소를 알려드리려고 합니다.

혹시 '라이브러리'라는 단어를 들어보신 적 있으신가요?

저는 휴대폰 어플을 사용할 때 음.. 주로 음악 어플에서 본 적 있네요!

라이브러리 생성을 해서 원하는 음악을 넣어두고 그 라이브러리를 재생한다면 담아놓았던 노래들이 재생되죠~

 

파이썬에서 라이브러리도 비슷한 개념입니다!

특정 함수를 사용하기 위해 매번 정의를 내리고 사용해야한다면

그 많은 함수들을 다 외우고 있어야 하는데요. 생각만해도 너무 복잡합니다..

 

그래서! 파이썬의 라이브러리에 담겨있는 함수들을 불러올 수 있고 바로 사용이 가능합니다~

라이브러리란?
프로그래밍을 할 때 코드를 작성하지 않고 필요한 기능을 수행할 수 있도록 마련된 함수와 메소드의 집합

정의를 보시면 딱! 감이 오시죠?

무수히 많은 함수들이 저장되어 있는 라이브러리! 여기서 원하는 기능이 있는 함수를 쏙쏙 빼오는 것 입니다.


그렇다면, 크롤링 할 때 어떤 라이브러리 함수가 필요할까요?

오늘은 두가지를 소개드리겠습니다.

 

첫번째, requests

리퀘스트라는 단어의 뜻을 아시나요? 검색을 해보면 [요청, 요구, 신청...]이라고 합니다.

말 그대로 요청을 하는거예요.

 

"크롤링 할 웹사이트의 정보를 요청합니다! 주세요!" 라고 말이죠.

 

더 정확히 말하자면 웹사이트의 HTML 코드를 불러오기 위해 requests 라이브러리를 사용합니다.

사용하는 방법은 간단합니다.

import requests

requests.get('데이터를 받아 올 url')

** 라이브러리를 불러올 땐 상단에 import를 이용해서 함수를 불러와야 합니다!

get과 함께 사용되어 웹사이트의 데이터를 받아옵니다.

 

불러온 데이터는 문자열로 가져오게 됩니다.

 

두번째, BeautifulSoup

이 라이브러리는 리퀘스트로 불러온 문자열 HTML 중 원하는 부분을 실제 HTML코드로 변환하기 위해 사용합니다.

 

requests를 통해 웹 사이트 전체 정보를 불러왔지만 문자열로 불러오게 되는데요.

BeautifulSoup을 통해 다시 HTML코드로 변환하는겁니다.

 

다시 말해서 HTML 문서를 탐색해 원하는 부분만 뽑은 문자열을 실제 HTML 코드로 변환하기 위해 사용됩니다.

 

사용 방법은 다음과 같습니다.

import bs4

bs4.BeautifulSoup("HTML 데이터", "데이터 타입")

BeautifulSoup은 bs4라고 하며 requests와 동일하게 import를 통해 불러오게 됩니다.

그리고 차례로 HTML데이터와 데이터타입을 작성하는데요.

 

requests로 불러온 url 정보를 raw라고 하고 이를 코드로 설명드리겠습니다.

import requests
import bs4

url="원하는 웹사이트 링크"
raw=requests.get(url)

html=bs4.BeautifulSoup(raw.text,"html.parser")

먼저 import를 통해 requests와 bs4를 불러온 뒤

requests로 원하는 웹 사이트 전체를 가져옵니다. 이를 raw로 지정합니다.

 

그 다음 bs4를 통해 문자열로 불러와진 raw.text를 html로 변환 것이 바로 위의 코드 입니다.


마지막으로 세번째, find

find는 말 그대로 찾다. 입니다. 우리가 사용할 것은 find와 find_all이 있는데요,

find는 html코드 중 원하는 태그 그리고 선택자와 처음 일치하는 데이터를 반환하며

find_all은 일치하는 모든 데이터를 반환합니다.

 

#1
html.find('div')
#2
html.find('div',{'class':'example1'})
#3
html.find_all('div',{'class':'example2'})

1번의 경우 html 코드에서 첫번째에 있는 'div'태그의 내용을 가져오며

2번의 경우 html 코드에서 첫번째에 있는 'div'태그 중 class=example1의 내용을 가져옵니다.

3번의 경우에는 html 코드에서 'div'태그 중 class=example2인 내용은 모두 가져오게 됩니다.

 

자! 여러분, 크롤링을 위한 사전 준비는 모두 마쳤습니다.

수많은 개념 중에 세가지를 다 이해했다면 크롤링을 할 수 있습니다!

 

다음 시간엔 위 라이브러리와 함수를 통해 정적크롤링을 직접 해보겠습니다 =)