본문 바로가기
크롤러

[Python 크롤링] 데이터 수집과 웹 구조, HTML5 문법, 실습 코드

by cxcwin 2023. 8. 1.
크롤링을 배우는 이유는?
: 산재되어있는 데이터 모아서 유의미한 결과를 뽑아내고, 그것을 통해 상대방을 설득하여 내가 원하는 것을 얻기 위함. 
💡 웹 크롤링>웹 스크래핑

◆ 웹 크롤링: 정의 되어 있지 않은 수많은 데이터들 중 내가 원하는 정보 인덱싱하는 행위 ex) 검색엔진
◆ 웹 스크래핑: 타겟 사이트, 타겟 페이지 존재→ 거기서 내가 원하는 데이터를 구조화(배열, 테이블, 리스트 저장 등등) 해서 가져오는 행위
  • 데이터 분석: 이미 일어난 일에 대한 원인을 찾고, 기계 또는 사람이 미래에 무슨 일을 벌일지 예측하는 것이다.
  • 빅데이터는 정답에 가까운 해답을 찾는 과정이다. 빅데이터는 절대 정답을 얘기하지 않는다. 확률로 얘기한다! 

<데이터 수집과 웹 구조>

인터넷에 있는 정보를 갖고 오려면 일단 웹 구조를 알아야겠죠? 자료의 양이 많은데 컨트롤 씨브이해서 갖고 올 순 없잖아요.

 

 

크롬브라우저, 사파리, 파이어폭스, 엣지 브라우저를 켬→ "오늘 이슈 보여줘! " 요청 때림→ 서버는 내 요청에 응답하게 되는데, 이 응답 과정에서 서버에 연결되어 있는 정보를 가지고 와서 나에게 전달해준다. 이 일련의 과정이 "웹 검색".

 

아니 ;; 근데 저는 이 과정을 눈으로 보고 싶은데요? → f12 개발자도구를 실행하면 됨. 웹사이트 구조 파악 가능하고 전송되는 거 눈으로 볼 수 있음.

웹사이트 정보가 우리 컴퓨터에 HTML 언어 형태로 저장됨. 근데 그 언어를 해석하려면 해석기가 존재해야 하는데 그게 바로 “브라우저” 즉, 웹브라우저=해석기.  HTML의 소스코드를 해석해서 나한테 보여준게 내가 보는 화면인겨.

 

지금 브라우저에서 보여지는 저 수많은 것들이 “element (요소)”

수많은 element들을 찾을 때 가장 먼저 봐야 할 것은 “태그”

태그 값 정확히 찾아가면 내가 원하는 요소 찾을 수 있다.

 


 

<HTML5 기본문법>

볼수록 헷갈려서 GPT한테 물어봤다^^

 

💡 HTML 구조

HTML(HyperText Markup Language)은 웹 페이지의 구조와 콘텐츠를 정의하기 위한 마크업 언어입니다. HTML은 요소(element)와 속성(attribute)으로 구성되며, 이를 통해 웹 페이지의 구조, 레이아웃, 스타일, 동작 등을 설명합니다.

요소(Element): HTML 요소는 태그(tag)로 표현되며, 다음과 같은 형식을 갖습니다:

<tagname>콘텐츠</tagname>

여기서 <tagname>은 요소의 태그 이름을 나타내며, </tagname>은 요소의 종료를 나타냅니다. 요소는 중첩될 수 있으며, 중첩된 요소는 부모-자식 관계를 가집니다. 몇 가지 흔히 사용되는 요소들은 다음과 같습니다:

  • <html>: HTML 문서의 루트 요소
  • <head>: 문서의 메타데이터(제목, 스타일시트, 스크립트 등)를 포함하는 요소
  • <body>: 실제 콘텐츠(텍스트, 이미지, 링크 등)를 포함하는 요소
  • <div>: 구획을 나누기 위한 요소
  • <p>: 단락을 나타내는 요소
  • <a>: 하이퍼링크를 정의하는 요소
  • <img>: 이미지를 삽입하는 요소
  • <table>: 표를 정의하는 요소
  • <form>: 데이터 입력을 위한 양식을 정의하는 요소

속성(Attribute): HTML 요소는 속성을 가질 수 있으며, 속성은 요소에 대한 추가 정보를 제공합니다. 일반적으로 속성은 요소의 시작 태그에 포함되며, 다음과 같은 형식을 갖습니다:

<tagname attribute_name="attribute_value">콘텐츠</tagname>

여기서 attribute_name은 속성의 이름을 나타내며, attribute_value는 속성의 값입니다. 몇 가지 흔히 사용되는 속성들은 다음과 같습니다:

  • class: 요소를 스타일링하기 위한 CSS 클래스를 지정
  • id: 요소를 고유하게 식별하기 위한 식별자 지정
  • src: 이미지, 비디오 등의 소스 파일 경로를 지정
  • href: 링크된 문서의 URL을 지정
  • style: 요소에 직접 적용되는 CSS 스타일 규칙을 지정
  • alt: 대체 텍스트를 지정하여 이미지의 대체 내용을 설명

HTML은 매우 다양한 요소와 속성을 제공하므로, 웹 페이지의 구조와 레이아웃을 자유롭게 설계할 수 있습니다.


[네이버 웹사이트 열고 닫기]

 

from selenium import webdriver
import time, os, sys

driver=webdriver.Chrome() 

# 웹사이트 오픈하고 닫기 
driver.get("https://www.naver.com")
time.sleep(2)
driver.maximize_window()


time.sleep(3)
driver.close()

 

[riss.com 사이트 제어 및 데이터 수집하기]

from selenium import webdriver
from selenium.webdriver.common.by import By
import time, os, sys
driver=webdriver.Chrome() # 이후에 driver 변수를 사용하여 Chrome 브라우저를 제어하고 웹 페이지를 조작할 수 있습니다.

#웹사이트 접속하기
driver.get("http://www.riss.kr/index.do")
time.sleep(2)
driver.maximize_window()   #하는 이유: 반응형 웹사이트 경우 웹사이즈 따라서 element가 바뀜 메뉴위치나 이런거. 대부분은 반응형

# 팝업창 닫기  (첫번째 뜨는 창은 무조건 0번-> 팝업창은 1,2,3 근데 팝업 있을지 없을지는 모름)
main = driver.window_handles #handle은 인덱스 넘버임
for i in main: #메인 값에서 하나씪 i변수에 넣어줌
    if i != main[0]:#메인만 살리고 나머지 죽이겠단 뜻
        driver.switch_to.window(i) 
        time.sleep(2) #2초에 한 번씩 팝업창 닫아줄거
        driver.close()

driver.switch_to.window(main[0])

빅리더 프로젝트 손기동 강사님의 크롤러 수업을 바탕으로 정리한 글이다.

파이썬으로 크롤링하는 방법을 배우고 싶었는데, HTML 구조부터 시작해서 자세한 내용들 배울 수 있어서 굉장히 유익한 시간이었다.