반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, 머신러닝 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

 

[웹 크롤링 기초]

2021.03.22 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이썬 웹 크롤링 기초 of 기초

2021.03.23 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 크롬드라이버 크롬 버전에 맞춰서 설치하는법

2021.03.24 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이썬 웹 크롤링 관련 패키지 3종 총정리

2021.03.27 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이썬 웹 크롤링을 위한 속성 HTML, CSS 요약 정리

2021.03.28 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 동적/정적 페이지 차이와 그에 따른 크롤링 방법 간단정리

 

[정적 웹크롤링]

2021.03.30 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이썬 웹 크롤링 정적 수집 방법 개념 정리_find, find_all, select, select_one

2021.04.02 - [파이썬 패키지/웹 크롤링] - [Python/Requests/Beautifulsoup] 네이버 뉴스 기사 제목 크롤링을 통한 정적 수집 기초 정리

2021.04.06 - [파이썬 패키지/웹 크롤링] - [Python/Reuqests/Beautifulsoup] 파이썬 정적 웹크롤링 텍스트, 이미지, 하이퍼링크, 속성 가져오는 법

 

[동적 웹크롤링]

2021.04.03 - [분류 전체보기] - [코딩유치원] 네이버 뉴스 기사 제목 크롤링을 통한 동적 수집 기초 정리(selenium, beautifulsoup)

2021.06.21 - [파이썬 패키지/웹 크롤링] - [Python/Selenium] 파이썬 동적 웹크롤링 텍스트, 하이퍼링크, 이미지, 속성 가져오는 법

2021.05.22 - [파이썬 패키지/GUI 프로그램] - [파이썬 GUI 프로그래밍] 잡플래닛 리뷰 정보 크롤링 GUI 프로그램

 


 

오늘은 지난 시간 알아본 동적/정적 수집 방법 중, 정적 수집에 대해서 다루어 보려 합니다.

 

수집하고자 하는 웹페이지의 url을 넣어주면 항상 같은 화면을 보여주는 정적 페이지를 다룰 때 주로 사용합니다.

 

순서는 아래와 같습니다.

 

<정적 수집 순서>

1단계. 목표로 하는 웹 페이지의 html을 requests 패키지를 이용하며 받아 옴

2단계. 가져온 html 문서 전체를 beautifulsoup4 패키지를 이용하여 파싱(parsing)함

3단계. 필요한 정보만 골라서 리스트에 담음.

4단계. 리스트를 print() 함수로 출력하던가, excel이나 csv 파일에 저장.

 

사실 1번과 2번은 아래의 코드로 아주 간단하게 가능합니다.

 

1단계. requests

 

html 문서를 가져올 때 사용하는 패키지입니다. requests는 사용자 친화적인 문법을 사용하여 다루기 쉬우면서 안정성이 뛰어나다고 합니다. 그래서 파이썬 기본 라이브러리에 포함된 urllib 패키지보다 자주 사용됩니다.

 

설치 방법

VS code의 터미널창에서 아래와 같이 입력하면 됩니다. 만약 anaconda를 사용하신다면 pip 대신 conda를 입력해주셔도 됩니다.

 

pip install requests

 

사용 방법

# requests 패키지 가져오기
import requests               

# 가져올 url 문자열로 입력
url = 'https://www.naver.com'  

# requests의 get함수를 이용해 해당 url로 부터 html이 담긴 자료를 받아옴
response = requests.get(url)    

# 우리가 얻고자 하는 html 문서가 여기에 담기게 됨
html_text = response.text

 

2단계. BeautifulSoup4

 

BeautifulSoup4 패키지는 매우 길고 정신없는 html 문서를 잘 정리되고 다루기 쉬운 형태로 만들어 원하는 것만 쏙쏙 가져올 때 사용합니다. 이 작업을 파싱(Parsing)이라고도 부릅니다.

설치 방법

 

마찬가지로 VS code의 터미널창에서 아래와 같이 입력하면 됩니다.

 

pip install beautifulsoup4

 

사용 방법

방금 전 Requests 패키지로 받아온 html 문서를 파싱해야하므로, 이전 코드 블록을 실행하셔야 합니다.

 

# BeautifulSoup 패키지 불러오기
# 주로 bs로 이름을 간단히 만들어서 사용함
from bs4 import BeautifulSoup as bs

# html을 잘 정리된 형태로 변환
html = bs(html_text, 'html.parser')

 

하지만 웹크롤링의 핵심은 필요한 정보의 위치와 구조를 파악해서 원하는 것만 취하는 것이 되겠습니다. 크롤링을 원하는 사이트가 생겼을 때에 능수능란하게 코딩하기 위해서는 꼭 이 스킬을 확실히 익혀두셔야 합니다.

 

우선 html과 css에 대해 알고 계신다는 것을 전제로 설명하도록 하겠습니다. 잘 모르시는 분들은 지난 글을 참고해주세요.

2021.03.27 - [파이썬 패키지/웹크롤링] - [코딩유치원] 파이썬 웹 크롤링을 위한 속성 HTML, CSS 요약 정리

 

