크롤러
- 인터넷에 있는 콘텐츠를 기계적으로 수집해 데이터로 저장
- 파일, 데이터베이스 등에 저장
- 검색 서비스, 데이터 분석, 머신러닝 등에 활용
참고하면 좋은 자료 - 클라우드 페어
클라우드 페어에서는 크롤링의 개념 뿐만 아니라 나쁜 봇과 좋은 봇의 차이를 알려준다.
사용 예시
- 구글, 네이버 등 포탈은 콘텐츠를 크롤링해서 저장해서 검색 서비스를 제공
- 특정 분야나 용도에 초점을 맞춘 검색 서비스도 존재(네이버쇼핑의 최저가 사이트 등 가격 비교)
- RSS 리더 등
- 회사 인터넷 내부의 서버를 크롤링해서 사내 문서를 검색
네이버 서치와 관련된 정보를 얻을 수 있는 Naver Search Advisor
구글 검색 엔진 정보를 얻을 수 있는 구글 검색 센터
인터넷 콘텐츠
- 크롤링(수집)의 대상
- 웹 서버에 존재
- 웹 브라우저를 사용해 콘텐츠의 내용을 볼 수 있음
- 하이퍼링크를 사용해 참조 가능
크롤링
- 크롤러는 HTML 내부 링크를 따라 웹 페이지를 순회
- 즉, HTML 내부 a 태그의 href 속성을 추출해 해당 URL에 반복해서 접근
- 같은 페이지를 계속 수집하는 무한 반복에 빠지거나 불필요한 페이지를 수집하는 문제가 생기게 됨.
- 따라서 실제로 구현할 때는 유의가필요함.
- 예시
- 한 번 접근한 URL을 기록해 두 번 접근하지 않게 만든다
- 특정 패턴과 일치하는 URL만 순회하게 만든다
- 시작 페이지로부터 접근해 들어가는 페이지의 깊이에 제한을 둔다
스크래핑
- 수집한 콘텐츠에서 필요한 정보를 추출
- HTML은 웹 페이지를 꾸미기 위해 다양한 HTML 태그를 사용
- 콘텐츠와 관계없는 불필요한 부분을 제거해야 검색과 분석 용도로 활용 가능
- 수집 대상 콘텐츠는 HTML이 아니라 PDF나 Word 파일 등에서 글자를 추출하거나 이미지 파일을 추출하고 크기를 가공해야 하는 경우 등이 있을 수 있음
- 스크래핑이라고 하지는 않지만 수집한 데이터를 저장하기 전에 적절한 형태로 가공한다는 의미에서는 거의 비슷함
word에서는 간단히 글자를 추출할 수 있지만 pdf는 조금 더 까다롭다. 하지만 언제나 답은 있다.아래의 라이브러리를 사용하면 쉽게 pdf에서 글자 추출이 가능하다.
다만 몇가지 주의가 필요하다.
1. PDF를 열어서 텍스트를 추출하는 것은 간단하더라도, 표 형식으로 구성된 데이터는 그대로 추출하기가 힘들다. 따라서 문자열로 추출한 다음에 직접 가공해야 한다. 2. 이미지 파일로만 구성된 경우가 있다. 이때 이미지를 텍스트로 변환하려면 OCR 소프트웨어를 사용해야 한다. 대표적인 OCR 소프트웨어로는 구글의 Tesseract가 있다.
저장
- 데이터의 용도에 따라 저장 방식이 다름
- 소규모 데이터 - 로컬 파일 시스템에 파일로 저장
- 분석 - 데이터베이스
- 검색 서비스 - 검색 엔진에 인덱싱
- 대규모의 데이터 - 클라우드 저장소 고려
로컬 파일 시스템에 파일로 저장할 때는 주로 csv, xlsx를 사용해서 저장한다.
엑셀 파일로 저장할 때는 별도의 라이브러리 설치가 필요하고, csv는 파이썬 기본 내장 라이브러리다.
docs.python.org/ko/3/library/csv.html
대용량의 데이터를 저장할 때는 SQLite, MySQL, MongoDB등 다양한 데이터베이스를 사용한다.
sqlite는 처음에는 사용하기 편하지만, 데이터의 양이 늘어나면 늘어날 수록 단점이 부각된다. 대표적인 단점으로는 파일을 쓰는데 걸리는 시간이 길고, 프로그램이 파일을 열고, 쓰고있을 때는 다른 프로그램에서 해당 파일을 사용할 수 없다는 것이 있다.
참고로 python에서 sqlite의 sqlcipher를 사용해야 하는 경우가 있는데, 이 경우 설치가 매우 번거롭다. 옆의 더보기를 설치하면, 내가 sqlcipher를 파이썬에서 사용하기위해 겪었던 시행착오를 정리한 내용이 나온다.
sqlite를 사용하다가 sqlcipher를 파이썬에서 사용해야 하는 일이 생겼다. 그래서 설치 좀 해볼까 했는데 정말 안됐다. 인터넷에서 여기저기 돌아다니면서 해봤지만 다 안되고 결국 핸드폰 루팅의 끝판은 순정이라는 말이 있듯이 공식 메뉴얼을 보고 성공했다.
1. Win64 setup — Compiling SQLCipher
요령부리지말고 시키는대로 하면 된다.. 쉽게할려고 블로그 찾다가 하루를 날려보고 깨달았다
open ssl은 설치를 마친 후 무조건! 환경변수 설정을 해야한다. OPENSSL_CONF도 시스템 변수에 추가하는 것을 잊지말자
2. pysqlcipher
여기는 다 그대로 하면 되는데 vs 2019 community edition의 경우에는 경로가 조금 다르다.
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include
open ssl 폴더를 위의 경로에 넣어줘야 한다.
그리고 sqlite3.lib sqlcipher.lib(1단계에서 sqlchiper 빌드에 성공하면 나옴) 두 파일을 C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\lib\x64 경로로 넣어준다.
위의 과정을 다 마치고 깃헙에서 클론을 해와서 설치를 진행하면 된다..!!
$ git clone https://github.com/rigglemania/pysqlcipher3 $ cd pysqlcipher3 $ python setup.py build $ python setup.py install
만약 pysqlcipher 의 src 폴더 경로의 헤더파일들이 sqlcipher.h 를 가져올 수 없다고 나오면 헤더파일에 가서 sqlcipher/sqlcipher.h 를 sqlcipher.h 로 변경하는 작업을 하자. 그리고 해당 폴더에 sqlcipher.h를 복사해서 넣어주면 된다
이러한 문제를 해결하기 위해 MySQL또는 MongoDB를 사용한다.
SQLite www.sqlite.org/index.html
MySQL www.mysql.com/
MongoDB www.mongodb.com/
'Crawling' 카테고리의 다른 글
[크롤링/06] 인증이 필요한 페이지 (0) | 2021.03.22 |
---|---|
[크롤링/05]효율적인 크롤링 하는 방법 (0) | 2021.03.22 |
[크롤링/04] HTTP 기본 총 정리 (0) | 2021.03.22 |
[크롤링/03] 라이브러리/프레임워크 (0) | 2021.03.22 |
[크롤링/02] 크롤링을 잘 하는 방법 (0) | 2021.03.22 |