Python/Crawling

[Python Crawling] #1 Web Crawling의 이해와 준비

CocoJamjam 2023. 5. 26. 10:06
728x90
반응형

안녕하세요 코코잼잼입니다.

데이터 수집을 하는 과정에서 우리는 직접 CSV, JSON, EXCEL 형태의 파일을 사용할 수도 있지만,

웹 상에서 크롤링을 통해 데이터를 수집하는 방법도 있습니다.

이번 기회에 웹 상에서 데이터를 수집하는 방법을 알아보도록 하겠습니다.

 

Web Crawling

Web Crawling 이란?

웹 상에 존재하는 다양한 형태(이미지, 텍스트, API 등)의 정보(데이터)를 추출하고, 수집하는 것을 말합니다.

예를 들어 최근 트렌드를 알아보기 위해 특정 검색어에 따른 결과들에 어떤 단어들이 쓰이는지, 빈도 수나 이미지들을 코딩을 통해 웹사이트의 내용들을 싹 긁어와서 데이터로 활용할 수 있습니다.

이는 데이터 분석에서 매우 중요한 요소이므로 꼭 알아두었으면 합니다.

이번 글에서는 [" Web Crawling의 기본적인 이해와 준비내용 "]를 주제로 알아보겠습니다.

목차

  • Crwaling의 종류
  • HTML 이해하기
  • 알아두면 편리한 Widget
  • Python 라이브러리
728x90

1. Crawling의 종류

💾 정적 크롤링

  • 한 페이지 안에서 원하는 정보가 모두 드러나는 정적 데이터를 수집하는 방법
  • 빠른 크롤링 속도
  • 사용하는 라이브러리 : requests + BeautifulSoup
  • 예 : 네이버 뉴스 검색, 주식 현황 검색

💾 동적 크롤링

  • URL만으로는 들어갈 수 없는 웹페이지 탐색
  • 입력, 클릭, 로그인 등과 같이 페이지 이동이 필요한 데이터 수집
  • 수집 데이터의 한계가 없음
  • 사용하는 라이브러리 : Selenium
  • 예 : SNS 이미지 검색, 유튜브 영상 검색, 지도에서 데이터 검색

 

 

2. HTML 이해하기

HTML은 <태그>와 'CSS 선택자'로 구성되고 일정한 패턴을 이루기도 합니다.

이러한 패턴과 선택자를 활용하여 데이터를 추출할 수 있습니다.

HTML은 [F12 키] 혹은 [마우스 오른쪽 클릭 - 검사 클릭]을 통해 개발자 도구를 열어 확인할 수 있습니다. 

 

 

3. 알아두면 편리한 Widget

🔎 SelectorGadget

  • 설치 링크 : https://selectorgadget.com/
  • SelectorGadget을 활용하면 간단한 클릭만으로 필요한 영역의 노드값을 추출할 수 있습니다.
반응형

4. Python 라이브러리

🛠️ Request

  • HTTP 통신을 위한 라이브러리
  • HTTP 요청으로 직접 HTML을 다운로드
  • 사용 방법
# Requests

pip install request		# requests 라이브러리 설치

import requests                # requests 패키지 가져오기

url = 'https://james-choi88.tistory.com/'  # 가져올 url 문자열로 입력
response = requests.get(url)   # requests의 get함수를 이용해 해당 url로 부터 html이 담긴 자료를 받아옴
print(response.status_code)    # 정상적으로 받아졌다면 200이라는 상태코드를 반환
html_text = response.text      # 우리가 얻고자 하는 html 문서가 여기에 담기게 됨

🛠️ BeautifulSoup

  • HTML 분석을 위한 라이브러리
  • requests를 이용하여 크롤링한 웹페이지에서 정보를 쉽게 추출하는 라이브러리
  • 사용 방법
# BeautifulSoup

pip install beautifulsoup4

import requests
from bs4 import BeautifulSoup as bs		# 주로 bs로 간단한 이름을 사용

url = https://james-choi88.tistory.com/
response = requests.get(url)

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

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

🛠️ Selenium

  • ChromeDriver와 연동하여 Chrome 제어
  • 웹 자동화에 사용되는 프레임워크
  • 브라우저를 실제로 띄워서 동작하도록 만들 수 있음.
  • 사용 방법
# selenium의 webdriver를 사용하기 위한 import
from selenium import webdriver

from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options

#크롬 드라이버 자동 업데이트
from webdriver_manager.chrome import ChromeDriverManager

# 브라우저 꺼짐 방지
chrome_options = Options()
chrome_options.add_experimental_option("detach",True)

# 크롬 드라이버 실행
service = Service(executable_path=ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=chrome_options)
driver.get("https://james-choi88.tistory.com/")

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

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

#search 변수에 저장된 곳에 값을 전송
search.send_keys('코코잼잼의 개발')
time.sleep(1)

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