반응형

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

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

 

2022.03.11 - [파이썬 패키지/라이브러리&패키지 소개] - 파이썬 주요 라이브러리 정리

 

 

 

오늘은 23년 7월경 부터 발생하기 시작한 Chromedriver 에러의 원인과 해결법에 대해서 알아보겠습니다.

 

[요약]

1) 크롬 드라이버는 114 버전 이후 배포 방식을 다르게 변경하여서 webdriver_manager로는 자동 다운로드가 되지 않음.

2) 사실은 selenium 4.6 버전 (2022년 4월) 이후로 webdriver_manager 없이 크롬 드라이버 자동 다운로드가 가능함.

3) 현재 2023년 9월 16일 기준, selenium 버전은 4.12이며, pip install --upgrade selenium으로 업그레이드 한 후, 아래의 코드로 실행하면 크롬 드라이버 115버전 이상도 자동 다운로드가 됨.

from selenium import webdriver

# chromedriver 자동 다운로드 됨
driver = webdriver.Chrome()

driver.get('https://www.naver.com')

 

 


1. History

 

1) 직접 다운로드 방식

 

 Chromedriver를 처음 배울 때에는 크롬이 업데이트 될 때마다 크롬 드라이버를 다운로드하는 곳에서 매번 크롬과 동일한 버전의 Chromedriver를 다운로드 받아서 사용했습니다. 다운로드 경로를 설정해줘야 하고, 크롬 버전이 자동 업데이트 되면 코드가 에러가 나는 불편함이 있었죠.

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

 

[사용 방식]

from selenium import webdriver

# chromedriver가 저장된 경로 직접 입력
driver = webdriver.Chrome(r'C:\users\chromedriver.exe')

driver.get('https://www.naver.com')

 

 

2) 자동 다운로드 방식 (With webdriver_manager)

 

 매번 크롬 버전에 맞춰서 다운로드 받아야하는 불편함을 해결하기 위해서, webdriver_manager라는 모듈을 설치해서 코드를 실행할 때마다 사용자의 크롬 버전에 맞는 크롬 드라이버를 자동 설치하는 방식으로 변경하였습니다. 저도 이 방식으로 최근까지 사용해왔습니다.

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

chrome_service = Service(executable_path=ChromeDriverManager().install())
driver = webdriver.Chrome(service=chrome_service)

driver.get('https://www.naver.com')

 

2. Chromdriver 버전 에러 발생 원인

 

