본문 바로가기

카테고리 없음

Crawling 크롤링

반응형

크롤링 툴

BeautifulSoup4 Scrapy Selinum Jsoup

개발 언어 python python python java
진입 장벽 매우 쉽다. 어렵다. 어려운 편이다.  
확장성 확장하기 어렵다. 유지가 쉬운편 확정하기 좋다.  
특징 xml, html 코드를 바탕으로 데이터 크롤링, 초보자용 자료량이 많다.    
확장 CSS 선택, XPath 표현식을 사용,        
Html/Xml 내장 지원,        
Json으로 내보내기 내장 지원 API를 사용하여 데이터를 추출하는 데 사용할 수 있습니다. 범용 웹 크롤러로도 사용할 수 있습니다. 성능이 좋다.    
단점 확정하기 어려워 유지보수가 어렵고, 동적 수집이 어렵다. 처음 잠시 띄워진 정적페이지만 가지고 온다. 쿠키(로그인된 정보)를 사용할 수 없다. 동적 수집이 어렵다.

웹 크롤링) Selenium VS BeautifulSoup 라이브러리 비교

정적 수집

  • 정적 수집은 멈춰있는 페이지의 html을 requests 혹은 urllib패키지를 이용해 가져와서 beautifulsoup패키지로 파싱하여 원하는 정보를 수집한다. 여기서 파싱(parsing)이란 복잡한 html 문서를 잘 분류, 정리하여 다루기 쉽게 바꾸는 작업
  • 바로 해당 url의 html을 받아와서 수집하기 때문에 수집 속도가 빠르다는 장점이 있지만, 여기저기 모두 사용할 수 있는 범용성은 떨어진다.

동적 수집

  • 입력, 클릭, 로그인 등과 같이 페이지 이동이 가능
  • 동적 수집은 계속 움직이는 페이지를 다루기 위해서 selenium패키지로 chromdriver를 제어한다. 특정 url로 접속해서 로그인을 하거나 버튼을 클릭하는 식으로 원하는 정보가 있는 페이지까지 도달한다.
  • 이때 driver.find_elements_by(언더바) 함수를 이용하여 html을 곧바로 추출할 수 있고, driver.page_source함수를 이용해 전체 html을 받아 올 수도 있다. html전체를 받아와서 beautifulsoup로 하면, 페이지에서 하나하나 가져오는 것보다 수집속도가 빠른 특징이 있다. 이 부분은 선택사항이지만 다른코드를 이해하는 목적으로 둘다 알아두면 좋다.
  • 동적 수집의 특징은 정적 수집과 반대라고 생각하시면 됩니다. 브라우저를 직접 조작하고 브라우저가 실행될때까지 기다려주기도 해야해서 그 속도가 느리다는 특징이있습니다. 하지만 이는 상대적인 것이지사람이 직접하는 것보다는 훨씬 빠르니 기본적으로 동적 수집을 하고 필요시 정적 수집 방식을 이용하는게 어떨까 하는 것이 개인적인 생각입니다. 정적/동적 웹페이지에 모두 적용이 가능하다.

XPath

기본적으로 특정 요소나 속성을 찾고 싶을 때 다음과 같은 문법을 사용하여 접근할 수 있습니다.

https://devhints.io/xpath

// 현재 위치의 모든 자손 노드에서 검색 ex) //p

* 경로에 있는 모든 노드를 반환 ex) /html/div/div/*
[ ] 필터 표현식으로 인덱스, 속성 등을 통해 특정 요소를 검색  
[index] 검색된 노드들 중 index에 해당하는 노드 반환, 1부터 시작 ex) //p[1]
[@attr] 검색된 노드들 중 해당 속성을 가지고 있는 모든 노드를 반환 ex) //p[@class]
[@attr=”value”] 검색된 노드들 중 해당 속성과 속성 값이 일치하는 노드를 모두 반환 ex) //p[@class="content"]

수집주기

  • 카페 정보 : 직접!
  • 테마 정보 : 4주 단위로 수집
  • 예약 정보(도입할 시) : 시간마다 수집…

수집 자동화…

  • 일단 수집부터 하는 걸루!

 

DB 저장

  • BeautifulSoup4 사용 → MySQL

크롤링한 데이터 DB에 저장하기

  • Selinum 사용 → MySQL

파이썬 Selenium 크롤링

[Python] Selenium으로 중고나라 크롤링 후 MySQL에 저장

반응형