Step by Security Study
[기초] 크롤링 - requests, bs4 본문
크롤링 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 |