find( ), find_all( ) 함수

 

출처. TCP School

 

 

find는 하나만 찾는 것, find_all은 모두 다 찾는 것입니다. 주의할 것은 find로 찾는 것이 중복이라면 가장 첫 번째 것만 가져온다는 것입니다.

괄호( ) 안에는 html의 태그(tag)나 속성(attribute)이 들어갑니다. 웹 크롤링 관련 코드를 보다보면 find 함수를 종종 사용한 경우를 보는데, 그 코드를 이해할 목적으로만 가볍게 알고 넘어가시는 것을 추천 드립니다. 왜냐하면 CSS 선택자 개념을 사용하는 select( ) 함수를 사용하는 것이 훨씬 직관적이거든요!

# 목표 태그 예)
<p class = "para">코딩유치원</p>
<div id = "zara">코딩유치원</p>

# 태그 이름으로 찾기
soup.find('p')

# 태그 속성(class)으로 찾기 - 2가지 형식
soup.find(class_='para') #이 형식을 사용할 때는 class 다음에 언더바_를 꼭 붙여주어야 한다
soup.find(attrs = {'class':'para'}) 

# 태그 속성(id)으로 찾기
soup.find(id='zara') 
soup.find(attrs = {'id':'zara'})

# 태그 이름과 속성으로 찾기
soup.find('p', class_='para')
soup.find('div', {'id' = 'zara'})

 

select( ), select_one( )

 

출처. TCP School

 

select( )는 find_all( )과 같은 개념이고, select_one( )은 find( )와 같은 개념입니다. 다만, select( ) 함수는 괄호( )안에 CSS 선택자라는 것을 넣어서 원하는 정보를 찾는 것이 특징입니다. 아주 직관적이고 쉬워서 이 방법을 추천드립니다.

 

< 웹 크롤링에 자주 사용되는 CSS 선택자 >

 

분류 설명
태그 선택 특정 태그를 선택 div -->
태그를 선택
아이디 선택 id='속성값'인 태그를 선택 #query --> id의 속성값이 query인 태그 선택
클래스 선택 class='속성값'인 태그를 선택 .title --> class의 속성값이 title인 태그 선택 
태그+아이디 선택 특정 태그 중 id가 '속성값'인 태그를 선택 input#query --> input 태그 중, id의 속성값이 query인 태그 선택
태그+클래스 선택 특정 태그 중 class가 '속성값'인 태그를 선택 p.title --> p 태그 중, class의 속성값이 title인 태그 선택 

 

<간단 예시>

# a태그의 class 속성명이 news_tit인 태그 
soup.select_one('a.news_tit')

soup.select('a.news_tit')

for i in titles: 
    title = i.get_text() print(title)

 

오늘은 이 정도로 가볍게 정적 수집의 개념에 대해서 알아보고, 다음 시간에 실제로 어떻게 사용하는지 실습을 하며 배워보도록 하겠습니다.

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, 머신러닝 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

 

[웹 크롤링 기초]

2021.03.22 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이썬 웹 크롤링 기초 of 기초

2021.03.23 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 크롬드라이버 크롬 버전에 맞춰서 설치하는법

2021.03.24 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이썬 웹 크롤링 관련 패키지 3종 총정리

2021.03.27 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이썬 웹 크롤링을 위한 속성 HTML, CSS 요약 정리

2021.03.28 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 동적/정적 페이지 차이와 그에 따른 크롤링 방법 간단정리

 

[정적 웹크롤링]

2021.03.30 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이썬 웹 크롤링 정적 수집 방법 개념 정리_find, find_all, select, select_one

2021.04.02 - [파이썬 패키지/웹 크롤링] - [Python/Requests/Beautifulsoup] 네이버 뉴스 기사 제목 크롤링을 통한 정적 수집 기초 정리

2021.04.06 - [파이썬 패키지/웹 크롤링] - [Python/Reuqests/Beautifulsoup] 파이썬 정적 웹크롤링 텍스트, 이미지, 하이퍼링크, 속성 가져오는 법

 

[동적 웹크롤링]

2021.04.03 - [분류 전체보기] - [코딩유치원] 네이버 뉴스 기사 제목 크롤링을 통한 동적 수집 기초 정리(selenium, beautifulsoup)

2021.06.21 - [파이썬 패키지/웹 크롤링] - [Python/Selenium] 파이썬 동적 웹크롤링 텍스트, 하이퍼링크, 이미지, 속성 가져오는 법

2021.05.22 - [파이썬 패키지/GUI 프로그램] - [파이썬 GUI 프로그래밍] 잡플래닛 리뷰 정보 크롤링 GUI 프로그램

 


 

정적/동적 웹 페이지

웹 크롤링을 하면서 여러분들이 만나게 되는 페이지는 크게 두 가지로 분류할 수 있습니다. 

정지해있다는 의미의 정적(static)과 움직인다는 의미의 동적(dynamic)으로 말이죠.

