티스토리 뷰
안녕하세요 탐구소년입니다.
오늘은 파이썬으로 웹 크롤링하는 방법에 대한 글을 준비했습니다. 잠깐 짬이 나서 쓰는 글이기 때문에 복잡한 내용을 다루기에는 약간 부담이 있으므로.. 웹 크롤링의 개념과, 기본적인 접근 방법, 그리고 간단한 예제 코드 순서로 아주 간단하게만! 정리해보도록 하겠습니다.
웹 크롤링이란?
웹 상에 있는 데이터들을 잘 긁어오는 기술을 크롤링이라고 합니다. 인터넷 사이트들을 돌아다니며 필요한 정보를 자동, 반자동으로 획득하는 행위(?)를 웹 크롤링이라고 하는 거죠.
그러한 행위를 위해서는 역시(!) 그러한 처리를 할 수 있는 컴퓨터 프로그램이 필요하겠죠. 이때 그런 역할을 처리하는 컴퓨터 프로그램을 '웹 크롤러'라고 하고요. 이 웹 크롤러를 사용하는 행위를 웹 크롤링이라고 하면 되겠습니다. 여러가지 사전적 의미, 사람들의 다양한 정의 등을 보면 단어를 정의하는 데 있어 조금씩의 차이는 있겠지만, 간단하게 말하자면 그렇습니다.
기본적인 접근 방법
저는 파이썬으로 웹 크롤링을 하고 싶습니다. 그러면 일단 그 일을 할 수 있는 파이썬 프로그램, 즉 웹크롤러가 필요합니다. 그래서 파이썬으로 웹에 있는 데이터를 긁어오기 위해서 사용되는 여러가지 패키지 중에서 bs4(beautifulsoup4)를 사용할 것입니다.
bs4는 웹 사이트 문서를 구성하는 언어인 HTML과 XML 파일로부터 데이터를 가져오기 위해 사용하는 라이브러리(모듈) 입니다. bs4 모듈과 함께 해야 할 일의 순서는 다음과 같습니다.
1. bs4 모듈을 설치한다(설치 과정은 생략하였습니다).
2. 긁어오고 싶은 데이터가 포함된 웹 문서(대상)를 지정한다(여기서는 제가 직접 만든 웹 문서를 사용할 것입니다).
3. 지정한 문서를 읽어 들인 다음, bs4 모듈을 사용해 그 안에 있는 내용을 탐색해본다.
4. 탐색한 내용 출력하기
그럼 위의 흐름대로 코드를 작성 및 실행시켜 보고, 코드 리뷰를 해보도록 하겠습니다.
예제 코드
먼저, 크롤링 대상 웹 문서(웹페이지, ediya.html)입니다.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>이디야 메뉴판</title>
<link href="ediya.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="menu">
<hr>
<div id="coffee-menu">
<h1>COFFEE</h1>
<ul>
<li class="each">
<p class="each-menu">아메리카노</p>
<p class="each-price">3000원</p>
</li>
<li class="each">
<p class="each-menu">카페라떼</p>
<p class="each-price">3500원</p>
</li>
<li class="each">
<p class="each-menu">카푸치노</p>
<p class="each-price">4000원</p>
</li>
<li class="each">
<p class="each-menu">카페모카</p>
<p class="each-price">4000원</p>
</li>
</ul>
</div>
<hr>
<div id="ade-menu">
<h1>ADE</h1>
<ul>
<li class="each">
<p class="each-menu">자몽에이드</p>
<p class="each-price">3500원</p>
</li>
<li class="each">
<p class="each-menu">레몬에이드</p>
<p class="each-price">3500원</p>
</li>
<li class="each">
<p class="each-menu">유자에이드</p>
<p class="each-price">4000원</p>
</li>
<li class="each">
<p class="each-menu">청포도에이드</p>
<p class="each-price">4000원</p>
</li>
</ul>
</div>
</div>
</body>
</html>
웹페이지는 카페의 메뉴를 표시하는 페이지인데, 웹 크롤링을 통해 여기에 있는 메뉴의 이름을 읽어들여 출력해보도록 하겠습니다.
자, 이번에는 파이썬 코드입니다.
'''
홈페이지에 표시된 메뉴판 읽어들여
메뉴 리스트업 하기
by 탐구소년
'''
from bs4 import BeautifulSoup
homepage = open("ediya.html", 'r')
html_doc = homepage.read()
homepage.close()
soup = BeautifulSoup(html_doc, 'html.parser')
result = soup.find_all('p', class_='each-menu')
for data in result :
print(data.text)
코드 맨 윗줄에서는 bs4 모듈을 import 하고 있습니다. 그 중에서도 BeautifulSoup 클래스를 import하여 웹 문서를 해석할 수 있도록 준비했습니다.
두번째 줄에서는 ediya.html 이라는 웹 문서를 open() 함수로 열고, 세번째 줄에서 내용을 읽어들인 다음 네번째 줄에서 파일을 닫았습니다.
다섯번째 줄에서는 읽어들인 내용을 BeautifulSoup 클래스에 전달하여 객체를 생성했습니다. 이렇게 만들어진 객체는
여섯번째 줄에서 find_all 메소드를 활용해 웹에서 데이터를 찾아냅니다. 인자로 전달된 ('p', class_='each-menu')에서 'p'는 HTML의 <p> 태그를 탐색하겠다는 의미이고, class_='each-menu'는 'each_menu'라는 클래스명을 지닌 태그를 탐색하겠다는 의미입니다.
그렇게 탐색한 결과를 반복문을 통해 확인하면 아래와 같은 결과를 확인하실 수 있습니다.
일단 동작에는 문제가 없는 코드이긴 한데, 기초가 약간 부족하여 주변 셋팅을 원활하게 못 하시는 경우에는 저와 같은 결과를 확인하지 못 하실 수도 있으니 이 점 주의 하시기 바랍니다.
그럼 오늘 내용은 여기서 마무리하고, 전 이만 다시 일을 하러 돌아가도록 하겠습니다. 탐-바!
'IT > 프로그래밍' 카테고리의 다른 글
visual studio code 설치 파일 다운로드 및 설치하는 법 (4) | 2020.06.04 |
---|---|
CSS 속성 선택자 에 대해 알아보자 (0) | 2020.05.20 |
자바스크립트 느낌표 두개 연산자 사용법 (0) | 2020.04.22 |
파이썬 딕셔너리 예제 : 사용자 입력으로 딕셔너리 생성하기 (0) | 2020.04.19 |
파이썬 삼항연산자 사용법 및 예제 (0) | 2020.04.10 |