파이썬 웹 에서 데이터 가져 오기 - paisseon web eseo deiteo gajyeo ogi

이제 print()함수 안에 .text 메소드를 추가하여 다시 실행시켜 보자. 결과창에는 <!doctype html>로 시작하는 코드들이 출력된다. 이것들이 바로 웹을 구성하고 모든 정보를 담고 있는 html이다. 

 

import requests  #request 모듈을 활성화

response = requests.get("https://www.google.com/")
print(response.text)
파이썬 웹 에서 데이터 가져 오기 - paisseon web eseo deiteo gajyeo ogi
코드 실행 결과

*라이브러리(모듈) : 기능을 담고 있는 문서

*모듈OR함수: 기능을 수행하는 명령 코드(라이브러리에 들어있는 도구)

*메소드: 속성과 동작방식을 지정하는 코드

*변수: 임의로 지정한 값, 편한 사용을 위해 짧은 이름으로 정의 해줌

ex) print(request.get("~url~"))를 response로 정의해줌

 

 


▼다음편 이어보기▼

 

[파이썬: 웹크롤링] #03 html에서 선택자(selector) 경로 찾기

[왕초보 웹크롤링 무작정 따라하기] html 파악하기, 태그, css 선택자, xpath, 경로 검색, 데이터 찾기 업무지옥을 탈출한 건에 대하여(feat.업무자동화) #03 html에서 선택자(selector) 경로 찾기 html 구

from bs4 import BeautifulSoup

raw = requests.get("https://tv.naver.com/r")

html = BeautifulSoup(raw.text, "html.parser")

clips = html.select("div.inner")

title = clips[0].select_one("dt.title")

chn = clips[0].select_one("dd.chn")

hit = clips[0].select_one("span.hit")

like = clips[0].select_one("span.like")

print(title.text.strip())

🎨 파이썬 웹 데이터 크롤링에 대한 간략한 정보

데이터를 가져올 때 많이 사용되는 메소드는 4가지가 있는데,

find_all()
find()

select()
select_one()

find_all()과 select()는 전체 데이터를 가져오고,
find()와 select_one()은 단위 데이터를 가져오는 역할이다.

find와 select는 쓰는 방법이 다르니 구글링을 하면서 잘 찾아보고 적용해야 한다.

활용 예시는 잘 정리되어있는 포스팅이 있어서 ___여기___를 클릭해서 확인하고, 필요한 부분을 가져다 적용하면 된다.



💾 한국 명소 데이터 가져오기

!! URL은 여기를 클릭해주세요 !!

파이썬 웹 에서 데이터 가져 오기 - paisseon web eseo deiteo gajyeo ogi

Requests와 BeautifulSoup 라이브러리를 가져왔으니 이제 실제로 원하는 사이트에서 데이터를 가져와보자

파이썬 웹 에서 데이터 가져 오기 - paisseon web eseo deiteo gajyeo ogi

수집하고 싶은 데이터인 '장소명'의 태그를 파악하기 위해 '경복궁'에다 우클릭을 한 다음 '검사'를 선택해 개발자 도구를 열어서 확인했다.

파이썬 웹 에서 데이터 가져 오기 - paisseon web eseo deiteo gajyeo ogi

class명이 "rbj0Ud"인 div 안의 div 태그에 들어가 있는 것을 확인할 수 있다.

그리고 html 문서를 확인해보면 모든 장소명이 위와 같은 구조로 되어 있다는 것을 확인할 수 있다.

여기까지만 했을 때, print 되는 값은 아래와 같다.

[

경복궁

,

N서울타워

,

북촌한옥마을

,

창덕궁

,

명동

,

롯데월드

,

청계천

,

남이섬

,

Everland Theme Park

,

국립중앙박물관

]

즉 불필요한 태그까지 모두 리스트 형태로 담아오게 되는데, 태그 안의 text만 가져오기 위해서 get_text()라는 메소드를 사용해줘야 한다.

성공이다!

웹 스크레이핑(Web scraping)은 컴퓨터 소프트웨어 기술을 활용해 웹 사이트 내의 정보를 자동으로 추출하는 것입니다. 파이썬에는 웹 사이트에 접속해 자료를 가져오거나 처리하기 위한 다양한 패키지들이 있어서 비교적 쉽게 웹 스크레이핑을 위한 코드를 작성할 수 있습니다. 파이썬으로 웹 스크레이핑하는 방법을 익히고 나면 많은 양의 웹 자료를 정리하기 위해 반복적으로 수행하던 작업(웹 사이트 접속, 자료 선택, 복사 및 붙여넣기)을 줄일 수 있습니다.