이 두 가지의 차이점에 대한 이해가 선행되지 않으면 여러분들의 코드는 제대로 작동되지 않을 것입니다.

 

1) 정적 웹 페이지

정적 웹 페이지란 서버(Web Server)에 미리 저장된 파일이 그대로 전달되는 웹 페이지를 말합니다. 

즉, 제가 특정 웹페이지의 url 주소만 주소창에 입력하면 웹 브라우저로 HTML 정보를 마음대로 가져다 쓸 수 있는 것입니다.

동적 웹 페이지와 가장 큰 차이점은 **'url 주소 외에는 아무 것도 필요없다'** 는 점입니다. 아래에서도 설명 하겠지만 만약 마우스 휠을 스크롤 다운 했는데, url에 변화는 없고 페이지에 내용이 추가된다면 그 페이지는 동적 웹 페이지입니다.

말이 어려울 수 있으니 정적 웹 페이지의 예를 보여드리겠습니다.

 

case 1. 네이버 검색 결과

1) 네이버를 열어서 검색창에 '손흥민'을 검색합니다.
2) 검색 결과의 url을 복사하시고 다시 주소창에 해당 url을 입력합니다.
3) 처음 검색결과와 동일한 페이지를 볼 수 있습니다.

 

 

2) 동적 웹 페이지

 

동적 웹페이지란 url만으로는 들어갈 수 없는 웹페이지를 말합니다.

혹시 들어가지더라도 url의 변화가 없는데도 실시간으로 내용이 계속해서 추가되거나 수정된다면 동적 웹 페이지입니다.

여기서 무언가를 클릭해서 페이지가 변경되는 것은 다른 경우입니다.

 

case 1. 로그인을 해야만 접속 가능한 네이버 메일

 

 

 

case2. 보고 있는 위치에 출력 결과와 url이 계속 변하는 네이버 지도

 

 

 

case 3. 드래그를 아래로 내리면 계속 새로운 사진과 영상이 나타나는 인스타그램과 유튜브

 

 

저는 이 차이를 모르고 여러 웹 크롤링 책과 강의에서 나오는 예제 코드를 변경해서 사용하려다가 많은 시행착오를 겪었답니다.

 

네이버 지도(동적 페이지)에서 검색 결과를 수집하려고 하면서, 정적 수집 방법을 사용해서 몇 시간을 쩔쩔 맸던게 기억나네요.

 


정적/동적 수집

 

정적 페이지에서 정보를 수집 하느냐, 동적 페이지를 하느냐에 따라서 사용되는 파이썬 패키지는 달라집니다. 간단히 표로 정리해보면 아래와 같습니다.

  정적 수집 동적 수집
사용 패키지 requests / urllib selenium
수집 커버리지 정적 웹 페이지 정적/동적 웹 페이지
수집 속도 빠름 (별도 페이지 조작 필요 X) 상대적으로 느림
파싱 패키지 beautifulsoup beautifulsoup / selenium

 

정적 수집

정적 수집은 멈춰있는 페이지의 html을 requests 혹은 urllib 패키지를 이용해 가져와서 beautifulsoup 패키지로 파싱하여 원하는 정보를 수집합니다. 여기서 파싱(parsing)이란 복잡한 html 문서를 잘 분류, 정리하여 다루기 쉽게 바꾸는 작업을 말합니다.

 

바로 해당 url의 html을 받아와서 수집하기 때문에 수집 속도가 빠르다는 특징이 있지만, 여기저기 모두 사용할 수 있는 범용성은 떨어진다는 특징이 있습니다.

 

동적 수집

동적 수집은 계속 움직이는 페이지를 다루기 위해서 selenium 패키지로 chromdriver를 제어합니다. 특정 url로 접속해서 로그인을 하거나 버튼을 클릭하는 식으로 원하는 정보가 있는 페이지까지 도달합니다.

 

이때 driver.find_elements_by_  driver.find_element( ) 함수를 이용해 html을 곧바로 지목해서 추출할 수도 있고, driver.page_source 함수를 이용해 전체 html을 받아 올 수도 있습니다. html 전체를 받아와서 beautifulsoup로 하면, 페이지에서 하나하나 가져오는 것보다 수집 속도가 빠른 특징이 있습니다. 이 부분은 선택사항이지만 둘 다 알아두시면 좋겠습니다. 다른 코드를 이해하는 목적으로 말이죠.

 

동적 수집의 특징은 정적 수집과 반대라고 생각하시면 됩니다. 브라우저를 직접 조작하고 브라우저가 실행될때까지 기다려주기도 해야해서 그 속도가 느리다는 특징이있습니다. 하지만 이는 상대적인 것이지 사람이 직접하는 것보다는 훨~씬 빠르니 기본적으로 동적 수집을 하고 필요시 정적 수집 방식을 이용하는게 어떨까 하는 것이 개인적인 생각입니다. 정적/동적 웹 페이지에 모두 적용이 가능하니까요!


오늘 내용은 여기까지입니다.

 

