Haekt‘s log

[Python3] 간단한 웹 크롤러 만들기 본문

언어/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)

 

- 실행 결과 (일부)

 

 

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

Comments