webdriver_manager는 Chromedriver를 다운로드 받는 사이트(https://chromedriver.chromium.org/downloads)에서 자동으로 크롬 버전에 맞는 크롬 드라이버를 다운로드 받습니다.

 

그러나 114버전 (23년 5월 31일 릴리즈)를 마지막으로 해당 사이트에서는 크롬 드라이버를 배포 하지 않고, 7월 중순경 부터 https://googlechromelabs.github.io/chrome-for-testing/  사이트를 통해 크롬 드라이버를 배포하고 있습니다.

이러한 이유로 webdriver_manger를 통한 자동 다운로드 방식은 더 이상 사용하지 못하게 되었습니다. 이로 인해 전세계적으로 수 많은 selenium 유저들이 혼란을 겪기 시작했죠. 

 

3. Chromdriver 버전 에러 해결 방법

 정말 많은 해결 방법들이 여러 블로그를 통해서 나오고 있지만 명료하지가 않습니다. 결론만 말씀드리면 현재 글을 작성하는 2023년 9월 16일 기준으로 selenium 최신 버전은 4.12.0이며, 4.6.0 미만의 버전을 사용하시는 경우는 버전을 업그레이드 하시고 아래의 코드를 사용하시면 됩니다.

 

[버전 확인 방법]

pip show selenium

[실행 결과]

Name: selenium
Version: 4.5.0
Summary:
Home-page: https://www.selenium.dev
Author:
Author-email:
License: Apache 2.0
Location: C:\Users\SANGWOO\AppData\Local\Programs\Python\Python311\Lib\site-packages
Requires: certifi, trio, trio-websocket, urllib3
Required-by:

 

[버전 업그레이드 방법]

pip install --upgrade selenium

[실행 결과]

Installing collected packages: selenium
  Attempting uninstall: selenium
    Found existing installation: selenium 4.5.0
    Uninstalling selenium-4.5.0:
      Successfully uninstalled selenium-4.5.0
Successfully installed selenium-4.12.0

 

selenium 버전을 업그레이드 하셨다면 사용하시는 IDE를 종료했다가 재시작 해주시고, 아래의 코드로 chromedriver를 실행해보세요. webdriver 모듈만으로도 크롬 드라이버 자동 다운로드가 되고 실행되는 것을 확인하실 수 있을거예요.

from selenium import webdriver

# chromedriver가 저장된 경로 직접 입력
driver = webdriver.Chrome()

driver.get('https://www.naver.com')

 


이상으로 최근 selenium 사용자들이 가장 많이 겪는, 모르면 너무 답답한 문제의 원인과 해결방법에 대해서 알아보았습니다. 많은 분들께 도움이 되기를 바랍니다.

 

 

 

 

반응형
반응형

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

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

 

2022.03.11 - [파이썬 패키지/라이브러리&패키지 소개] - 파이썬 주요 라이브러리 정리


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

 

 

오늘은 인스타그램으로 특정 태그의 게시물을 캡처하거나 좋아요를 누르는 등의 자동화를 위한 가장 첫 단계로 인스타그램을  selenium으로 자동 로그인하는 방법에 대해서 알아보겠습니다.

 

해당 강의를 따라하기 위해서는 인스타그램 아이디와 비밀번호가 필요하답니다.

(facebook 계정으로도 로그인 하는 방법이 있지만 그 방법은 다루지 않았습니다.)

 

그리고 크롬 드라이버가 설치되어 있어야 합니다. 혹시 안되어 있으신분들은 아래의 강의를 참고해주세요.

 

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

 

[Python/웹 크롤링] 크롬드라이버 크롬 버전에 맞춰서 설치하는법

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다. 코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, 머신러닝 등의 다양한 패키지까지 초보자도

coding-kindergarten.tistory.com

 


1. 패키지 import

 

가장 먼저 할 일은 당연히 웹 자동화를 위한 필수 패키지를 불러오는 일입니다.

# step1. 필요한 패키지와 모듈 불러오기
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

 

2. 크롬 드라이버 실행 및 인스타그램 로그인 화면 출력

 

그 다음은 크롬 드라이버를 실행하고, 인스타그램 로그인 url로 이동해보겠습니다. 아래의 코드의 경로 대신에 여러분들의 크롬 드라이버(chromedriver.exe)가 있는 경로를 입력해주어야 한다는 것 주의해주세요.

 

driver = webdriver.Chrome(r"C:\Users\SANGWOO\Desktop\chromedriver.exe")

driver.get("https://www.instagram.com/accounts/login/")

time.sleep(1)

 

3. 아이디 & 비밀번호 입력 후 엔터

 

다음으로 해줄 일은 아이디와 비밀번호를 입력하고 엔터를 눌러주는 것입니다.

 

 

# 인스타 아이디
id = "여러분의 아이디를 입력해주세요"
# 비밀번호
pw = "여러분의 비밀번호를 입력해주세요"

# id와 pw를 입력하는 창의 요소 정보 획득
input = driver.find_elements_by_tag_name("input")

# 아이디를 입력
input[0].send_keys(id)

# 비밀번호 입력
input[1].send_keys(pw)

# 엔터
input[1].send_keys(Keys.RETURN)
time.sleep(5)

 

4. 옵션 설정 단계 통과하기

 

위에서 로그인을 하고나면 아래와 같은 화면이 출력됩니다. 그것도 2개나 말이죠.

둘 모두 '나중에 하기' 버튼을 찾아서 클릭해서 장애물을 극복해줍시다!

 

첫번째 장애물. 로그인 정보 저장 여부

 

두번째 장애물. 알림 설정 여부

 

# 로그인 정보 저장 여부 ("나중에 하기 버튼 클릭")
btn_later1 = driver.find_element_by_class_name('_acan._acao._acas')
btn_later1.click()
time.sleep(5)

# 알림 설정 ("나중에 하기 버튼 클릭")
btn_later2 = driver.find_element_by_class_name('_a9--._a9_1')
btn_later2.click()

 

참고로 저는 보통 xpath로 element를 찾는 방식을 선호하는데, 하루만에 xpath가 변경되거나 알림 설정의 '나중에 하기' 버튼을 클릭할 때는 잘 작동하지 않아서 class_name을 이용했습니다.

 

여기까지 하면 로그인이 완료되고 여러분들의 인스타그램 홈화면이 나올거예요.

 

5. 전체코드 (좀 더 세련된 코드)

 

전체 코드를 함수 개념을 이용해서 좀 더 깔끔하게 정리했습니다. 위에서 코드가 실행되는 흐름을 이해하셨다면 아래의 코드를 사용하시면 됩니다.

# step1.필요한 패키지와 모듈 불러오기
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

# step2.아이디, 비밀번호 설정
id = "여러분의 아이디를 입력해주세요"
pw = "여러분의 비밀번호를 입력해주세요"

# step3.크롬 웹드라이버 실행
driver = webdriver.Chrome(r"C:\Users\SANGWOO\Desktop\chromedriver.exe")

# step4.인스타그램 로그인 함수 정의
def login(id, pw):
    # 로그인 페이지로 이동
    driver.get("https://www.instagram.com/accounts/login/")
    time.sleep(1)
    
    # id와 pw를 입력하는 창의 요소 정보 획득
    input = driver.find_elements_by_tag_name("input")

    # 아이디를 입력
    input[0].send_keys(id)

    # 비밀번호 입력
    input[1].send_keys(pw)

    # 엔터
    input[1].send_keys(Keys.RETURN)
    time.sleep(5)

    # 로그인 정보 저장 여부 팝업창 제거 ("나중에 하기 버튼 클릭")
    btn_later1 = driver.find_element_by_class_name('_acan._acao._acas')
    btn_later1.click()
    time.sleep(5)

    # 알림 설정 팝업창 제거 ("나중에 하기 버튼 클릭")
    btn_later2 = driver.find_element_by_class_name('_a9--._a9_1')
    btn_later2.click()

# step5.로그인 함수 실행
login(id,pw)

 


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

 

감사합니다. 

반응형
반응형

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

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

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

 

 

오늘은 예전에 다루었던 글에 달린 댓글에 대한 답변을 위해 간단히 글을 작성해보려 합니다.

 

 

저는 아래의 글에서 네이버 뉴스 검색 첫페이지의 기사 10개를 주기적으로 확인하고, 새롭게 추가된 기사만을 텔레그램으로 보내주는 프로젝트를 해보았습니다.

 

2021.04.05 - [파이썬 패키지/텔레그램(Telegram)] - [Python/Telegram] 원하는 주제의 네이버 뉴스 텔레그램으로 5분마다 전송 받기

 

해당 프로젝트의 크롤링 방식은 Request와 beautifulsoup을 이용한 정적 크롤링이었죠. 저는 주로 페이지가 변경되는 경우는 selenium 패키지를 이용해서 페이지 번호를 직접 클릭하면서 페이지를 변경했었답니다.

 

댓글을 달아주신 분께서는 정적 크롤링 방식으로 페이지를 변경하면서 원하는 정보를 얻길 원하셨던 것이죠.

 

이번 시간에는 네이버 스마트스토어 한 곳의 상품 정보를 여러 페이지 크롤링하고 그 정보들을 엑셀로 저장해보겠습니다.

 

1. 컨셉

 

코딩을 들어가기 전에 대략적인 컨셉을 잡아봐야겠죠?

 

1) 원하는 스마트스토어 페이지의 url을 이용해 html을 받아온다

2) 제품명과 가격정보를 크롤링한다

3) 다음 페이지에서 같은 일을 반복한다

4) 원하는만큼 반복하며, 리스트에 계속 정보를 누적한다

5) 누적된 리스트를 엑셀에 저장한다.

 

2. 페이지 변경에 따른 url 변경 규칙 파악

 

이제 컨셉을 잡았으니 코딩에 필요한 재료를 구하러 가보겠습니다.

 

저는 컴퓨존에서 운영하는 스마트스토어 페이지에서 전체상품 탭을 클릭한 후, 누적판매순으로 출력되는 것을 최신등록순으로 바꾼 후의 페이지를 목표 url로 하였습니다.

 

여기서 페이지 번호를 1, 2, 3 바꿔가며 클릭하면 아래에 표시한 url에서 page=숫자 부분만 변경되는 것을 확인하실 수 있을거예요. 나중에 코딩에 들어가면 이 부분을 '문자열 포매팅''for 반복문' 개념을 이용해주면 될 것 같네요.

 