다음 시간에는 네이버 뉴스에서 특정 주제의 기사를 검색하고 제목, 날짜, 언론사를 수집해보는 예제를 통해서 동적/정적 수집을 어떻게 하는지에 대해 알아보겠습니다.

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, 머신러닝 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

 

[웹 크롤링 기초]

2021.03.22 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이썬 웹 크롤링 기초 of 기초

2021.03.23 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 크롬드라이버 크롬 버전에 맞춰서 설치하는법

2021.03.24 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이썬 웹 크롤링 관련 패키지 3종 총정리

2021.03.27 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이썬 웹 크롤링을 위한 속성 HTML, CSS 요약 정리

2021.03.28 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 동적/정적 페이지 차이와 그에 따른 크롤링 방법 간단정리

 

[정적 웹크롤링]

2021.03.30 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이썬 웹 크롤링 정적 수집 방법 개념 정리_find, find_all, select, select_one

2021.04.02 - [파이썬 패키지/웹 크롤링] - [Python/Requests/Beautifulsoup] 네이버 뉴스 기사 제목 크롤링을 통한 정적 수집 기초 정리

2021.04.06 - [파이썬 패키지/웹 크롤링] - [Python/Reuqests/Beautifulsoup] 파이썬 정적 웹크롤링 텍스트, 이미지, 하이퍼링크, 속성 가져오는 법

 

[동적 웹크롤링]

2021.04.03 - [분류 전체보기] - [코딩유치원] 네이버 뉴스 기사 제목 크롤링을 통한 동적 수집 기초 정리(selenium, beautifulsoup)

2021.06.21 - [파이썬 패키지/웹 크롤링] - [Python/Selenium] 파이썬 동적 웹크롤링 텍스트, 하이퍼링크, 이미지, 속성 가져오는 법

2021.05.22 - [파이썬 패키지/GUI 프로그램] - [파이썬 GUI 프로그래밍] 잡플래닛 리뷰 정보 크롤링 GUI 프로그램

 


 

웹 크롤링을 하면서 html과 css에 대한 개념이 전혀 없으면 새로운 웹사이트를 만날 때마다 어려움에 직면하게 됩니다. 제가 그래서 많이 고생을 했답니다. 이번 시간에 html과 css에 대해서 필요한 부분만 최소한으로 공부해서 보도록 하겠습니다.

 

HTML 구조

웹 크롤링을 위해서는 웹을 이루고 있는 html에 대해서 알아야 합니다. 하지만 모든 것을 하나하나 공부하기엔 너무 비효율적입니다. 아래에 공부하실 수 있는 링크를 남겨두었으니, 더 깊게 공부하실 분들은 참고해주세요.

 

<TCP School HTML 강의>

tcpschool.com/html/html_intro_elementStructure

 

html은 기본적으로 아래와 같은 구조를 가집니다. 정말 쉽게 말하자면 html은 태그로 감싸진 내용들의 모음입니다. 

 

출처. TCP School

1. 태그 이름

태그는 그 종류가 다양하며, 각 태그마다 의미하는 바가 다릅니다. 우리가 웹크롤링을 하면서 자주 볼 수 있는 태그는 아래와 같습니다.

 

태그 설명 사용 예
h1~h6 제목을 입력할 때 사용
(h1이 가장 큰 제목, h6이 가장 작은 제목)
<h1> 제일 큰 제목 </h1>
p 하나의 문장을 입력할 때 사용 <p> 문장 </p>
div 박스형태의 구역 설정 (block 요소)
(다른 태그들이 div 안에 모여있게 됨)
<div>

<h3> 제목 </h3>
<p> 문장 </p>

</div>
span 줄 형태의 구역 설정 (inline 요소)
(독립적으로 사용하지 않고 p태그 안에 span 태그가 들어감)
<p> 이렇게 <span style="border: 3px solid red"> span요소로 텍스트의 일부분 </span> 만 스타일을 적용할 수 있음</p>
img 이미지와 관련된 태그
(속성명은 src, 속성값은 "이미지의 url 주소")

종료 태그(/img)가 없는 빈 태그(empty tag)
<img src="/img 주소.png" alt="이미지가 없을 때 이미지 대신 출력할 문장 입력">
a 하이퍼링크를 추가할 때 사용 <a href="링크 주소">HTML 링크</a>
ul unordered list : 기호로 된 리스트

li 태그가 하위 태그로 사용되어 내용을 채움
<ul>
    <li>기호</li>
    <li>기호</li>
    <li>기호</li>
</ul>
ol
ordered list : 순서가 있는 리스트

li 태그가 하위 태그로 사용되어 내용을 채움


<ol>
    <li>1번</li>
    <li>2번</li>
    <li>3번</li>
</ol>

 

2. 속성명

html은 수 많은 태그로 이루어져있어서, 각 태그에 속성을 부여하여 구분 가능하도록 만들어줍니다. 각 태그별로 속성이 다양하지만 꼭 기억해야할 속성명 2가지는 id와 class입니다.

 

