동적 크롤링 (이론)

JoyJuhee·2023년 1월 14일

Python

목록 보기
22/22
post-thumbnail

브라우저

브라우저 = 크롬
브라우저 = 사파리
1) 렌더링 : 화면에 그려주는 것 -> 무엇을 그리느냐? html 문서를 화면에 그리는 것
2) 편의기능 (북마크, 비밀번호 채워주기, 보안, 동기화, 개인화 등)

3) 예시

  • 네이버 접속 (http 통신으로 인해 네이버 화면을 렌더링된다.)
  • 블로그 버튼 클릭(인터렉션 -> 클릭을 받아주는 것은 브라우저로 그에 따른 http 통신을 하게 된다.)
  • 블로그 페이지 접속(http 통신, 렌더링)
  • 블로그 검색(인터렉션, http 통신)
  • 블로그 글 검색(http 통신, 렌더링)

셀레니움

1) 브라우저 테스팅 툴 / 브라우저 원격 조종 툴
: 예 ) 페이스북 개발을 한다고 할 때, 무한 스크롤이 잘 작동하는지 테스트를 해야 한다.

2) 셀레니움 원리
: 디버깅 모드의 브라우저와 TCP 통신, 마치 리모컨
❓ TCP 통신 : Handshake라는 과정으로 서로가 통신을 할 수 있는 상태를 먼저 인증을 하고 나서 통신을 하는 연결지향적인 양방향 통신. 클라이언트와 서버가 소켓을 각자 생성하여 서로에 대한 상태를 상시 확인할 수 있다.

정적 웹

1) 동적 웹 페이지와의 차이 : https://velog.io/@ppyooy336/%EC%A0%95%EC%A0%81-%EB%8F%99%EC%A0%81-%EC%9B%B9%ED%8E%98%EC%9D%B4%EC%A7%80-%EC%B0%A8%EC%9D%B4%EB%8A%94

2) 정적 웹: 주는 대로 그림
-> HTML 와 CSS로 이루어진 파일을 그대로 화면에 옮기는 것.

3) 서버와 클라이언트의 흐름 및 특징

  • 데이터가 한번에 담겨져 온다.
    : 가능한 모든 데이터를 담아서 온다.
  • 중복된 데이터가 잦다.
    : 새로고침 할 때마다 메뉴바의 데이터는 계속 중복해서 보내진다.
  • 드물게 통신한다.
  • 역사가 오래되어 안정적이다.

동적 웹

1) 원리

  • 사이트가 깜빡이지 않는다.
  • 화면이 한 번에 다 로딩되지 않는다. (DOM 생성)
  • 자바스크립트가 필수이다.
  • 필요한 데이터만 그때 그때마다 불러온다.

2) 서버와 클라이언트의 흐름 및 특징

  • 데이터가 따로 따로 여러군데에서 온다.
  • 서버와 자주 통신한다.
  • 디자인이 화려하다.
  • 기능이 많고 사용성이 편리하다.

셀레니움 실행

1) 먼저, 크롬과 크롬 드라이버를 설치한다.
❓ 크롬 드라이버 : 크롬과 셀레니움을 연결시켜주기 위함.
--> 이 때, 현재 크롬의 버전과 일치하는 크롬 드라이버를 설치해준다.

2) python3 -m pip install selenium

3)

from selenium import webdriver
import time

browser = webdriver.Chrome("./chromedriver")
browser.get("http://naver.com")
time.sleep(10)
browser.close()

--> 결과 : 네이버 사이트가 켜졌다가 10초 후 꺼진다.

셀레니움 실행 (도커)

1) 도커
: 가상의 컴퓨터를 실험실처럼 만들어 사용하는 것

2) 도커에 셀레니움을 실행하기 위해 docker hub 홈페이지에서
도커를 위한 스탠다드 허브를 찾은 다음, 명령창에서 설치해준다.
--> docker run -p 4444:4444 seleninum/standalone-chrome

3)

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

browser = webdriver.Remote("http://127.0.0.1:4444/wd/hub", DesiredCapabilities.CHROME)
browser.get("http://naver.com")
print(browser.title)
browser.close()

--> 결과 : 도커에서 실행되는 것이기 때문에 네이버 창이 실제로 뜨지는 않지만 print(browser.title)을 통해 NAVER 가 출력되는 것을 알 수 있다.

0개의 댓글