3. 제품명 & 가격정보 html 정보 파악

 

크롬에서 F12를 눌러서 목표로 하는 제품명과 가격정보의 html 정보, 정확히는 CSS Selector 정보를 파악합니다.

이 부분을 잘 모르시는 분들은 아래의 글을 참고해주세요.

 

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

 

제품명의 선택자
제품가격의 선택자

 

4. 전체 코드

# step1.라이브러리 불러오기
import requests
from bs4 import BeautifulSoup as bs
import telegram
import time
import pandas as pd

# step2.제품명과 제품가격정보를 담을 빈 리스트 선언
product_name = []
product_price = []

# step3.for문을 이용해서 원하는 페이지에 접근, 정보 추출 후 리스트에 담기
for page_num in range(3):
    # range를 이용하면 0부터 인덱스가 시작되므로 page_num에 1을 더해준 url을 이용
    url = f'https://smartstore.naver.com/compuzone/category/ALL?st=RECENT&free=false&dt=IMAGE&page={page_num+1}&size=40'
    
    # html 정보 받아와서 파싱
    response = requests.get(url)
    soup = bs(response.text , 'html.parser')

    # css selector로 페이지 내의 원하는 정보 가져오기
    html_product = soup.select('strong.QNNliuiAk3')
    html_price = soup.select('span.nIAdxeTzhx')

    # 텍스트만 추출
    for i in html_product:
        product_name.append(i.get_text())
        
    for i in html_price:
        product_price.append(i.get_text())

# step4.zip 모듈을 이용해서 list를 묶어주기        
list_sum = list(zip(product_name, product_price))


# step5.데이터프레임의 첫행에 들어갈 컬럼명
col = ['제품명','가격']

# step6.pandas 데이터 프레임 형태로 가공
df = pd.DataFrame(list_sum, columns=col)

# step7.엑셀에 저장
df.to_excel('컴퓨존 제품 목록.xlsx')

 

5. 실행 결과

 

한 페이지에 40개의 품목이 있으니, 정확히 3개의 페이지에서 모든 제품명과 가격 정보를 크롤링해서 엑셀로 저장한 것을 확인할 수 있습니다.

 

 


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

 

감사합니다.

반응형
반응형

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

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

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

 

 

오늘은 제가 국세청홈택스 페이지 관련 웹크롤링 프로젝트를 진행하다가 겪은 문제를 정리해보려합니다.

 

참고로 저의 경우엔 웹크롤링을 할 때엔 한줄씩 실행결과를 확인하기 위해서 Jupyter Notebook을 사용합니다.

(VScode 위에서 주피터 노트북(.ipynb)을 실행하여도 무방)

 


 

제가 진행했던 순서대로 코드와 함께 정리해보겠습니다.

 

# step1. 관련 패키지 및 모듈 불러오기
from selenium import webdriver
import time

# step2.크롬 드라이버 실행 및 driver라는 변수명으로 객체화 (괄호 안에는 각자의 크롬드라이버 경로를 입력하면 됨)
driver = webdriver.Chrome('./chromedriver')

# step3.(크롬)드라이버가 요소를 찾는데에 최대 5초까지 기다림
driver.implicitly_wait(5)

# step4.국세청홈택스 url 주소를 가져와서 접속
driver.get('https://www.hometax.go.kr/websquare/websquare.html?w2xPath=/ui/pp/index.xml')
time.sleep(1)

 

여기까지는 기본적인 코드이므로 그냥 설명 없이 진행하겠습니다. 코드 실행 시, 아래의 화면까지 실행됩니다.

 

 

다음 단계는 화면 상단 중앙에 위치하는 로그인 버튼을 누르는 단계입니다.

 

이 단계도 별문제 없이 실행됩니다. 저는 주로 find_element_by_xpat( ) 함수를 즐겨 사용합니다.

무지성으로 copy해와서 붙여넣으면 편하거든요ㅎㅎ.

 

# 로그인 단계로 가기위해서 화면상단의 로그인 탭 클릭
driver.find_element_by_xpath('//*[@id="textbox81212912"]').click()
time.sleep(1)

 

로그인 탭 click이 정상적으로 실행되었으면 아래와 같은 화면이 출력됩니다.

 

제가 할 프로젝트는 공동인증서로 로그인해야하므로 아래의 파란색버튼('공동.금융인증서)을 눌러주어야 합니다.

 

 

F12를 눌러서 이 버튼을 클릭하려면 어떤 태그를 참조해야하는지 봅시다.

 

오른쪽 개발자도구에서 빨간색 사각형으로 표시한 a태그의 id가 'anchor22'인 html을 참조해야합니다.

 

저는 해당 태그를 '우클릭'해서 xpath를 copy한 후, find_element_by_xpath( )에 붙여넣어줬습니다.

 

 

driver.find_element_by_xpath('//*[@id="anchor22"]').click()

 

자, 이 코드를 실행하면 드디어 오늘 글의 이유인 불량이 출력됩니다.

 

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="anchor22"]"} (Session info: chrome=96.0.4664.55)

 

분명 눈앞에 있는 버튼인데 못 찾겠답니다. 저같은 초보에게는 이런 경우가 웹크롤링 할 때 제일 막막한 경우죠.

 

예전부터 저를 가끔씩 괴롭히던 원인은 바로 iframe이라는 개념입니다.

 

iframe 요소란?

 

iframe이란 inline frame의 약자로 쉽게 말해 페이지 안의 페이지입니다.

 

위에서 오류가 났던 이유는 iframe 페이지 안의 요소는 selenium이 참조하지 못 하기 때문이죠!

 

아래의 그림을 보시면 큰 빨간색 사각형으로 표시한 부분이 iframe 영역입니다.

 

해당 영역을 확인해보시려면 방금 전 찾았던 공동.금융인증서의 html을 개발자도구로 찍으시고, 위로 쭉 따라 올라가보시면 오른쪽 빨간색 사각형으로 표시해놓은 iframe 태그가 존재합니다. 여기에 마우스를 올리시면 영역이 파랗게 표시된답니다.

 

 

iframe 전환하는 법

 

우리가  원하는 공동.금융인증서 버튼을 클릭하려면 해당 iframe으로 들어가야합니다.

 