1) ID

하나의 웹페이지에 하나만 쓸 수 있는 고유한 이름으로 <태그이름 id="속성값">와 같이 쓰임

 

2) CLASS

비슷한 형태를 가진 요소에 여러번 사용할 수 있는 이름으로 <태그이름 class="속성값">와 같이 쓰임

 

3. 속성값과 내용

프로그래머가 정해주기 나름

 


CSS 구조

css는 html로 만들어진 밋밋한 화면을 예쁘게 꾸며주는 역할을 합니다. css는 html 특정 태그를 지목해서 속성값(글자색, 크기, 배경색 등등)을 넣어 주는 것이라 생각하면 될 것 같네요.

 

이때  css가 특정 태그를 지목하는 방식, 이 규칙을 알게되면 우리가 원하는 데이터를 감싸고 있는 태그를 지목해서 그 안의 데이터를 가져올 수 있는 것입니다.

 

출처. TCP School

CSS 코드는 위와 같이 생겼습니다. 크게 선택자(selector)와 선언부(declaratives)로 구성됩니다. CSS에 대해서 자세히 알고 싶으신 분들은 아래의 링크를 참고해서 공부하세요.

 

<TCP School CSS 강의>

www.tcpschool.com/css/intro

 

여기서, 선택자라는 것이 우리가 주목해야할 개념입니다. 간단히 정리하면 아래와 같습니다.

 

분류 설명
태그 선택 특정 태그를 선택 div --> <div> 태그를 선택
아이디 선택 id='속성값'인 태그를 선택 #query --> id의 속성값이 query인 태그 선택
클래스 선택 class='속성값'인 태그를 선택 .title --> class의 속성값이 title인 태그 선택 
태그+아이디 선택 특정 태그 중 id가 '속성값'인 태그를 선택 input#query --> input 태그 중, id의 속성값이 query인 태그 선택
태그+클래스 선택 특정 태그 중 class가 '속성값'인 태그를 선택 p.title --> p 태그 중, class의 속성값이 title인 태그 선택 

 

쉬운 이해를 위해서 CSS 선택자를 어떻게 활용하는지 예시를 보여드리겠습니다.

 

1) 크롬 브라우저로 네이버에 접속

2) 개발자 도구(단축키:F12)를 열어서, 검색창의 HTML을 확인

3) HTML을 우클릭해서, Copy - Copy selector를 클릭

4) 코딩창의 원하는 위치에 붙여넣기(Ctrl+V) 

 

 

이렇게 하면 #query라는 css selector가 불러와지고, 이 선택자를 아래 코드들의 괄호 안에 넣으시면 원하시는 동작을 수행하거나 데이터를 가져올 수 있습니다.

 

# selenium으로 id가 query인 html 1개 선택(여러개 일 때 가장 위의 요소 선택)
driver.find_element_by_css_selector('#query')

# selenium으로 id가 query인 html 모두 선택
driver.find_elements_by_css_selector('#query')

 

개인적으로 CSS selector 개념이 직관적이고 이해하기 쉬워서 주로 이용할 예정이지만, 인터넷에 돌아다니는 웹 크롤링 관련 코드들은 html 태그를 직접 지목하는 함수로 짜여진 경우들이 많습니다. 

 

<find 관련 함수_그냥 코드 이해용으로만 알아둘 것>

 

selenium 패키지: driver.find_element(s)_by_의 뒤에  xpath(), id(), class_name(), tag_name()를 사용

beautifulsoup 패키지: find_all(), find() 함수

 


오늘 준비한 내용은 여기까지 입니다.

 

다음 시간에는 동적/정적 페이지의 개념과 그에 따라 selenium과 beautifulsoup/requests 패키지를 사용하는 방법에 대해서 알아보겠습니다. 

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, 머신러닝 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

 

[웹 크롤링 기초]

2021.03.22 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이썬 웹 크롤링 기초 of 기초

2021.03.23 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 크롬드라이버 크롬 버전에 맞춰서 설치하는법

2021.03.24 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이썬 웹 크롤링 관련 패키지 3종 총정리

2021.03.27 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이썬 웹 크롤링을 위한 속성 HTML, CSS 요약 정리

2021.03.28 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 동적/정적 페이지 차이와 그에 따른 크롤링 방법 간단정리

 

[정적 웹크롤링]

2021.03.30 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이썬 웹 크롤링 정적 수집 방법 개념 정리_find, find_all, select, select_one

2021.04.02 - [파이썬 패키지/웹 크롤링] - [Python/Requests/Beautifulsoup] 네이버 뉴스 기사 제목 크롤링을 통한 정적 수집 기초 정리

2021.04.06 - [파이썬 패키지/웹 크롤링] - [Python/Reuqests/Beautifulsoup] 파이썬 정적 웹크롤링 텍스트, 이미지, 하이퍼링크, 속성 가져오는 법

 

[동적 웹크롤링]

