검색
검색
공개 노트 검색
회원가입로그인

[이솦] 파이선으로 배우는 AI 기초 20

이솦 | EBS 소프트웨어·인공지능 교육

현대의 인공지능은 대부분 데이터를 기반으로 만들어지는 인공지능이다. 머신러닝 이라는 이름에서도 알수 있듯이 데이터로 부터 패턴과 특성을 파악해서 지능적 행위를 하는 모델들을 만들게 된다. 그래서 머신러닝 모델을 만드려면 많은 데이터가 필요하다. 데이터를 수집하는 방법은 어려개가 있다. 공공 데이터를 이용하는 방법도 있고, 한국에는 data.go.kr이 있다. 교육과 연구를 위한 학습용 데이트를 체계적으로 모아둔 ai hub, 실제 문제 해결을 위한 kaggle에서도 데이터를 얻을수 있다.

하지만 많은 회사나 기관들이 자신들의 머신러닝 모델을 만들기 위해서 스스로 데이터를 생산하고 있다. 사진 데이터의 경우네는 직접 수집하기도 하고, 인터넷 웹사이트에서 데이터를 수집하기도 한다. 이렇게 인터넷에서 데이터를 직접 수집하는 것을 웹크롤링이라고 한다.

오늘은 파이썬와 웹크롤링 기법을 이용해서 펭수의 사진을 직접 수집해 보자.

데이터 수집

웹 크롤링은 웹페이지를 그대로 가져오는 것이기 때문에 가져온 웹 페이지에서 다양한 정보를 얻을 수 있다.

-코로나 사이트에서 실시간 현황 받아보기

-주식데이터를 크롤링해서 내 목록 만들기

-내가원하는 상품 리뷰 모아보기

-뉴스에서 내가 다니는 회사의 기사만 모으기

-머신 러닝 모델을 위한 데이터 수집하기 등이다.

다만 크롤링후 다양한 처리 작업이 필요하다.

요즘 머신러닝 모델을 만들때는 다양한 sns시스템에서 제공하는 openAPI를 많이 사용한다. 사람이 현재 어떤 이슈에 대한 의견, 관심 분야를 파악하기 가장 좋은것이 실시간으로 교환되는 sns공간이다.

openapi는 다양한 데이터 베이스에서 접근할수 있게 해주는 소프트웨어 이다. 물론 당연히 모든 데이터를 오픈하는건 아니고 일부 데이터를 오픈하고 있다. 예를 들어 트위터나 인스타 그램의 데이터를 오픈api로 열어 주면 우리가 그것을 받아서 사용할수 있다.

웹크롤링은 웹페이지를 그대로 가져오는것이며 웹페이지는 html로 되어 있다. 태그와 태그안의 내용으로 구성되어 있는 문서이다. 실제 데이터를 수집할때는 태그 정보를 포함할때도 있지만, 태그안에 있는 내용만 추출, 저장해서 사용한다.

html문제서 태그를 제외하고 내용만 뽑아내기 위해서는 외부 모듈이 필요하다. 크롤링에서서 사용되는 대표 라이브러리는 request 와 beautifulsoup이다. beautifulsoup는 가져온 html코드를 파이선이 이해하는 객체 구조로 변환하는 라이브러이이다. parsing을 통해 의미있는 정보로 추출이 가능하다. request는 웹페이지를 가져오는데 사용한다. 이외에도 selenium, urllib등의 라이브러리가 있다.

import requests
from bs4 import BeautifulSoup
res = requests.get("https://v.daum.net/v/202210055103331542")
print(res.content)
soup = BeautifulSoup(res.content, 'html.parser')
soup.find_all('p')
#print(soup.find('p').getText())

request를 이용해서 사이트에서 내용을 가져와서 res로 저장하고 res의 내용을 출력해 주고 그 다음에는 beautifulsoup 에서 내용을 파싱하고 p라는 글자를 찾아서 그내용을 찾아 준다. <p> </p>는 줄바꿈이다. (사이트 주소가 바뀌어서 지금은 그대로 나오지는 않는다. 원리는 이미 알고 있는 내용이라)

이번에는 html문서를 변수에 직접 입력해서 사용해 보자.

import requests
from bs4 import BeautifulSoup