방법은 매우 간단합니다. 아래의 코드와 같이 들어가고 싶은 iframe의 id를 괄호 안에 넣어주면 됩니다.

driver.switch_to.frame('txppIframe')
time.sleep(1)

 

코드를 실행하셔도 눈에 보기에는 아무 변화가 없습니다. 그래서 전환 되었는지 확인하려면 아까 실패했던 코드를 다시 실행해서 버튼을 눌러보아야 합니다.

 

driver.find_element_by_xpath('//*[@id="anchor22"]').click()

 

아래와 같이 인증서 선택창이 정상적으로 출력되었습니다. 이 다음 단계는 다음 포스팅에서 다루어 보도록 하겠습니다.

 

 

다시 상위 frame으로 전환하는 법

 

만약 다시 상위 프레임으로 전환하고 싶다면 아래의 코드를 실행해보세요.

 

driver.switch_to.parent_frame()

 

default_content도 가능하다고 하는데 저는 일단 parent_frame( )으로 충분할 듯 합니다.

 

 

반응형
반응형

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

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

업무는 물론 투자에도 도움이 될만한 전자공시시스템(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으로 원하는 화면 상태에 도달할 수 있도록 웹 브라우저를 조작 하는 법을 공부해보겠습니다.

 

예를 들어서, 네이버 메일을 확인하기 위해서 로그인 과정을 거쳐야 한다거나, 유튜브 댓글을 모두 크롤링하는데 스크롤을 내려야지 댓글이 추가적으로 업데이트 되는 상황이 있겠죠.

 

이런 상황에서 원하는 버튼을 클릭 하거나 문자를 입력하는 등의 컴퓨터가 해주어야 하는데 이를 Selenium 패키지가 대신 해줄 수 있습니다.

 

쉽게 말해서 웹 브라우저용 매크로랄까요?

 

Selenium으로 화면을 조작하는 전체적인 개념은 다음과 같습니다.


1) 조작을 원하는 버튼이나 입력창의 html을 파악

 

2) 아래의 두 함수에 html 정보를 입력해서 객체(버튼/입력창 등) 선택

  • find_element_by_css_selector( )
  • find_element_by_xpath( )

3) 기능 동작 관련 함수로 원하는 기능 조작

  • 클릭 : .click( )
  • 키 입력: .send_keys( )

원하는 키워드를 검색하는 아주 간단한 예제를 통해서 어떤 방식으로 사용하는지 보여드리겠습니다.

 

1단계. 원하는 버튼의 html 타겟팅

 

가장 먼저 해줄 일은 크롬을 실행해서 F12를 누르는 것 부터 시작합니다.

 

F12를 누르면 지난 강의에서 배우셨 듯이 웹 브라우저 우측에 '개발자 도구'가 나타날 거예요. 그러면 개발자 도구 상단의 화살표 버튼을 눌러서 조작을 원하는 부분을 클릭해주세요.

 

 

검색창에 원하는 키워드를 입력하고 앤터를 눌러주는 것이 이번 예제의 목적이므로 검색창을 타겟팅 할 수 있도록 'CSS Selector' 개념을 이용해보겠습니다. CSS Selector 개념을 모르신다면 아래의 글을 참고해주세요.

 

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

 

 

방금 전까지 잘 따라오셨다면 아마 개발자 도구에 '검색창'의 html 부분이 나타나 있을텐데요. 우선 빨간색으로 표시된 class 속성값 부분을 더블클릭해서 복사(Ctrl+c)를 해주세요.

<여기서 잠깐>

class명이 gLFyf gsfi인 input 태그를 선택하려면, input.gLFyf.gsfi라고 입력해주어야 합니다.

