Data Collection
데이터 수집은 왜 하는 걸까??
1 | 4차 산업혁명 시대를 사는 현대인들 중 Big Data에 관한 존재를 모르는 사람은 없을 것이다 |
Data 수집 종류
1 | 1. 공공데이터(api, file) |
공공 데이터 api나 file 그리고 dataset(file)은 데이터를 수집하는 절차가 복잡하거나 수집해서
처리하는 작업이 번거롭거나 힘들지 않다
그런데 Portal site에서 데이터를 수집하기 위해서는 제법 까다로운 작업이 필요하다
Web Crawling은 불법?
결론적으로 말해서 모든 Crawling, Scraping은 불법이 아니다.
하지만 대부분 불법이므로 주의 해야 한다
어떤 것이 합법인가?
Opt-in vs Opt-out
1 | Opt-in : 정보 수집에 대해 동의를 얻고나서 수집하는 경우 (whitelist) |
Crawling하는 입장에서는 Opt-out 방법으로 정보를 수집한다
따라서 해당 사이트에서 robots.txt에 명시적으로 거부하지 않은 경우, 메인페이지 하단에 crawling 금지 표시가 없는 경우만 정보 수집이 가능하다.
Data from Portal site(Web Data)
Web으로부터 데이터를 수집하겠다고 마음 먹은 순간 해야할 작업들이 많다
Crawling부터 DB 저장까지 Flow
사진 출처: 논문[RCrawler: An R package for parallel web crawling and scraping -Salim Khalil, Mohamed Fakir]
1 | Data 수집원 OK? ⇒ Dynamic HTML ⇒ Focused? ⇒ Selenium + Crawling + url check ⇒ Scraping => DB |
데이터를 가져오려면 Web page 구성을 알아야 한다!
HTML, CSS, JavaScript등 웹 페이지 구성이 어떻게 되는지 공부해야 한다
사이트 마다 웹 페이지 구성이 다르기 때문에 웹에 대한 이해 없이 무작정 하면
데이터 수집이 안되는 경우를 발견하게 될 것이다
1 | 어떠한 웹 페이지는 요청한 부분만 동적으로 페이지 리로딩 없이 데이터를 가져 와서 |
잘 모른다면 참고하자 => Object Model
웹 문서 중 어디서부터 어디까지 찾을 껀데? 수집 범위는 정했니?
지금부터는 Crawling 기법으로 Hyperlink fetch를 반복해서 페이지 사이 link 구조를 알아내야 한다
그 다음 depth를 설정해서 어디까지 crawling 할 것인가를 정하고 focused crawling으로 crawling하는 페이지를
한정 할 것인지 아니면 페이지를 넘나들며 끊임없이 확장할 것인지도 정해야 한다 (목적에 맞게)
이러한 경우를 DFS(Depth First Search)와 BFS(Breadth First Search)라고 한다
Crawling해서 많은 url은 확보 했는데 어떤 url에 유용한 정보가 있는지 아니?
url만으로 정보의 유용성을 판단할 수는 없다
따라서 crawling 해서 database에 저장할때 page rank 개념을 활용하여 저장하는 것이 효율적이다
page rank개념은 페이지 참조횟수가 많으면 그만큼 영향력 있고, 가치가 있는 데이터를 포함한 페이지라 간주한다
결국 page rank가 높은 순으로 url을 분류하고 그 url로 부터 data를 수집 하면 된다
단, page rank가 높다고 나한테 필요한 데이터라는 보장은 없다.
그래서 데이터 추출후 전처리, 패턴 분석 등 여러가지 처리 후 데이터를 사용해야 한다.
유용한 page url을 알아 냈으니 내가 원하는 data를 수집하자
scraping
Data mining
Data mining 출처: incodom
Crawling vs Scraping
사진출처: prowebscraping
Crawling
BFS Crawling
google 박보영 검색 결과 crawling
1 | headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"} # 브라우저에서 직접 request보내는 것처럼 흉내내기 위한 header 초기화 |
DFS Crawling(Focused Crawling)
naver에 박보영 검색 후 블로그 url parsing
1 | import requests, download |
crawling 출처: prowebscraping quora tistory
논문: [RCrawler: An R package for parallel web crawling and scraping -Salim Khalil, Mohamed Fakir]
Crawling 한 url DB에 저장하기
1 | import sqlite3, requests, download |
Scraping
Crawling한 url로 부터 내가 원하는 데이터를 수집하는 것을 말한다
Naver news 본문 scraping 예제 (Dynamic HTML X)
1 | from selenium import webdriver |
Selenium
Web Browser Automation
단점 page rendering중에는 dom객체에 접근하지 못하고 에러가 날 수 있다. 그래서 time sleep으로 시간을 부여하여 에러 발생 가능성을 줄이고 에러 핸들링이 필요하다. 결국 selenium을 활용하면 오히려 시간이 오래걸릴 수 있다.
Dynamic HTML Scraping 예제
1 | from selenium import webdriver |
Page Rank
Page Rank 참고: sungmooncho