2021.04.03 - [분류 전체보기] - [코딩유치원] 네이버 뉴스 기사 제목 크롤링을 통한 동적 수집 기초 정리(selenium, beautifulsoup)

2021.06.21 - [파이썬 패키지/웹 크롤링] - [Python/Selenium] 파이썬 동적 웹크롤링 텍스트, 하이퍼링크, 이미지, 속성 가져오는 법

2021.05.22 - [파이썬 패키지/GUI 프로그램] - [파이썬 GUI 프로그래밍] 잡플래닛 리뷰 정보 크롤링 GUI 프로그램

 


오늘은 웹크롤링 관련 파이썬 패키지 3가지를 알아보겠습니다.

 

 

우리가 앞으로 하게 될 웹 크롤링은 두 가지 단계를 거칩니다.

 

1) 원하는 웹 페이지의 html문서를 싹 긁어온다.

 

2) html 문서에서 원하는 것을 골라서 사용한다.

 

 

위의 두 가지 작업과 관련하여 자주 사용되는 패키지를 하나씩 살펴보겠습니다.

 

1. requests 

html 문서를 가져올 때 사용하는 패키지입니다. requests는 사용자 친화적인 문법을 사용하여 다루기 쉬우면서 안정성이 뛰어나다고 합니다.  그래서 파이썬 기본 라이브러리에 포함된 urllib 패키지보다 자주 사용됩니다.

 

설치 방법

터미널에서 아래와 같이 입력하면 됩니다. (만약 anaconda 환경이 아니라 python을 사용한다면 conda 대신 pip를 입력할 것)

conda install requests

 

사용 방법

import requests                # requests 패키지 가져오기

url = 'https://www.naver.com'  # 가져올 url 문자열로 입력

response = requests.get(url)   # requests의 get함수를 이용해 해당 url로 부터 html이 담긴 자료를 받아옴

print(response.status_code)    # 정상적으로 받아졌다면 200이라는 상태코드를 반환

html_text = response.text      # 우리가 얻고자 하는 html 문서가 여기에 담기게 됨

 

 

2. Selenium

 

selenium 패키지는 지난 시간 설치했던 chromedriver를 이용해 chrome을 제어하기 위해 사용합니다. 크롤링을 하다보면 무엇인가 입력하거나 특정 버튼을 눌러야 하는 상황이 발생합니다. 이 때 selenium을 이용하는 것입니다.

 

만약 크롬드라이버가 설치되어 있지 않다면 아래의 글을 참고해서 설치해주세요.

2021.03.23 - [파이썬 기초/개발환경 구축] - [코딩유치원] 크롬드라이버 크롬 버전에 맞춰서 설치하는법

 

설치 방법

터미널에서 아래와 같이 입력하면 됩니다. (만약 anaconda 환경이 아니라 python을 사용한다면 conda 대신 pip를 입력할 것)

conda install selenium

 

사용 방법

이 패키지는 조금 공부할 것이 많아서 여기서는 대략적으로 어떤 식으로 사용하는지 파악하시면 좋을 것 같아요.

driver.find_element 함수나 send_keys 함수는 여기서 다 다루기가 힘들어서 다음 시간에 따로 정리하겠습니다.

 

# selenium의 webdriver를 사용하기 위한 import
from selenium import webdriver

# selenium으로 무엇인가 입력하기 위한 import
from selenium.webdriver.common.keys import Keys

# 페이지 로딩을 기다리는데에 사용할 time 모듈 import
import time

# 크롬드라이버 실행  (경로 예: '/Users/Roy/Downloads/chromedriver')
driver = webdriver.Chrome('chromedriver의 경로를 입력할 것') 

#크롬 드라이버에 url 주소 넣고 실행
driver.get('https://www.google.co.kr/')

# 페이지가 완전히 로딩되도록 3초동안 기다림
time.sleep(3)

#검색어 창을 찾아 search 변수에 저장
search = driver.find_element_by_xpath('//*[@id="google_search"]')

#search 변수에 저장된 곳에 값을 전송
search.send_keys('코딩유치원 파이썬')
time.sleep(1)

#search 변수에 저장된 곳에 엔터를 입력
search.send_keys(Keys.ENTER)

 

 

3. BeautifulSoup4

 

마지막으로 BeautifulSoup4라는 패키지는 매우 길고 정신없는 html 문서를 잘 정리되고 다루기 쉬운 형태로 만들어 원하는 것만 쏙쏙 가져올 때 사용합니다. 이 작업을 파싱(Parsing)이라고도 부릅니다.

 

설치 방법

터미널에서 아래와 같이 입력하면 됩니다. (만약 anaconda 환경이 아니라 python을 사용한다면 conda 대신 pip를 입력할 것)

conda install beautifulsoup4

 

사용 방법

이 패키지 역시 내용이 많아서 여기서는 대략적으로 어떤 식으로 사용하는지 파악하시면 좋을 것 같아요.

파싱을 하는 방법에는 크게 Xpath를 이용하는 법과 CSS selector를 이용하는 방식이 있는데, 이것 역시 다음에 정리하는 시간을 갖겠습니다.