html_doc = """
<html><head><title>에디와 함께 하는 파이선 기반 인공지능</title></head>
<body>
<p class="title"><b>파이썬을 이용하여 머신러닝 모델 만들기</b></p>
<p class="story">에디와 함께하는 파이선을 이용한 인공지능 기초
<a href="http://example.com/eddielink1" class="student" id="link1">에디링크1</a>,
<a href="http://example.com/eddielink2" class="student" id="link2">에디링크2</a>,
<!-- <a href="http://example.com/eddielink3" class="student" id="link3">에디링크3</a>, -->
<!-- 재미난 인공지능공부 -->
</p>
<p class="story">...</p>
</body></html>
"""

soup = BeautifulSoup(html_doc, "html.parser")
print(soup.prettify())
print(soup.title)
print(soup.title.string)
print(soup.title.parent.name)
print(soup.p)
print(soup.find_all('a'))
print(soup.find(id="link3"))

for link in soup.find_all('a'):
    print(link.get('href'))

간단하게 링크가 3개 있는 html문서가 된다.

request 와 bs 임포트 후에 html 문서를 그대로 넣는다. 아주 간단한 문서 이다.

이제 이 문서를 파싱해 보자.

문서를 bs로 넣고 그대로 가져오고 그 내용을 태그와 내용을 구분할수 있다.

보면 알겠지만, 웹크롤링은 자동화 하기 어려운 특성을 가지고 있다. 웹페이지마다 구조가 다르기 때문이다. 하지만 필요한 데이터를 수집하는데 꼭 필요한 작업이다.

sns 서비스를 이용해서 데이터를 획득하고 싶을 것이다. key가 필요하다. 이런 api의 활용은 실제 머신러닝의 학습 현장에서 많이 사용되고 있다. 카카오에서 key를 발급받는 과정을 살펴보자.

개발자 사이트에 가입하고 로긴한다. 개발할 어플리케이션 정보를 입력한다. 앱키 정보란에서 네이티브 앱키, REST api 키, java script 키, admin키 등을 확인할수 있다. 본인이 필요한 키를 사용하면 된다. 이렇게 하면 카카오의 데이터를 활용할수 있다. 물론 카카오에서 모든 데이터를 다 주는 것은 아니다. 비용을 지불하고 대용량 데이터를 받을수 있게 되어 있는 경우도 있다.

실습

import requests

# 이미지가 있는 url 주소
url = "https://www.ebssw.kr/images/egovframework/com/ebs/event/img_penggame.png" 
# 해당 url로 서버에게 요청
img_response = requests.get(url) # Make the request to the URL
# 요청에 성공했다면,
if img_response.status_code == 200:
    print("=== [이미지 저장] ===")
    with open("test.jpg", "wb") as fp:
        fp.write(img_response.content)

요약

웹 크롤링은 웹데이터를 모으는 가장 일반적인 방법이다.

웹 크롤링으로 얻은 데이터는 받으시 전처리가 필요하다.

웹크롤링한 문서는 html로 되어 있고 이 문서를 파싱하는 라이브러리가 beautifulsoup이다.

추가 학습

라이브러리특징장점단점사용 예시
BeautifulSoupHTML 파싱 도구 (requests와 함께 사용)간단한 웹 페이지에서 데이터 추출에 적합동적 콘텐츠 처리 불가정적 페이지에서 데이터 추출
Scrapy고성능 웹 크롤링 프레임워크대규모 크롤링 및 데이터 수집에 적합복잡한 설정, 동적 콘텐츠 처리 제한대규모 웹사이트 크롤링
Selenium브라우저 자동화 도구동적 콘텐츠 크롤링 가능 (JS 렌더링 지원)느리고 리소스 소비가 큼동적 웹 페이지 상호작용 크롤링
Requests-HTML간단한 자바스크립트 렌더링 지원간편한 자바스크립트 처리와 HTML 파싱대규모 크롤링 비효율적, 자바스크립트 처리 한계 있음동적 콘텐츠가 있는 간단한 페이지

결론

  • 간단한 정적 웹 페이지 크롤링: BeautifulSoup + Requests

  • 대규모 크롤링 프로젝트: Scrapy

  • 동적 콘텐츠가 있는 웹 페이지: Selenium (단, 성능 희생)

  • 동적 콘텐츠가 있지만, 간단한 크롤링: Requests-HTML

이제 열심히 데이터를 더 모아야겠다.

공유하기
카카오로 공유하기
페이스북 공유하기
트위터로 공유하기
url 복사하기
조회수 : 112
heart
T
페이지 기반 대답
AI Chat