[특강] 웹크롤링(Web Crowling) 기초 개념과 코드 구현(with Python)
본문 바로가기

주식 자동매매 강의/중급반(시황 및 차트 구현)

[특강] 웹크롤링(Web Crowling) 기초 개념과 코드 구현(with Python)

반응형

  이번 강의에서는 최대한 핵심만 간단하게 웹크롤링이 무엇인지 기초 개념을 말씀드리고 코드를 어떻게 구현하는지만 집중적으로 강의하도록 하겠습니다. 오직 프로그래머 알바의 시각에서만 작성되는 포스팅입니다.

 

  현직의 개발자로 말씀드리면, 프로그램의 다양한 함수나 언어들은 절대 외우는 것이 아닙니다. 우리가 필요할 때 가져다 쓰면 되는 것입니다. 이걸 어떻게 만들었지라고 궁금해하는 것은 논문/특허 작성 또는 기타 연구를 위해 필요하지 절대 이게 어떻게 만들었지라고 궁금해하면서 시간을 소비하지 마십시오. 한 예로 우리는 거울만 있으면 되지 굳이 거울을 어떻게 만들었는지에 대한 분석은 필요 없는 것과 동일합니다.

 

1. 웹크롤링 기초 개념

 웹 크롤링은 말이 어려워서 그렇지 특정 사이트에서 내가 원하는 정보를 가져오는 행위입니다. 예를 들어 다수의 정보를 얻고 싶을 때 검색창에 하나씩 키워드를 치며 찾으시죠? 이게 단발성이면 크게 문제가 없는데 메일 반복되는것이면 어떠십니까? 아무리 귀중한 데이터라도 얻기가 귀찮으니 당연히 보지 않게 됩니다.

 그러면 우리가 원한는 정보를 1초 만에 10개든 100개든 컴퓨터로 보내준다면 얼마나 편하겠습니까. 저는 주식 블로그이니 주식의 상방 또는 하방을 결정짓는 요소는 반드시 존재하고 그에 대하여 [링크 : 투자바법] 설명드렸었죠? 이 많은 정보를 한 번에 가져오는 것이 바로 크롤링입니다.

 

크롤링의 개념
크롤링의 개념

 

2. 크롤링의 방법

 준비물은 아래 두 가지만 있으면 됩니다. 둘 다 인터넷에 떠돌고 있는 오픈 소스이죠. 어디서든 구할 수 있습니다.

 * 크롬

 * 파이썬

 과정은 아래와 같습니다.

 (1) 크롬에 원하는 사이트 접속 후 원하는 키워드에 상응되는 값 선정

크롬에 원하는 사이트 접속
크롬에 원하는 사이트 접속

 (2) F12를 눌러 개발자 모드로 진입 : 모든 크롬은 F12를 누르시면 됩니다.

 아래 개발자 모드에서 빨간색 부분을 클릭하고 Ctrl + F키를 누르면 개발자 모드 화면에서 원하는 값의 위치를 찾을 수 있습니다. 저는 6.40을 찾아보겠습니다.

개발자 모드
개발자 모드

 

 (3) 원하는 값 위치 파악하기

 미국 개인 소비자물가 지수 중 6.40이란 값은 strong이라는 태그의 num이라는 클래스 안에 있었군요.

개발자 모드2
개발자 모드2

 좀 크게 확인해 보겠습니다. 아래 그림에서 시작과 끝이 어떻게 구분되어 있죠? 내 시작은 원하는 태그(strong)로 시작하고 끝은 슬러시로(/strong)로 정의하였습니다. 

시작과 끝
시작과 끝

 그러면 6.40이라는 값을 가져오기 위해서는 strong안에 들어 있는 값을 가져오면 되겠죠? 이때 필요한 것이 아래와 같은 코드입니다.

 - find("strong", {"class": "num"}) : strong이라는 태그에서 num이라는 클래스를 찾겠다(find). 는 의미입니다.

 - find("태그명", {"class": "찾고자하는클래스명"})을 하시면 우리가 원하는 값을 가지고 옵니다. 얼마나 간단하지 않습니까? 이렇게 간단하게 하기 위해서는 파이썬에서 고수님들이 미리 코딩해 놓은 함수를 사용해야 합니다.

 

 