여기서는 파이썬을 이용해 웹 스크레이핑을 하는 방법을 살펴보겠습니다.

웹 스크레이핑을 위한 기본 지식

웹 데이터의 요청과 응답 과정

웹 사이트에 접속하는 컴퓨터나 스마트폰 등을 클라이언트(Client)라고 하고 웹 사이트를 운영하는 시스템을 서버(Server) 혹은 웹 서버(Web Server)라고 합니다. 컴퓨터에서 웹 브라우저로 인터넷을 통해 웹 사이트(웹 서버)에 HTTP 형식으로 원하는 정보를 요청(Request)합니다. 그러면 이 요청에 웹 사이트(웹 서버)가 HTTP 형식으로 응답(Response)해 HTML 파일을 보내줍니다. 이 HTML 파일을 컴퓨터의 웹 브라우저가 해석해 사람이 알아보기 쉬운 형태로 변환해 줍니다.

파이썬 웹 에서 데이터 가져 오기 - paisseon web eseo deiteo gajyeo ogi

웹 페이지 언어(HTML) 구조

HTML은 HTML은 웹 페이지의 문서를 구조적으로 표현할 수 있는 언어로 크게 머리(head)와 몸통(body)으로 이뤄져 있습니다. 내부적으로는 각 항목을 이루는 요소와 그 속성으로 구성돼 있습니다.

다음은 간단한 HTML 파일의 예입니다.



 
  이것은 HTML 예제
 
 
  

출간된 책 정보

이해가 쏙쏙 되는 파이썬

홍길동

위키북스 출판사

2018

웹 페이지의 소스 가져오기

파이썬에서 requests 라이브러리를 이용해 웹 브라우저 없이 소스를 가져오는 방법을 살펴보겠습니다. 웹 페이지에서 어떤 데이터를 가져오기 위해서는 웹 브라우저처럼 파이썬으로 웹 페이지의 HTML 파일의 소스를 가져와야 합니다. 웹 페이지의 HTML 소스코드를 가져오기 위한 파이썬의 내장 패키지로는 urllib가 있습니다. 하지만 urllib는 사용하기 불편하므로 사용하기 편한 requests 라이브러리를 이용해 HTML 소스를 읽어보겠습니다.

아래의 코드를 실행하면 구글 검색 첫 화면의 HTML 코드를 가져올 수 있습니다.

import requests

r = requests.get("https://www.google.co.kr")

웹 사이트에서 데이터 가져오기

날씨 정보 가져오기