import requests

# 주로 bs로 이름을 간단히 만들어서 사용함
from bs4 import BeautifulSoup as bs

response = requests.get('https://www.google.co.kr')

# html을 잘 정리된 형태로 변환
html = bs(response.text, 'html.parser')

# find 함수로 특정 이미지를 선택하는 코드
google_logo = html.find('img', {'id':'hplogo'})

 

오늘은 가볍게 파이썬을 이용하여 웹 크롤링을 할 때 사용되는 주요 패키지에 대해서 정리해보았습니다.

 

다음 시간에는 크롤링을 자유자재로 하기 위해 꼭 필요한 내용들을 더 깊게 들어가보도록 하겠습니다.

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, 머신러닝 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

 

[웹 크롤링 기초]

2021.03.22 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이썬 웹 크롤링 기초 of 기초

2021.03.23 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 크롬드라이버 크롬 버전에 맞춰서 설치하는법

2021.03.24 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이썬 웹 크롤링 관련 패키지 3종 총정리

2021.03.27 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이썬 웹 크롤링을 위한 속성 HTML, CSS 요약 정리

2021.03.28 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 동적/정적 페이지 차이와 그에 따른 크롤링 방법 간단정리

 

[정적 웹크롤링]

2021.03.30 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이썬 웹 크롤링 정적 수집 방법 개념 정리_find, find_all, select, select_one

2021.04.02 - [파이썬 패키지/웹 크롤링] - [Python/Requests/Beautifulsoup] 네이버 뉴스 기사 제목 크롤링을 통한 정적 수집 기초 정리

2021.04.06 - [파이썬 패키지/웹 크롤링] - [Python/Reuqests/Beautifulsoup] 파이썬 정적 웹크롤링 텍스트, 이미지, 하이퍼링크, 속성 가져오는 법

 

[동적 웹크롤링]

2021.04.03 - [분류 전체보기] - [코딩유치원] 네이버 뉴스 기사 제목 크롤링을 통한 동적 수집 기초 정리(selenium, beautifulsoup)

2021.06.21 - [파이썬 패키지/웹 크롤링] - [Python/Selenium] 파이썬 동적 웹크롤링 텍스트, 하이퍼링크, 이미지, 속성 가져오는 법

2021.05.22 - [파이썬 패키지/GUI 프로그램] - [파이썬 GUI 프로그래밍] 잡플래닛 리뷰 정보 크롤링 GUI 프로그램

 

 


 

selenium 버전 4.6 이상을 사용하시는 분들께서는 크롬드라이버를 설치하지 않으셔도 웹크롤링이 가능합니다.
2023.12.6 기준 selenium 버전 4.16인 점 참고 해주세요!


 

오늘은 웹 크롤링을 위한 준비 단계로 크롬드라이버를 설치해보겠습니다.

 

참고로 크롬드라이버는 크롬을 사람이 아닌 컴퓨터가 제어할 수 있게 해주는 역할을 합니다.

 

크롬드라이버 설치 방법

 

먼저 아래의 링크를 클릭하셔서 ChromeDriver 다운로드 페이지로 들어갑니다.

(저처럼 링크가 의심스러우신 분들은 크롬 드라이버를 구글에서 검색하셔서 가장 처음 뜨는 다운로드 버튼을 클릭하세요!)


chromedriver.chromium.org/downloads

 

Downloads - ChromeDriver - WebDriver for Chrome

WebDriver for Chrome

chromedriver.chromium.org

 

그러면 아래와 같이 화면이 나올텐데요. 현재 크롬드라이버 최신 버전은 무엇이고 버전마다 무엇이 달라졌는지에 대해서 설명하는 내용입니다.

 

여기서 반드시 크롬 버전을 확인한 후, 동일한 버전을 다운받아야 합니다! 아니면 크롬드라이버가 정상 작동하지 않습니다.

(크롬 버전 확인 방법은 아래에서 따로 설명 드렸으니 확인해보시고 알맞는 버전을 다운로드 해주세요)

 

 

아래와 같은 페이지가 나오면 빨간색 사각형으로 표시한 부분을 잘 보시고 여러분의 OS에 맞는 chromedriver를 클릭해서 다운받아주세요.

애플의 Mac OS는 2개가 있길래 m1이 무엇일까 찾아봤더니 애플에서 자체 개발한 M1 칩을 위한 Mac OS라고 하네요. 보통의 맥이나 맥북을 사셨다면 그냥 mac64를 다운받으시면 됩니다.

 

다운로드가 완료되었다면 zip 파일을 압축해제 해주시면 chromedriver가 뿅하고 나옵니다.

mac OS에서의 모습 (왼쪽)

 

크롬 버전 확인 방법

 

