2019.04.25 정적크롤링(request,beautifulsoup4)
# 질문에 답하기
- 정적 크롤링
- request
- beautifulSoup
크롤링 : 웹 페이지에 있는 자료를 자동으로 수집하는 프로그램
- robots.txt : 검색엔진에게 어디까지 검색을 허용할 것이냐?
- 선행지식 : HTML에 대한 이해 CSS Selection을 만드는 방법
- 정적페이지 크롤링(페이지 소스보기에서 보여질 때)
- request와 beautifulsoup4를 이용해서 크롤링 및 해석한다.
- 동적페이지 크롤링(실시간으로 데이터가 바뀔 때)
- selenum혹은 ajax, josn을 이용하여 크롤링 및 해석한다.
- 정적페이지 동적페이지 확인 방법
- 본인이 크롤링 할려는 데이터가 페이지소스보기 했을 때 있는지 확인한다.
- 검사 및 셋팅(f1)에 들어가서 DEBUGGER의 disable javascript를 한후 새로고침을 해본다.
- 데이터가 나오지 않으면 javascript를 통해 데이터를 받아온다.
- 오른쪽 하단에 위치
브라우저가 혹은 크롤러가 어떤식으로 서버에 접근해서 데이터를 가져오는가?
- 주소를 입력하면 해당 서버로 접근한다.(url 필수)
- 웹서버 프로그램이 해당 주소에 맞는 내용을 전달한다.(by source code)
- request라는 모듈을 이용한다.
- request(urllib의 wrapper 클래스)
- 웹 브라우저는 받은 소스코드를 해석해서 화면에 보여준다.
- 크롤러는 받은 내용을 해석해서 내가 원하는 데이터를 뽑아낸다.
- BeautifulSoup 모듈 이용
- 해석해서 : html 코드의 해석, CSS Selecter 만드는 방법
- 웹브라우저와 크롤러의 차이
- 크롤러는 받은 내용을 해석해서 내가 원하는 데이터를 뽑아낸다.
정적 크롤링 필요 모듈 설치
- requests : 웹페이지에 접근해서 데이터를 가져온다.
- pip3 install requests
- requests는 aiax로 받아온 데이터를 실시간으로 반영할 수 없다.
- 페이지소스코드 보기까지 가능하다.
- 내가 원하는 자료를 계속 못 받아온다고 하면 aiax로 구성되서 그런가보다 하고 알아야 한다.
- 해결방안으로 selenium : 웹 브라우저를 원격 조작하는 방식의 크롤러이다.
- 크롤링 모듈 : request, selenium, scrapy등 상황에 맞는 크롤링 모듈 정리
- BeautifulSoup4 : 가져온 데이터를 HTML로 해석한다.
- pip3 install BeautifulSoup4
- 사용하기
import requests
from bs4 import BeautifulSoup
크롤러의 이용
웹 브라우저를 그대로 따라하기 때문에
- 명절표 예매
- 콘서트 티켓 예매 등을 할 수 있다.
- 빠른 정보 취득
- 정보 취득 및 삽입
크롤러자체는 불법이 아니나, 내가 크롤러로 무료로 취득한 정보를 바탕으로 돈을 벌면 불법이다.
만약에 자바스크립트와 같은 것을 통해서 지속적으로 업데이트 되는 웹사이트라면
- selenum보다는 request가 훨씬 빠르다.
- selenum : 웹 브라우저 자체를 컨트롤해서 크롤링
- 요소를 선택해서 사용자의 동작을 흉내낸다. : 클릭, 키보드 입력
- 선택자 xpath, css
- xpath : //*[@id=”main_content”]/div[2]/div/dl/dt[2]/a
- css : #main_content > div.list_body.newsflash_body > div > dl > dt:nth-child(2) > a