3. 크롤링 코딩하기

 아래 코드를 보여 드리겠습니다. 8줄이면 여러분들이 원하시는 모든 값을 가져올 수 있습니다.

크롤링 코드
크롤링 코드

 (1) 크롤링할 수 있는 함수 가져오기

  우선 함수를 가져오기 전에 아래와 같이 terminal에서 두 함수를 설치합니다.

 - pip install requests

pip install requests
pip install requests

- pip install bs4

pip install bs4
pip install bs4

 설치가 완료되면 위의 코드와 같이 우리가 원하는 기능을 불러올 수 있습니다.

 - from urllib.request import urlopen : 우리가 원하는 사이트에 접속합니다.

 - from bs4 import BeautifulSoup : 사이트 접속한 페이지의 모든 값을 가지고 옵니다.

 

 (2) 원하는 사이트에 접속 후 모든 값 가져오기

 - response = urlopen("사이트 주소") : 사이트 주소는 아래 그림과 같이 그래도 http 주소를 복사 붙여 넣기 하시면 됩니다.

원하는 사이트에 접속 후 모든 값 가져오기
원하는 사이트에 접속 후 모든 값 가져오기

 - soup : BeautifulSoup(response, "html.parser") : url html에 접근 후 모든 값을 파이썬으로 가져옵니다. 

 

 (3) 원하는 사이트에 접속 후 모든 값 가져오기

 - value = soup.find("strong", {"class": "num"} : storng 태그에서 num이라는 클래스에 들어있는 내용을 가져옵니다. 이때 가져온 값은 value에 저장합니다.

 - print(value) : 크롤링 코드 아래 console에 나타난 빨간 줄처럼 value에 들어 있는 모든 값을 출력합니다.

 

 (4) 원하는 정보만 가져오기

 - value2 = value.text.strip() : 우리가 원하는 값을 리스트로 추출하기 위해 가져온 값들을 text로 변환하고 탭, 스페이스 바등으로 구분되어 있는 부분을 strip으로 제거합니다. 그리고 최종 값을 value2에 저장합니다.

 - print(value2[0:4] : value2에 들어있는 개인 소비자물가지수 값을 확인합니다. 이때 0, 1, 2, 3 총 4개의 값을 가져옵니다. 크롤링 코드 아래 파란색 선을 보시면 6.00 총 4개의 값 6, ., 0, 0을 가져오는 것을 알 수 있었습니다.

반응형

4. 요약 및 코드

 오늘 강의드린 부분은 기본의 기본을 설명드린 것이고 이것만 이해하신다면 다른 기타 함수도 쉽게 사용할 수 있을 것입니다. 혹시 궁금한 점 있으시면 댓글 달아 주십시오. 감사합니다.

 

from urllib.request import urlopen
from bs4 import BeautifulSoup

response = urlopen("https://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&query=%EB%AF%B8%EA%B5%AD+%EA%B7%BC%EC%9B%90+%EC%86%8C%EB%B9%84%EC%9E%90%EB%AC%BC%EA%B0%80%EC%A7%80%EC%88%98%28CPI%29+%EC%A0%84%EB%85%84%EB%8C%80%EB%B9%84&oquery=%EB%AF%B8%EA%B5%AD+%EA%B7%BC%EC%9B%90+%EC%86%8C%EB%B9%84%EC%9E%90%EB%AC%BC%EA%B0%80%EC%A7%80%EC%88%98%28CPI%29+%EC%A0%84%EB%85%84%EB%8C%80%EB%B9%84&tqi=hrmwcdprvTossRxmw8CssssstlN-392985/")  # 크롤링하고자하는 사이트
soup = BeautifulSoup(response, "html.parser")  # html에 대하여 접근할 수 있도록

value = soup.find("strong", {"class": "num"})
print(value)

value2 = value.text.strip()
print(value2[0:4])
반응형

.link_tit