본문 바로가기
개발 Tools/파이썬_Webcrawling

webcrawling(웹 크롤링) 기본 (requests, headers, get(), raise_for_status(), beautifulsoup )

by 전컴반 2021. 7. 13.
반응형

웹 크롤링이란, 웹사이트를 구성하는 HTML을 가져오는 것이다. 그리고 그 안에서 원하는 정보를 가져올 수 있다.

차근차근해보겠다. 

 

라이브러리 import

 

먼저 크롤링에 필요한 라이브러리는 "requests"이다 

 

import requests

 

객체 생성

 

이렇게 필요한 라이브러리를 불러 왔다. 다음은 객체를 생성하는 게 당연한 순서이다. 객체란, 형태를 가진 뭔가를 만든다고 생각하면 된다. 한번 출력까지 해보겠다.

 

res = requests.get("http://naver.com")
print(res)

출력
<Response [200]>

 

res라는 객체를 생성했다. 우린 get() 함수를 써서 네이버 홈 화면의 HTML 코드를 가져왔다. 

get() 안에 내가 원하는 주소를 적어준다.

 

그런데 출력이 "<Response [200]>" 이라는 이상한 출력문이 나왔다. 이 말은 정상적으로 가져왔다는 뜻이다.

잘 가져 왔다.

 

User-Agent, 403 에러코드 해결방법 

 

근데 간혹 "403"이라는 코드가 뜨는데 이건 권한이 없다는 의미다. 권한이 없는 이유는 여러 가지가 있다.

그중 하나의 이유는 기계가 홈페이지에 접속하지 못하게 막아 두는 경우도 있다. 이럴 때 우린 기계가 아님을 증명하기 위해 User-Agent라는 도구가 필요하다 

 

https://www.whatismybrowser.com/detect/what-is-my-user-agent

 

What is my user agent?

Every request your web browser makes includes your User Agent; find out what your browser is sending and what this identifies your system as.

www.whatismybrowser.com

 

이 홈페이지에 들어가면 고유의 코드가 나온다. 그럼 파란색 박스에 있는 코드를 복사해서 가져온다

그리곤 중요한 부분인데. 딕셔너리 형태로 저장한다. { "User-Agent" : }는 우리가 적어줘야 한다.

 

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)...." }

res = requests.get("http://naver.com" , headers)

 

headers라는 변수에 저장해준다. 그리고 get() 함수 안에 원하는 주소를 입력하고 headers를 집어넣어준다.

이러면 기계의 접근을 막았던 홈페이지의 HTML을 가져올 수 있다. 

 

res.raise_for_status() 에러코드 해결방법

 

우린 다양한 제약과 에러가 있는데 그럴 때 에러가 났다는 걸 알려주는 코드가 있다. 

바로 "raise_for_status()"이다. 만약 에러가 있다면 멈춰주고 에러를 알려준다

 

사용법은 굉장히 간단하다. 

 

res.raise_for_status()

 

이렇게 한 줄이면 된다. 

 

 

text 코드 가져오기

 

우린 HTML의 코드를 가져와서 객체를 만들었다. HTML 코드는 text 코드로 들어가 있다. 

 

print(res.text)

출력
홈페이지의 HTML 코드

 

엄청나게 많은 코드들이 있다. 자 우린 이제 여기서 원하는 정보만 가져오면 된다.  이런 정보를 가지고 또 다른 객체를 만든다 이때 BeautifulSoup이라는 라이브러리가 사용된다.

 

BeautifulSoup

 

사용법은 간단합니다. 데이터를 주어주고 "lxml"의 형식으로 저장합니다. 다른 방법도 있지만 "lxml" 의 형식으로 통일합니다.

 

soup = BeautifulSoup(res.text, "lxml")

 

이렇게 soup이라는 객체를 생성했습니다. 우린 앞으로 soup에서 필요한 정보를 가져올 것입니다. 

 

다음엔 이렇게 만든 걸 가지고 원하는 애들만 끌어와보겠습니다.

반응형

댓글