1) input 바로 뒤의 점(.)은 class를 나타냄 (id라면 . 대신 #이 들어감) 2) gLFyf 바로 뒤의 점(.)은 띄어쓰기를 의미하며, 띄어쓰기를 모르는 컴퓨터를 위한 것임

 

여기까지 따라오셨다면 이제 코딩창으로 넘어가서 원하는 조작을 수행해 보겠습니다.

 

 

2단계. Selenium으로 타겟팅한 html 찾기

 

그 다음으로 해줄 일은 Selenium의 find_elements_by_css_selector( ) 함수로 위에서 가져온 선택자(input.gLFyf.gsfi)를 ( ) 안에 넣어서 크롬 드라이버가 알아먹을 수 있게 변환해주는 것입니다.

 

그 전에 먼저 관련 모듈을 import 해주고, 구글 드라이버를 이용해 'Google'까지 접속해줍시다. 아래 코드에 주석을 달아두었으니 그리 어렵진 않으실거예요.

 

# 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)

 

<여기서 잠깐>

혹시 아직 chromedriver를 설치 안하셨다면 아래의 글을 보시고 설치해주셔야 코드가 정상작동 합니다.

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

 

그리고 chromedriver의 경로를 어떻게 입력해야할지 모르시겠다면 아래의 글을 참고해주세요.

2021.06.05 - [파이썬 기초/기초 문법] - [Python 기초] 파이썬으로 경로와 디렉토리 다루기(feat. 절대 경로와 상대 경로)

 

 

자, 다시 본론으로 돌아와서 find_elements_by_css_selector( ) 함수로 chromedriver가 검색창을 찾을 수 있게 해봅시다.

 

# 검색어 창을 찾아 search 변수에 저장 (css_selector 이용방식)
search_box = driver.find_element_by_css_selector('input.gLFyf.gsfi')

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

 

갑자기 xpath가 나와서 당황스러우시겠지만 둘 다 같은 결과를 수행하는 코드라는 것을 알아두세요.

 

참고로 xpath는 아까 찾으셨던 html 코드 위에서 '우클릭'을 하신 후, 아래 그림과 같이 'Copy Xpath'를 클릭하시면 클립보드에 //*[@id="google_search"] 라는 xpath가 저장되어 있을거예요. 이걸 위의 코드와 같이 넣어주시면 된답니다.

 

어렵지 않죠? html에 class나 id가 없어 타겟팅 하기 어려운 경우에 자주 사용하니 꼭 알아두시면 좋을 것 같아요!

 

 

 

3단계. 원하는 조작 수행

 

여기까지 하셨으면 Chromedriver가 Selenium 패키지의 find_element 함수를 이용해서 원하는 html을 찾은 상태입니다.

 

이제 남은 일은 원하는 조작을 수행하도록 명령 내리는 일입니다.

명령은 간단합니다. 클릭하거나 원하는 키를 입력해주는 것 2가지 입니다.

 

  • 클릭 : .click( )
  • 키 입력: .send_keys( )

<send_keys로 입력 가능한 키 목록>

명령어 기능
Kyes.ENTER
Keys.RETURN
엔터
Keys.SPACE 스페이스
Keys.ARROW_UP
Keys.ARROW_DOWN
Keys.ARROW_LEFT
Keys.ARROW_RIGHT
방향키(상하좌우)
Keys.BACK_SPACE
Keys.DELETE
지우기 (벡스페이스)
지우기 (딜리트)
Keys.CONTROL
Keys.ALT
Keys.SHIFT
Keys.TAB

자주 사용하는 기능키(Ctrl, Alt, Shift, Tab)
Keys.PAGE_UP
Keys.PAGE_DOWN
스크롤 업
스크롤 다운
Keys.F1~9 F1 부터 F9 (F+숫자)
Keys.EQUALS, Keys.ESCAPE, Keys.HOME, Keys.INSERT 기타 등등

 

그럼 간단히 어떻게 코드로 적용할 수 있는지 알아보겠습니다.

 

search_box.send_keys('파이썬')
search_box.send_keys(Keys.RETURN)
time.sleep(1)

 

사용법 역시 정말 간단합니다.

아까 찾았던 검색창(search_box) 변수 다음에 .send_keys('검색어')를 넣어주면 아래와 같은 상태가 되겠죠?

 

그 다음에 search_box.send_keys(Keys.RETURN)을 입력해주면 우리가 검색어를 치고 '엔터키'를 입력해주는 것과 동일합니다.

 

참고로 그림에서 Google 검색 버튼을 우리가 했던 방식으로 타겟팅 해주고 .click( ) 함수로 '마우스 클릭' 해주어도 엔터키를 입력한 것과 동일한 결과를 얻을 수 있습니다.

 

# click 함수는 ()안에 아무것도 넣지 않으면 좌클릭을 수행
search_button.click()

 

이 부분은 여러분들의 실습 과제로 남겨두겠습니다.

 

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

 

오늘도 공부하시느라 고생 많으셨습니다~!

 


이 글이 도움이 되셨다면, 아래의 광고를 한 번씩만 눌러주시면 너무너무 감사하겠습니다!

반응형
반응형

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

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

업무는 물론 투자에도 도움이 될만한 전자공시시스템(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 패키지를 이용한 동적 웹크롤링을 할 때, 텍스트와 속성(하이퍼링크, 이미지)을 가져오는 방법에 대해서 알아보겠습니다. 참고로 Request와 Beautifulsoup 패키지를 사용하여 텍스트, 이미지, 하이퍼링크를 추출하는 방법은 지난 글을 참고해주세요.

 

실습을 통해서 하나씩 알아볼텐데요. 대략적인 순서는 이렇습니다.

 

1. 검색할 키워드 입력

2. 크롬 드라이버로 원하는 url 접속

3. 뉴스 제목 텍스트 추출

4. 뉴스 url 링크 추출

5. 뉴스 썸네일 이미지 추출

     - 이미지 src 리스트에 저장

     - 이미지 저장할 폴더 생성

     - src를 이용해 이미지 다운로드

 

 

우선 지난 시간에 다뤘던 1번 2번 단계는 설명 없이 코드만 공유드리고 넘어가도록 하겠습니다.

#step1.selenium 패키지와 time 모듈 import
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

#step2.검색할 키워드 입력
query = input('검색할 키워드를 입력하세요: ')

#step3.크롬드라이버로 원하는 url로 접속
url = 'https://www.naver.com/'
driver = webdriver.Chrome('/Users/sangwoo/Desktop/chromedriver')
driver.get(url)
time.sleep(3)

#step4.검색창에 키워드 입력 후 엔터
search_box = driver.find_element_by_css_selector("input#query")
search_box.send_keys(query)
search_box.send_keys(Keys.RETURN)
time.sleep(2)

#step5.뉴스 탭 클릭
driver.find_element_by_xpath('//*[@id="lnb"]/div[1]/div/ul/li[2]/a').click()
time.sleep(2)

 

참고로 위의 코드를 실행하면 아래와 같이 입력한 키워드의 뉴스 검색 결과가 출력됩니다. 참고로 한 페이지에 뉴스는 10개가 출력됩니다.

 

 

해당 화면이 출력되셨다면 F12 버튼을 누르시고 크롤링을 원하는 부분을 selenium 패키지로 가져와야합니다.

 

지금 배우고 있는 동적 웹크롤링과는 조금 다르지만 참고하시면 좋을 것 같아 지난글의 링크를 공유드립니다.

 

2021.04.02 - [파이썬 패키지/웹크롤링] - [코딩유치원] 네이버 뉴스 기사 제목 크롤링을 통한 정적 수집 기초 정리(beautifulsoup, requests)

 

 

오늘 사용할 html은 아래의 빨간색 사각형으로 표시한 부분입니다. 위 영역은 기사제목과 기사링크(href)를 담고있으며, 아래 영역은 이미지 주소(src)를 담고 있습니다.

 

 

텍스트 추출 .text

 

selenium의 텍스트 추출은 아주 쉽습니다. 아래와 같이 선택자(css selector)를 이용해 원하는 부분의 html을 변수에 저장해준 후에, 아래와 같이 for 문과 .text 함수를 이용해 주시면 됩니다.

 

#step6.뉴스 제목 텍스트 추출

news_titles = driver.find_elements_by_css_selector(".news_tit")

for i in news_titles:
    title = i.text
    print(title)

 

결과는 아래와 같이 출력됩니다.

 

 

링크 추출 .get_attribute('href')

 

링크를 가져오고 싶을 때, 속성을 가져오는 .get_attribute('href')를 사용합니다. href 속성은 방금 전 가져온 news_titles 변수에 저장되어 있으므로, 따로 한 번더 가져와줄 필요 없이 바로 for문을 써줬습니다.

 

#step7.뉴스 하이퍼링크 추출

for i in news_titles:
    href = i.get_attribute('href')
    print(href)

 

결과는 아래와 같이 10개의 url이 출력되는 것을 확인하실 수 있을거예요.

 

이미지 추출  .get_attribute('src')

 

다음으로는 이미지 추출입니다. 텍스트나 url 링크를 가져올 때와는 다르게 조금 길지만 어려워 하실 필요없어요.

 

앞서 배우신 것과 같이 이미지 주소(src)를 갖고 있는 html을 news_thumnail 변수에 저장해줍니다.

 

그 다음엔 이미지 다운로드를 위해서 해당 주소들을 리스트(link_thumnail)에 append 함수를 이용해 하나씩 담아주세요.

 

사진을 다운로드 받아서 내 PC에 저장하기 위해서는 저장할 폴더를 만들고, src 주소를 이용해 다운로드 해주면 됩니다.

폴더 생성에는 os 모듈과 urllib.request 패키지의 urlretrieve 함수가 필요한데, 모두 다 파이썬 내장 라이브러리이므로 따로 설치해주실 필요 없이 import 해주시면 돼요.

 

os 모듈과 경로에 대한 개념을을 잘 모르신다면 아래 글을 참고해주세요.

 

2021.06.07 - [파이썬 패키지/사무자동화] - [Python / os모듈] 디렉토리(폴더)와 경로 정보 활용하기

 

 

#step8.뉴스 썸네일 이미지 추출

news_thumbnail = driver.find_elements_by_css_selector("img.thumb.api_get")

link_thumbnail = []

for img in news_thumbnail:
    
    link_thumbnail.append(img.get_attribute('src'))


# 이미지 저장할 폴더 생성

import os

# path_folder의 경로는 각자 저장할 폴더의 경로를 적어줄 것(ex.img_download)
path_folder = '/Users/sangwoo/Desktop/img_download/'

if not os.path.isdir(path_folder):
    os.mkdir(path_folder)


# 이미지 다운로드

from urllib.request import urlretrieve

i = 0

for link in link_thumbnail:          
    i += 1
    urlretrieve(link, path_folder + f'{i}.jpg')        #link에서 이미지 다운로드, './imgs/'에 파일명은 index와 확장자명으로

 

<실행 결과>

 

<참고>

 

별점 추출 get_attribute('style')

이건 자주 사용하진 않는데 가끔 속성을 가져와야할 때가 있습니다. 예를 들면 제가 잡플래닛 평점을 크롤링 할 때, 별점을 아래와 같이 style 속성으로 정의하더군요. 여기에 width: 68%를 속성 추출을 이용해서 받아와서 5점 만점의 별점으로 재가공 했던 적이 있습니다.

i.get_attribute('style')

 


오늘도 공부하시느라 고생 많으셨습니다.

 

감사합니다.

반응형
반응형

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

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

업무는 물론 투자에도 도움이 될만한 전자공시시스템(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 프로그램

 


 

 

오늘은 아주 짧게, 웹크롤링 할 때 원하는 정보의 형태에 따라서 어떻게 가져올 수 있는지 알아보겠습니다.

 

<이 글을 읽기 전에 읽으면 좋은 글>

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

2021.04.02 - [파이썬 패키지/웹크롤링] - [코딩유치원] 네이버 뉴스 기사 제목 크롤링을 통한 정적 수집 기초 정리(beautifulsoup, requests)

 

선택자와 select(), select_one() 함수에 대해서 아시고, Reuqests, beautifulsoup를 이용한 정적수집에 대해서 아신다면 가져온 html에서 원하는 정보를 추출하는 함수가 필요합니다.

 

<참고> select 함수 사용법

# 선택자를 사용하는 방법 (copy selector)
soup.select('태그명')
soup.select('.클래스명')
soup.select('#아이디명')
 
soup.select('상위태그명 > 하위태그명 > 하위태그명')
soup.select('상위태그명.클래스명 > 하위태그명.클래스명')
 
# 태그와 속성값으로 찾는 방법
soup.select('태그명[속성="값"]')
 
# 한 개만 가져오고 싶은 경우
soup.select_one('태그명[속성="값"]')

 

텍스트 추출  get_text( )

 

우리는 예전에 select( ) 함수를 이용해 추출한 html 문장(?)들이 titles라는 리스트에 담겨있다고 했을 때, 그 각 html 문장 안에 들어있는 텍스트를 아래와 같은 방식으로 추출했었죠. 이건 이미 다루었던 내용이라서 넘어가겠습니다.

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

 

이미지 추출  get('src' ) or ['src']

크롬의 개발자 도구(단축키 F12)를 통해 이미지를 찍어보면 보통 아래와 같은 html 구조를 가지고 있습니다. 

 

위의 사진과 같은 img 태그는 어떻게 원하는 사진을 가져올 수 있을까요?

 

1) 우선 select('img._image._listImage')로 여러개의 html을 가져옵니다. 만약 한 페이지 내에서 <img> 태그가 한 종류만 존재한다면 그냥 select('img')로 해도 되겠죠?

 

2) 그 다음 for문을 이용해서 아래와 같이 src를 가져옵니다. 둘 중 하나만 골라서 사용하세요.

for i in imgs:
    src = i['src']
    src = i.get('src')

 

3) src는 한마디로 '이미지 주소를 담은 링크'입니다. 이것을 다운로드 받아서 내 PC에 저장하기 위해서는 추가적인 작업이 필요합니다. 이 부분은 일단 링크로 대신하고 추후 정리하도록 하겠습니다.

 

