본문 바로가기
TOP
데이터 스킬업/웹크롤링

[파이썬: 웹크롤링] #01 웹크롤링 입문! 정적/동적 페이지에 대하여

by 티챠림 2023. 2. 28.

[왕초보 웹크롤링 무작정 따라하기] 웹크롤링 입문, 정적 페이지와 동적페이지, requests, BeautifulSoup, selenium


#01 웹크롤링 입문! 정적/동적 페이지에 대하여



우리 눈에 보이는 웹 페이지는 html이라는 문서로 구성되는데, 웹크롤링은 이 html 문서 안의 텍스트, 숫자, 링크를 내 컴퓨터로 가져오는 것이다. 즉, 웹크롤링으로 가져올 수 있는 데이터는 해당 웹페이지의 html 안에 존재해야만 한다. 이러한 제약때문에 웹 페이지가 어떤 방식으로 서버에서 데이터를 받아오는지에 따라 크롤링의 방식도 달라진다. 웹 페이지는 한 번의 로딩으로 모든 정보가 불러와지는 정적 페이지와 사용자의 동작에 따라  정보가 실시간으로 갱신되는 동적 페이지가 있다. 그렇기 때문에 웹크롤링을 하기 전 가장 먼저 해야하는 일은 원하는 정보가 어떤 식으로 어디에 html 상에 존재하는지 파악하는 것이다. 

 

1. 원하는 정보가 있는 웹페이지 찾기
2.
html 상에 원하는 정보가 존재하는지 확인
    - 어떠한 동작을 하지 않아도 원하는 모든 정보가 존재한다 =  정적 페이지
    - 스크롤을 내리거나, 마우스를 올리는 등 동작을 했을 때 원하는 정보가 업데이트 된다 = 동적 페이지

 

  01. 정적 페이지

정적 페이지는 웹 페이지의 모든 데이터가 한 번에 로딩되므로 html이 웹 상에 보이는 모든 정보를 포함하고 있다. 인터넷 뉴스 페이지 같이 늘 내용이 고정적인 페이지가 주로 이에 해당된다. 이러한 정적 페이지를 크롤링할 때에는 웹페이지 주소(url)을 통해 html을 받아오기만 하면 된다. 정적 페이지의 웹크롤링은 대략적으로 다음과 같은 단계로 진행된다.

 

파이썬에서 제공하는 requests 라이브러리로 원하는 웹 페이지의 html을 불러오고  BeautifulSoup 라이브러리의 사용해 우리가 원하는 데이터를 뽑을 수 있도록 html의 구조화한다. 이후 Select 또는 Find 메소드로 정보의 경로를 지정하고 get_text,  get_attribute 등의 메소드를 사용하여 텍스트, 숫자, 링크 등을 필요한 정보를 추출할 수 있다. 마지막으로 Pandas 라이브러리를 사용하여 크롤링한 데이터를 정리하여 저장하면 끝이다.

 

1. 웹페이지의 url을 통해 html 불러오기
2. 불러온 html 구조화하기
3. 원하는 데이터 추출하기
4. 데이터프레임으로 정리 및 저장 

 

  02. 동적 페이지

동적 페이지는 사용자의 동작에 따라 서버에서 실시간으로 데이터가 갱신되기 때문에 htm도 동작에 따라서 변화한다. 때문에 동적 페이지를 크롤링하기 위해서는 그때그때 필요한 동작을 수행해준 후 갱신된 정보를 가져와야 한다. 대표적인 동적페이지는 인스타그램으로 스크롤에 따라 피드가 갱신되고, 피드에 마우스를 올리고 있냐 아니냐에 따라 보여지는 정보가 달라지는 것을 볼 수 있다.

 

동적 페이지를 크롤링하기 위해 필요한 동작들은 Selenium 라이브러리를 통한 웹 브라우저 원격 제어로 수행된다. webdriverget 메소드를 통해 크롬 브라우저에 원하는 웹 페이지를 띄우고, find_elements 메소드를 사용하여 html 상의 객체를 지정하여 동작을 원격제어하거나 자바스크립트 명령어를 실행시킬 수 있다. 키보드 입력, 마우스 이동, 클릭 등 사람이 웹 브라우저를 사용하는 것과 같은 다양한 동작들이 가능하다. 웹 페이지에 원하는 정보가 갱신되었다면 마찬가지로 html 경로를 지정하고 text,  get_attribute 등의 메소드로 텍스트, 숫자, 링크 등을 필요한 정보를 추출할 수 있다. 

 

1. 크롬 브라우저 열기 및 웹페이지 접속
2. html 객체를 지정하여 필요한 동작 수행
3. 원하는 데이터 추출하기
4. 데이터프레임으로 정리 및 저장 

 

 

크롤링 방식을 동적/정적으로 구분하기는 했지만, 대부분의 웹 페이지는 동적 페이지와 정적 페이지가 혼합되어 있다. 때문에 많은 경우에 SeleniumBeautifulSoup을 함께 사용한다. 모든 코드를 셀레니움(Selenium) 라이브러리를 사용하여 만들 수 있지만 각 객체를 하나하나 지정하고 동작하고 데이터를 가져오는 방식으로 처리속도가 느리다는 단점이 있다. 때문에 인터넷 속도에 따라 정상적으로 작동하던 코드가 로딩 문제로 에러가 발생하는 경우가 있다. 이러한 단점을 보완하기 위해 동작이 필요한 지점에만 셀레니움을 사용하고, 필요한 정보가 모두 갱신되었다면 뷰티풀수프(BeautifulSoup)로 html을 통째로 가져와서 처리한다. 셀레니움으로 html 경로를 하나하나 가져와서 처리하는 것보다 뷰티풀수프(BeautifulSoup)로 html을 통째로 가져와서 처리하는 것이 훨씬 빠르기 때문이다. 

 

 

본 글에서는 웹크롤링 코드 작성을 시작 하기 전에 알아야할 개념과 라이브러리를 간단하게 알아봤다. 뒤이어 정적과 동적, 둘이 혼합된 방식을 예제를 통해 세부적인 메소드의 기능을 알아보고 직접 코드를 작성해 보도록 하자.

 

 

▼다음편 이어보기▼

 

[파이썬: 웹크롤링] #02 request와 BeatifulSoup 사용해서 html 불러오기

​[왕초보 웹크롤링 무작정 따라하기] 쥬피터노트북 라이브러리 설치, requests, BeatifulSoup, html 불러오기 #02 request와 BeatifulSoup 사용해서 html 불러오기 쥬피터노트북 라이브러리 설치하기 (바로가기

charimlab.tistory.com

댓글