반응형
크롤링 툴
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
기본적으로 특정 요소나 속성을 찾고 싶을 때 다음과 같은 문법을 사용하여 접근할 수 있습니다.
// 현재 위치의 모든 자손 노드에서 검색 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
- Selinum 사용 → MySQL
반응형