m.blog.naver.com/PostView.nhn?blogId=kiddwannabe&logNo=221358581642&proxyReferer=https:%2F%2Fwww.google.co.kr%2F

 

웹크롤링)이미지/동영상 자료 다운받기

크롤링 진행시, 이미지나 동영상을 저장하고 싶을때가 있죠. 예를들면.. .인스타그램 크롤링을 진행할때, ...

blog.naver.com

 

href 추출  get('href' ) or ['href']

링크를 가져오고 싶을 때, href를 추출합니다. 생각해보니 아래의 프로젝트를 할 때 사용한 적이 있네요.

 

2021.04.05 - [파이썬 프로젝트] - [파이썬 프로젝트] 원하는 주제의 네이버 뉴스 텔레그램으로 5분마다 전송 받기

for i in hrefs:
    i.['href']
    i.get('href')

 

 

<2021.06.22 정정>

 

아래의 내용은 selenium 패키지를 이용한 함수입니다. 

 

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

 

속성(attribute) 추출 get_attribute('속성 종류')

이건 자주 사용하진 않는데 가끔 속성을 가져와야할 때가 있습니다. 예를 들면 제가 잡플래닛 평점을 크롤링 할 때, 별점을 아래와 같이 style 속성으로 정의하더군요. 여기에 width: 68%를 속성 추출을 이용해서 받아와서 5점 만점의 별점으로 재가공 했던 적이 있습니다.

