Step by Security Study

[기초] 크롤링 - requests, bs4 본문

프로그래밍/Python

[기초] 크롤링 - requests, bs4

jooon99 2023. 3. 5. 05:12

크롤링 Crawling

크롤링은 웹사이트에서 원하는 정보를 수집하는 것을 말한다. 파이썬에서 크롤링을 하기 위해서는 몇 가지 모듈을 설치해야 한다.

 

크롤링에 필요한 모듈

1. requests 모듈

HTTP 통신을 위한 파이썬 라이브러리(프로그램 개발을 쉽게 하기 위한 도구)로, 서버에 HTTP 요청 또는 응답을 받을 수 있게 해주는 모듈이다. 실제 웹 브라우저의 경우에는 랜더링을 거쳐 네이버 홈페이지를 보여준다. 파이썬은 단순히 언어이기 때문에 랜더링을 하지 않고 HTML 소스만 가져오게 된다.

# request 모듈 설치
pip install requests

 

import requests   # http 요청을 보내기 위해 requests 모듈을 불러온다.

res = resquests.get('http://naver.com')  # 네이버에 get 요청하여 res 라는 변수에 응답 값을 저장
print(res)        # res에 저장된 응답값을 출력
print(res.text)   # 서버의 응답 내용(html) 정보를 text문서로 출력

 

2. bs4 (BeautifulSoup4) 모듈

html 분석을 위한 파이썬 라이브러리로, html 내용에서 원하는 값에 쉽게 접근을 도와주는 모듈이다.

 

 

html 내용 중 원하는 정보만 추출하는 방법

1. 정규식

2. DOM : html 내용을 tree 형태로 불러옴 (이 기능을 도와주는 모듈이 bs4)

 

# 모듈 선언
import requests    # http 요청을 보내기 위해 requests 모듈을 불러온다.
from bs4 import BeautifulSoup  # bs4 모듈에서 BeautifulSoup 함수를 사용하겠다.

res = requests.get('http://naver.com')
print(res.text)    # res변수에 저장된 서버 응답 내용(html)을 text형식으로 출력한다.

soup = BeautifulSoup(res.text, 'html.parser')
# BeautifrulSoup 함수를 사용하여 html 내용만 soup 변수에 저장
print(soup)


print(soup.a)      # 중복되는 태그가 있는 경우 맨 앞에 있는 태그만 출력된다.

 

 

html 내용에 접근하는 방법 1

점( . )을 가지고 태그에 접근한다. 단, 이 방법은 html 내용 중 중복되는 태그가 있는 경우 맨 앞에 있는 태그의 정보만 출력해준다는 단점이 있다. 예를 들어 html 특정 태그 중 3번째 있는 내용을 가지고 오고 싶어도 1번째 내용 밖에 가져오지 못하는 이야기이다.

# 특정 태그에 접근할 때
변수명.태그명

#예시
print(soup.title)     # soup 변수에 저장된 html 내용 중 title 태그를 출력한다.
                      # 이때, 첫번째 위치한 title태그 내용만 출력된다.


# 텍스트 값만 가지고 오고 싶을 때
변수명.태그명.text

# 예시
print(soup.title.text)  # title 태그의 text 값만 출력된다.

 

 

html 내용에 접근하는 방법 2 : find (찾기) 기능 사용

find ( ) : 가장 먼저 검색되는 조건을 가져올 때 사용

# 사용 형식
.find('태그명', class_ 또는 id = '값')

# 예시
soup2 = soup.find('div', id = 'container')
# soup 변수에 저장되어 있는 html 소스 중에 태그가 div 이고, id 가 container 인 정보를 
  soup2 에 저장
# 필요한 정보 외에 쓸모없는 부분은 줄여주기위해 범위를 좁혀줌

 

find_all ( ) : 해당 조건의 모든 태그를 가지고 올 때 사용하며, 리스트 형태로 가져오게 된다.

# 사용 형식
.find_all('태그명', class_ 또는 id = '값')

# 예시
soup2 = soup.find_all('a') # soup 저장되어 있는 html 내요 중 모든 a태그를 리스트 형태로 가져온다.
pirnt(soup2[0])            # a 태그만 저장되어 있는 soup2 변수에서 첫번째 a태그 내용을 가져온다.

 

 

 

 

 

'프로그래밍 > Python' 카테고리의 다른 글

크롤링을 이용한 복권 당첨 번호 가져오기  (1) 2023.03.05
[기초] 셀레니움 selenium  (0) 2023.03.05
[기초] 모듈 Module  (0) 2023.03.05
[기초] 파일 읽고 쓰기  (0) 2023.03.05
[기초] 함수 Definition  (1) 2023.03.05