언어/Python
[Python3] 간단한 웹 크롤러 만들기
Haekt
2023. 3. 6. 00:46
웹사이트의 html 및 js 코드를 크롤링 해보자.
- 필요한 사전 지식
- 크롤링 : WWW 를 탐색해 나가는 행위를 말한다.
- 파싱 : 자연어, 컴퓨터 언어 등의 문자열을 분석하는 프로세스를 말한다.
- 파서 : 파싱을 하는 프로그램을 말한다.
- 사용한 라이브러리
- urllib : http 관련 요청을 수행할 수 있게 도와주는 python 라이브러리
- requests : http 관련 요청을 수행할 수 있게 도와주는 python 라이브러리 ( 쉽고, 안정적이어서 urllib 보다 더 잘 사용된다고 함.)
- BeautifulSoup(BS) : html 구조 해석을 도와주는 python 라이브러리
- BS 라이브러리
BS 는 사용자가 선택한 파서를 이용해
html 과 xml 코드를 파싱, 검색, 수정하는 기능을 제공한다.
- BS 라이브러리 파서 종류

- BS 라이브러리 find 함수
BS 의 find 함수는 html태그 와 속성 값을 이용해 원하는 내용을 검색하게 해준다.

* 만약 attributes 가 제대로 검색이 안될경우, 딕셔너리로 넣어주면 된다.
예를 들어 find( ‘table’, {'class':’test1'} ) 이런식으로 작성하면 된다.
- 코딩 예시 (1)
$ source activate sai # sai 이름의 아니콘다 가상환경 활성화
# $ pip install urllib3
$ pip install beautifulsoup4 # beautifulsoup 라이브러리 설치
--------------------------------------------
import urllib.request
from bs4 import BeautifulSoup
url = "<https://haekt-log.tistory.com/72>" # 크롤링 할 url 주소
html = urllib.request.urlopen(url) # urlopen 함수로 괄호안의 주소의 html 값을 긁어옴
bsobj=BeautifulSoup(html.read().decode('utf-8'), 'html.parser')
# utf-8 형태로 디코딩, html.parser 로 파싱함
print(bsobj) # 긁어온 결과를 출력함
- 실행 결과 (일부)

- 코딩 예시 (2)
아래는 파서를 html5lib 로 바꾸어 응용한 코드이다. table 태그 부분만 가져올 수 있게 변경했다.
$ pip install html5lib # html5lib 파서 다운로드
--------------------------------------------------
import urllib.request
from bs4 import BeautifulSoup
def get_html(url):
try:
html = urllib.request.urlopen(url).read().decode('utf-8')
except:
return None
if(html==None):
print("url get error")
else:
bsobj=BeautifulSoup(html, 'html5lib')
print(bsobj.find('table')) # table 부분을 가져옴
return bsobj
url = "https://haekt-log.tistory.com/72"
get_html(url)
- 실행 결과 (일부)

* 정규표현식을 사용하면, 원하는 부분만 골라서 가져올 수 있다.