i.get_attribute('style')

 


 

반응형
반응형

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

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

업무는 물론 투자에도 도움이 될만한 전자공시시스템(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 패키지로 chromdriver를 제어합니다. 특정 url로 접속해서 로그인을 하거나 버튼을 클릭하는 식으로 원하는 정보가 있는 페이지까지 도달합니다. 브라우저를 직접 조작하고 브라우저가 실행될때까지 기다려주기도 해야해서 그 속도가 느리다는 특징이있습니다. 물론 사람이 하는 것보다는 빠르지만요.

 

웹 크롤링을 하다보면 아래와 case 같이 정적 수집이 불가능한 경우들이 많습니다.

 

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

case2. 보고 있는 위치에 따라 url이 계속 변하는 네이버 지도
case 3. 드래그를 아래로 내리면 계속 새로운 사진과 영상이 나타나는 인스타그램과 유튜브

이번 시간에는 위의 케이스들은 아니지만, 지난 시간 배운 정적 수집과 비교를 위해 페이지 버튼을 조작해서 네이버 뉴스 기사 제목 10개를 크롤링 하는 것을 하면서 방법을 익혀보겠습니다.

 

위에서 언급했듯이 selenium 패키지를 다루기 위해서는 크롬 드라이버가 설치되어 있어야하니, 아래의 글을 참고하셔서 설치해주세요.

 

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

 

 

쉬운 이해를 위해서 코드를 끊어서 설명드려보겠습니다.

 

1단계. Selenium 패키지로 네이버에 접속하기

#step1.관련 패키지 import
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

#step2.검색할 키워드 입력
query = input('검색할 키워드를 입력하세요: ')

#step3.크롬드라이버로 원하는 url로 접속
url = 'https://www.naver.com/'
driver = webdriver.Chrome()
driver.get(url)
time.sleep(3)

 

먼저 관련 패키지를 import 해야합니다. 이번 예에서는 세 번의 import가 있는데요.

앞의 두 개는 selenium 패키지에서 크롬드라이버를 제어하고, 크롬드라이버에서 원하는 키를 입력할 수 있는 모듈을 import하는 것입니다.

마지막 time은 크롬드라이버가 실행되고 페이지 이동하는 시간을 충분히 기다리기 위해서 사용하는 패키지입니다.

 

다음으로 query로 이름지은 변수에 사용자가 원하는 키워드를 입력받아서 대입하는 코드를 두었습니다. 사용자가 터미널을 통해서 input을 입력하지 않으면 프로그램이 진행되지 않으니 주의하세요.

 

그 다음엔 webdriver.Chrome( ) 함수를 이용해 크롬드라이버 자동 다운로드 및 실행 후, get( ) 함수를 이용해 원하는 url로 접속해줍니다. 이때 앞서 말했듯이 실행되기 까지의 시간을 벌어주기 위해서 time 패키지의 sleep함수를 써서 3초간 기다려줍니다.

 

 

2단계. Selenium 패키지로 원하는 페이지까지 이동하기

#step4.검색창에 키워드 입력 후 엔터
search_box = driver.find_element(By.ID, "query")
search_box.send_keys(query)
search_box.send_keys(Keys.RETURN)
time.sleep(3)

#step5.뉴스 탭 클릭
driver.find_element(By.XPATH, '//*[@id="lnb"]/div[1]/div/ul/li[2]/a').click()
time.sleep(2)

 

위의 코드를 한줄씩 설명하면 다음과 같습니다.

 

1. 네이버창의 검색창을 찾습니다. (검색 창은 id인 query를 이용해서 찾아주었습니다.)

 

 

[여기서 잠깐!]

driver은 실행 중인 Chrome Driver(정확히는 활성화 된 현재 탭)를 뜻하며, driver.find_element는 현재 탭에 출력된 HTML에서 요소를 찾겠다는 의미로 이해하시면 됩니다.

무엇을 찾겠다는 내용이 괄호 안에 쓰여지게 됩니다.괄호 안에 들어갈 수 있는 내용은 아래와 같으며, 주로 사용하는 로케이터는 TAG_NAME, ID, CLASS_NAME, CSS_SELECTOR, 그리고 XPATH 정도 입니다.

 

 

2. 아까 입력주었던 검색어를 검색창에 입력합니다. 

 

3. 엔터 후 3초 기다립니다.

 

4. 검색결과(현재 통합 탭 클릭 상태)에서 뉴스 탭을 클릭합니다. 아래에서 보듯이 탭은 여러개가 있는데다가 모두 같은 class명을 사용해서 하나만 콕 집을 수 있는 xpath 방식을 사용해야합니다.

 

class='tab'인 a 태그가 여러개 있음

 

xpath를 찾으려면 아래와 같이 해당 html 부분을 우클릭하여 Copy XPath를 클릭해주면 됩니다. 그대로 VS CODE의 코딩창에 붙여넣기(Ctrl+V) 해주면 //*[@id="lnb"]/div[1]/div/ul/li[2]/a 이렇게 나오는 것을 확인 할 수 있습니다. 이걸 driver.find_element_by_xpath( )의 괄호 안에 넣어주면 됩니다. 여기서 주의할 점은 따옴표(' ')안에 넣어주어야 한다는 것입니다. xpath를 잘 보시면 쌍따옴표(" ")가 들어가 있기 때문입니다. (기초문법 강의 참고)

 

5. 2초 기다린다.

 

 

3단계. Selenium 패키지로 원하는 정보 수집하기

 

이제 원하는 정보(원하는 키워드의 뉴스 기사 10개)가 있는 페이지로 이동 완료한 상태입니다. 여기서 원하는 정보(기사 제목)를 가져오는 방법에 대해서 알아보겠습니다. 

#step5.검색 결과 페이지에서 selenium 패키지로 수집해보기
news_titles = driver.find_elements(By.CLASS_NAME, "news_tit")

for i in news_titles:
    title = i.text
    print(title)

 

이번에는 By.CLASS_NAME 로케이터를 이용해서 뉴스 제목을 가져와보았습니다.

 

만약 100개의 기사를 수집하고 싶다면, for문을 이용해 10번 반복하면서, 다음페이지로 넘어가는 버튼을 click() 함수로 조작하면 되겠죠?

이 부분은 직접 실습해보시길 추천드립니다.

 

오늘도 공부하시느라 고생많으셨습니다~

반응형
반응형

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

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

업무는 물론 투자에도 도움이 될만한 전자공시시스템(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 프로그램

 



오늘은 네이버 뉴스에서 특정 키워드를 검색해서, 첫 페이지의 모든 기사들의 제목과 언론사를 크롤링 해보겠습니다.

우리의 목적은 지난 시간 배운 정적 수집을 실전에서 사용해보면서 그 개념을 이해하는 것이 되겠습니다.

 

우선 코드는 아래와 같습니다.

#step1.프로젝트에 필요한 패키지 불러온다.
from bs4 import BeautifulSoup as bs
import requests

#step2.크롤링할 url 주소를 입력한다. (네이버에서 코로나 검색 후, 뉴스 탭 클릭)
url = 'https://search.naver.com/search.naver?where=news&sm=tab_jum&query=코로나'

#step2-1.만약 다른 키워드를 매번 다르게 입력하고 싶다면 아래와 같이 하셔도 됩니다.
query = input('검색할 키워드를 입력하세요: ')
url = 'https://search.naver.com/search.naver?where=news&sm=tab_jum&query='+'%s'%query

#step3.requests 패키지의 함수를 이용해 url의 html 문서를 가져온다.
response = requests.get(url)
html_text=response.text

#step4.bs4 패키지의 함수를 이용해서 html 문서를 파싱한다.
soup = bs(html_text, 'html.parser')

#step5.bs4 패키지의 select_one 함수와 선택자 개념을 이용해서 뉴스기사 제목을 하나 가져온다.
print(soup.select_one('a.news_tit').get_text())

#step6.bs4 패키지의 select 함수와 선택자 개념을 이용해서 뉴스기사 제목을 모두 가져온다.
titles = soup.select('a.news_tit')

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

 

정적 수집에서 다른 부분은 항상 같지만 step2의 url 주소와 step5, 6의 선택자 개념은 웹 사이트마다 다르니 조금 더 자세히 살펴보겠습니다.

 

 

<원하는 사이트 url 주소 얻기>

 

먼저 크롬 브라우저를 켜서 네이버를 들어가줍니다. 그 다음 검색하고자 하는 키워드를 입력해주겠습니다. 저는 코로나를 검색해보았습니다. 검색하신 후에 뉴스 탭을 클릭하시면 위와 같은 url 주소가 나옵니다. 이 주소를 코딩하실 때 url(변수)에 넣어주시면 되겠습니다.

 

 

<원하는 정보 콕 찝어서 크롤링하기>

 

우리가 궁극적으로 목표하는 것은 특정 웹 페이지에 들어가서 원하는 정보를 쏙쏙 가져오는 것입니다. 그 방법에 대해서 알아보겠습니다.

 

1. 원하는 페이지에 접속한 후, F12를 눌러줍니다. (꼭 크롬 브라우저여야 합니다.)

 

 

 

2. 그러면 위와 같이 화면 우측에 html 정보가 쭉 뜰텐데요. 빨간색으로 표시된 화살표 아이콘을 눌러서, 화면에서 원하는 정보(글 혹은 사진)가 있는 곳을 찍어보겠습니다. 그러면 아래와 같이 html이 바뀌는 것을 확인 할 수 있습니다.

 

 

 

3. 화면 오른쪽에 해당 부분의 html 코드가 표시되는 것을 볼수 있습니다. 조금 더 자세히 보면 <a> 태그 안에 class="news_tit"라고 적혀있는데, 이 class라는 것은 css로 html의 태크를 꾸며줄 때, 태그를 특정지어서 꾸며줄 수 있도록 속성명을 정해놓은 것이라 생각하시면 됩니다. 참고로 네이버 뉴스의 경우 한 페이지에 10개의 제목(class="news_tit")가 있습니다.

 

 

4. 지난 시간 배웠던 CSS Selector(선택자) 개념과 select_one 함수를 이용해서, 가장 첫 기사의 제목만 가져오는 코드는 아래와 같습니다.

여기서 get_text()라는 함수가 나오는데, 이는 하나의 html안에 있는 텍스트를 가져오는 기능을 합니다.

print(soup.select_one('a.news_tit').get_text())


<결과>

[속보] 코로나 백신 접종자 중 60명 확진…AZ 56명·화이자 4명

 

5. html 문서에서 가장 처음 나오는 것을 하나만 선택하는 select_one( ) 함수와 다르게 모든 html 태그를 선택하는 select( ) 함수를 사용하면 페이지에 존재하는 10개의 기사 제목을 모두 가져올 수 있습니다. 결과를 보니 그 사이에 기사가 더 나왔네요.

 

titles = soup.select('a.news_tit')

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

<결과>

정총리 "코로나 4차유행 초입 아닌지 걱정…위태로운 상황"
'확진 직원 접촉' 권칠승 중기부 장관, 코로나19 '음성' 판정
[속보] 코로나 백신 접종자 중 60명 확진…AZ 56명·화이자 4명
[속보] 558명 신규 확진…'코로나19' 사흘 연속 500명대
[단독]"코로나 감염시 책임져라"…서강대 기숙사 '외출 서약' 논란
고3 학생·교사 '코로나 백신' 접종…"여름방학에 화이자 예정"(종합)
코로나19 백신 우리 동네에서 맞을 수 있다
학교 안 가서? '코로나 블루' 청소년만 피해 갔다
코로나19 어제 558명 신규 확진...사흘 연속 5백 명대
[단독] 코로나 앞에서 속수무책…투자자들 "150억 날릴 판"

 

제가 자주 했던 실수가 있는데요. 바로 select로 찾은 결과에 바로 get_text( ) 함수를 적용한 것입니다. 위의 코드에서 titles는 리스트 형식으로 10개의 html 정보가 들어있습니다. get_text( ) 함수는 반드시 1개의 html 태그에만 사용할 수 있으니, 꼭 for문으로 하나하나씩 가져오시는 것 기억해두세요!


오늘 준비한 내용은 여기까지입니다. 다음 시간에는 동적 페이지를 제어해서 수집하는 동적 수집에 대해서 배워보겠습니다.

 

고생 많으셨습니다.

반응형
반응형

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

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

업무는 물론 투자에도 도움이 될만한 전자공시시스템(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