크롬 드라이버와 버전을 맞춰주기 위해 크롬 버전을 확인 해봅시다. 크롬 창을 열면 우측상단에 ... 표시가 보이실겁니다. (저는 글 쓰는 현재 크롬의 버전이 최신이 아니라서 업데이트라는 붉은색 글씨가 함께 나오네요. 클릭해주시면 아래와 같이 창이 나오는데 도움말 - Chrome 정보를 클릭해 주세요.

 

 

 

클릭하시면 새로운 창이 뜨면서 아래와 같이 나옵니다. 저는 최신버전이 아니라서 아래와 같이 자동 업데이트된 후, 다시 시작하라고 나왔고 만약 이미 최신버전이신 분들은 아래의 두번째 사진처럼 최신버전이라고 알려줍니다. 이 버전을 확인해셔서 동일한 버전의 크롬드라이버를 다운 받으시면 되겠습니다.

 

최신 버전이 아니었을 때

 

최신 버전이었을 때

 

마지막으로 알아두시면 좋은 것은 한동안 웹크롤링을 하지 않다가 실행하시면 되던 코드가 실행되지 않을 때가 있습니다.

그 때는 크롬 버전에 비해 크롬 드라이버가 예전 것일 확률이 높으니, 크롬 드라이버를 최신 것으로 다시 다운받아서 교체해주시면 됩니다.

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 


파이썬 기초 문법 강의를 마치고 블로그의 방향성에 대해 많이 고민했습니다.

 

여기서 클래스나 정규표현식, 예외 처리 등의 중급 문법을 바로 들어갈까도 생각해봤지만 아무리 생각해봐도 너무 지루합니다.

(중급 문법은 추후 필요하다고 판단될 때 정리하는 시간을 가질 예정입니다)

 

그래서 먼저 지금까지 배운 파이썬을 가장 유용하게 써먹을 곳이 무엇일까 생각해보다가 가장 처음으로 웹 크롤링을 선택했습니다.

가장 유용하다고 판단한 이유는 우리가 많은 정보를 인터넷에서 검색하고, 그 결과를 수집하고 정리해야하는 일이 자주 있기 때문입니다.

 

먼저 웹 크롤링을 배우기로 했으니 먼저 웹이란 것이 무엇인지 개념을 확실히 할 필요가 있을 것 같아요.

 

웹 (Web)

 

Web은 World Wide Web의 줄임말입니다. 우리가 인터넷 웹사이트의 주소를 칠 때 www.google.com이런 식으로 입력하죠?

바로 이 www가 World Wide Web에서 유래된 것입니다.

 

흔히 인터넷과 웹을 자주 혼동해서 사용하는데요. 인터넷컴퓨터 네트워크 통신망을 의미하며 인터넷 상에서 동작하는 하나의 서비스입니다. 인터넷을 활용한 서비스는 전자우편(e-mail), 파일전송(FTP), 원격접속(telnet), 유즈넷(usenet) 등이 있다고 하는데 e-mail 말고는 잘 모르겠네요. 그만큼 인터넷을 활용한 서비스에서 웹의 영향력이 압도적이라 할 수 있습니다.

 

또 하나 알아두셔야할 중요한 사실은 웹은 HTML(Hypertext Markup Language)이라는 언어로 작성된 문서라는 것입니다.

대충 아래처럼 생겼답니다.

<!DOCTYPE html>
<html lang="ko">

<head>
    <meta charset="UTF-8">
    <title>HTML Intro</title>
</head>

<body>

    <h1>여기는 코딩유치원입니다</h1>

</body>


</html>

 

웹 브라우저 (Web Browser)

 

이런 HTML로 작성된 웹을 보기 편하게 해주는 소프트웨어를 웹 브라우저(Web browser)라고 하는데요. 여러분들이 흔히 아시는 인터넷 익스플로러, 크롬, 사파리 등이 있습니다.

 

출처. pixabay

 

웹 크롤링과 웹 스크래핑

 

우리는 앞으로 파이썬을 이용해 웹 페이지에서 HTML 문서를 분석해서 원하는 정보를 얻어오는 웹 크롤링을 해볼 예정입니다.

참고로 웹 크롤링이란 용어가 많이 사용되는데 사실 웹 크롤링은 싹 다 긁어 오는 것이고, 웹 스크래핑은 원하는 부분만 선택적으로 추려내는 것이니 우리가 할 것은 웹 스크래핑이라고 할 수 있겠네요.

 

앞으로는 우리는 프로잭트를 수행하면서 크롬(Chrome)을 사용 할 예정인데요. 크롬을 켜고 우클릭-검사 혹은 F12를 누르면 아래 사진과 같이 우측에 HTML 문서가 쭉 나옵니다. 다음시간부터는 HTML 문서에서 원하는 부분을 추출하기 위해 간단히 HTML을 다루어 보겠습니다.

 

 

그리고 나서는 파이썬의 라이브러리 selenium을 이용해서 로봇이 크롬 브라우저를 조정할 수 있는 방법과 BeautifulSoup4를 이용해서 HTML문서의 원하는 부분을 효과적으로 추출하는 방법을 배워보겠습니다.

 

그럼 다음 시간에 만나요~

반응형

+ Recent posts