다음(Daum) 웹 사이트(https://www.daum.net)에 접속해 검색창에 '지역 이름'과 '날씨'를 함께 검색어로 입력하면 해당 지역의 최신 날씨를 보여줍니다. 예를 들어 "서울시 종로구 청운동 날씨"를 입력하면 아래 오늘의 날씨를 기본 검색 결과로 보여줍니다. 정확한 지역을 설정하지 않으면 가장 근접한 지역의 날씨를 보여줍니다.

파이썬 웹 에서 데이터 가져 오기 - paisseon web eseo deiteo gajyeo ogi

다음은 다음(Daum) 웹 사이트의 구조를 분석해 날씨 정보를 가져오는 함수입니다.

import requests  
from bs4 import BeautifulSoup 
import time

def get_weather_daum(location):
    search_query = location + " 날씨"
    search_url = "https://search.daum.net/search?w=tot&DA=YZR&t__nil_searchbox=btn&sug=&sugo=&sq=&o=&q="
    url = search_url + search_query
    html_weather = requests.get(url).text
    time.sleep(2)    
    soup_weather = BeautifulSoup(html_weather, "lxml")
    
    txt_temp = soup_weather.select_one('strong.txt_temp').get_text()
    txt_weather = soup_weather.select_one('span.txt_weather').get_text()

    dl_weather_dds = soup_weather.select('dl.dl_weather dd')
    [wind_speed, humidity, pm10] = [x.get_text() for x in dl_weather_dds]
    
    return (txt_temp, txt_weather, wind_speed, humidity, pm10)

위 함수를 다음과 실행하면 원하는 지역의 날씨를 가져올 수 있습니다.

(출력 결과)

('31℃', '14시 현재, 구름많음', '3.0m/s', '38%', '좋음 (22㎍/㎥)')

환율 정보 가져오기

네이버에서는 검색을 통해 주요 통화에 대한 환율 정보를 아래 그림과 같이 표 형식으로 제공합니다.

파이썬 웹 에서 데이터 가져 오기 - paisseon web eseo deiteo gajyeo ogi

웹 사이트에 있는 표 형식의 데이터는 판다스(pandas)의 read_html()을 이용하면 쉽게 가져올 수 있습니다. 다음은 네이버에서 '환율'을 검색해 보이는 환율 Table의 데이터를 가져오는 코드입니다.

(출력 결과)

[       통화명    매매기준율         전일대비     등락률
 0      미국 USD  1280.00   전일대비상승24.00  +1.91%
 1  일본 JPY 100   953.55   전일대비상승11.28  +1.20%
 2   유럽연합 EUR  1347.46   전일대비상승1.40  +0.10%
 3      중국 CNY   190.16   전일대비상승1.98  +1.05%
 4      영국 GBP  1582.98   전일대비상승8.84  +0.56%
 5      호주 AUD   904.38   전일대비상승2.32  +0.26%
 6    캐나다 CAD  1001.53    전일대비상승1.13  +0.11%
 7  뉴질랜드 NZD   816.00    전일대비상승5.50  +0.68%]

셀레니움을 이용한 웹 스크레이핑

셀레니움을 이용한 로그인 자동화

셀레니움은 웹 브라우저 제어를 위한 다앙한 기능을 제공합니다. 이를 이용하면 다음과 같은 작업을 수행할 수 있습니다.

  • 웹 사이트 접속
  • 검색 엔진 이용한 검색
  • 웹 브라우저의 내용을 이미지 파일로 저장
  • 헤드리스 웹 브라우저 이용
  • 동적 웹 페이지에서 데이터 가져오기

웹 API

Time API(https://timeapi.io/)는 시간 관련 다양한 웹 API를 제공합니다. 이 웹 API는 데이터를 요청하기 위해 API 키나 토큰이 필요하지 않습니다. 따라서 API 키나 토큰 없이 원하는 데이터를 GET 방식이나 POST 방식으로 요청하면 정해진 형식으로 응답합니다.

다음은 Time API를 이용해 우리나라의 시간대 정보와 현재 시각을 가져오는 코드입니다.

(출력 결과)

{"year":2022,"month":6,"day":25,"hour":16,"minute":3,"seconds":3,"milliSeconds":698,"dateTime":"2022-06-25T16:03:03.6981906","date":"06/25/2022","time":"16:03","timeZone":"Asia/Seoul","dayOfWeek":"Saturday","dstActive":false}

스포티파이를 이용한 노래 데이터 가져오기

스포티파이(Spotify)는 2008년 스웨덴에서 시작한 글로벌 음원 스트리밍 서비스로 8천만 곡 이상의 음원을 보유한 것으로 알려져 있습니다. 스포티파이는 아티스트와 노래 관련 데이터를 가져올 수 있는 API를 제공합니다. 스포티파이 API를 이용하면 아티스트의 인기곡 및 앨범 정보, 트랙(곡)의 정보 및 오디오 특징 정보 등을 가져올 수 있습니다

다음은 스포티파이 API를 이용해 몇 가지 트랙(노래)에 대한 오디오 특징을 가져와 그래프로 표시한 것입니다. 여기서 이용한 트랙은 다음과 같습니다.

파이썬 웹 에서 데이터 가져 오기 - paisseon web eseo deiteo gajyeo ogi

정리

지금까지 파이썬을 이용해 웹 스크레이핑을 수행하는 방법에 대해 살펴봤습니다. 여기에 소개한 내용 외에 파이썬을 이용한 웹 스크레이핑 방법이나 스트림릿(streamlit)을 이용한 웹 앱을 만드는 방법, 카카오 API (kakao API)를 이용해 카카오톡으로 웹 스크레이핑한 결과를 보내는 방법에 대해 알고 싶다면 아래의 책을 참고하세요.