1부
: 닭 잡는 데 소 잡는 칼을 쓸 필요는 없다.
제목이 적절하다. 사실 급하게 크롤링을 해야 되는 경우가 존재할 때 무턱대고 '20단계나 되는 HTML 덩어리 속'에서 원하는 걸 찾을 코드를 작성했던 적이 있다. 그건 단발성 태스크였기 때문에 그 자리에서 즉시 완료할 수 있었지만 만약 수시간동안 혹은 수일동안 진행되어야 했던 태스크였다면..? 저자가 예시를 든 코드줄처럼 아주 복잡하게 꾸역꾸역 찾아올 수 있지만 사이트 개발자가 코드를 수정하는 순간 다시 코드를 짜야 하는 경우가 생긴다. 더군다나 그게 자동으로 크롤링 해서 db화를 시키거나 기타 다른 파이프라인에 속하는 작업이었다면 에러가 필수적이다.
그래서 여러 대안을 알려주는데 유익했다.
- '페이지 인쇄' 링크 등이나 더 간단한 html 구조를 갖춘 모바일 버전 사이트에서 크롤링을 시도하기
-> 이 부분은 나중에 유사 작업시에 html이 더럽다는 느낌이 든다면 시도해볼 예정이다.
- 원하는 정보가 오직 해당 페이지에서만 있는지 확인하기
-> 이 부분도 의외로 많은 초심자? 혹은 타직무자들이 간과할 부분인데 경험상 원하는 정보가 정말로 specific & detailed한 부분이 아니라면 긁어오기 쉬운 페이지가 존재할 수도 있다. 간단한 생각의 전환이지만 염두하지 않는다면 까먹기 쉬운 부분이다.
또 저자의 설명을 쉽게 따라갈 수 있도록 깃헙에 이미 주피터노트북으로 코드를 제공하고 있기 때문에 책에서 설명한 부분을 실습으로 팔로업하는 것도 간편하다.
-bs.body.h1 : 의 경우 body의 자손에서 첫번째 h1태그를 선택하지 body 밖의 h1에 대해서는 찾지 않는다.
이처럼 크롤링할 때 부모의 자식, 자손 등의 범위에서 어디까지를 볼 것인지를 생각해야 성공적인 작업을 할 수 있다.
또한 당장 내가 크롤링할 테이블이 해당 페이지에서 딱 1개밖에 없다고 해도 되도록 저자처럼 위치를 명확히 해주는 게 좋겠다. 크롤링 하는 페이지는 개발자가 언제들 바꿀 수 있는 부분이기 때문이다.
그리고 잊을만 하면 크롤링에서 정규식을 사용해야 될 때가 온다. 이때 사용하기 좋도록 저자가 잘 정리해놨다.
특히 주로 쓰는 분야는 이미지를 저장할때. 나 또한 비슷한 태스크를 진행시에 저자처럼 한다.
실제 크롤링할 예제 html을 제공하고 있기 때문에 각 예제 페이지 구조가 뭔지, 그리고 저자가 어떤 경우를 설명하는 것인지를 구별해놓는다면 유사 작업에 들어갔을 때 처음부터 헤매지 않고 진행이 가능하겠다.
또한 크롤링에서는 예외 처리를 빼먹지 말아야 한다. 우리가 가져올 페이지는 유동적이기 때문에 항상 변화에 대비가 되어 있어야 한다.
그리고 몰랐는데 다크 웹도 스크랩할 수도 있다고 한다. 다크 웹은 몇몇 수상쩍인 경우들이 있다 정도만 알고있다. 그런데 접근 가능하다니, 새로운 소식이다.
또 참고할 점, 파이썬은 재귀 호출을 1000회로 제한한다고 하니 위키백과 등 큰 문서를 크롤링할 때는 참고하면 되겠다.
html/css에 대한 이해가 있다면 그냥 초심자보다는 크롤링이 좀 더 쉬울 것이므로 시간 여유가 있는 초심자는 염두하면 되겠다.
또 책에서 웹 스크레이핑의 합법성과 윤리에 대해서도 1장을 할애하고 있는 것도 좋았다.
실제로 국내에서도 취업 사이트 간의 무단 크롤링에 대한 법적 처벌 기록이 있으므로 개인 사용자는 너무 욕심을 부려서 데이터를 이용하는 것은 자제해야겠다.
그리고 크롤링을 계획중이라면 책에서처럼 순서도로 한번 정리하고 들어가는 게 낫다.
또 저자가 추천하는 크롤러 개발 프레임워크는 스크레이피 Scrapy였다.
Scrapy가 로깅 관리할 때도 좋은 것 같아 향후에는 이걸로 바꿔보려고 한다.
크롤링이 워낙 정보침해? 법과 윤리적인 부분에서 애매한 행위가 있기 때문에 저자가 틈틈이 어떤 기술을 사용할 때 조심하거나 알아두면 좋을 내용에 대해서도 안내하는 것이 좋았다. 실제로도 크롤링을 처음 접하는 타직무 관련자가 이 기술을 접했을 때 무분별하게 사용하려는 시도를 많이 봤기도 했다.
2부
8장
사실 크롤링을 하다보면 데이터가 더.럽.다.. 정리하는 데 시간이 진짜 오래 걸린다. 이를 해결하기 위해 저자는 오픈리파인(openrefine)이라는 프로젝트를 제시한다. 내려받아서 csv파일로 데이터를 바꿔 사용할 수 있다. 기회되면 이것도 실제로 적용해볼 예정이다. 2부의 일부 내용은 기존에 데이터 분석을 좀 공부하거나 NLP, Vision 등의 코드를 돌려본 사람이라면 익숙하고 기초적인 내용이 나온다고 생각할 수 있다. 이 부분은 참고해서 필요하지 않다면 그냥 넘겨도 되겠다.
셀레니움도 조금은 다루고 있긴 한데 조금 더 보태자면 창 전환하는 것까지 하면 좋다 ^^
이밖에 14장 스크레이핑 함정 피하기도 실무에서 도움이 되는 내용이다. 혹은 연습하려는 페이지에서 장애물이 존재한다면 읽어보면 좋다.
16장 병렬 웹 크롤링 또한 유익한 내용이다. 멀티프로세싱에 대한 경험이 있다면 좀 더 쉽게 읽을 수 있다.
18장
저자가 말하는 웹 스크레이핑의 합법성에 대해서는 적어도 '엔지니어'의 관점에서는 저작권 잇는 자료를 원저자나 저작권 소유자로부터 허가받지 않고 직접 게시하는 것은 안되며, 접근 권한이 있는 저작권 자료를 자기 db에 저장하고 분석 목적으로 '공개하지 않은 채' 사용한다면 괜찮다고 한다.
단, 그 db를 웹 등에 게시해서 누군가가 보거나 다운받게 만들면 안된다.
다만 db를 분석하고 단어 통계, 저자 리스트, 기타 데이터에 대한 메타 분석을 게시하는 것은 괜찮다고 한다.
확실한 부분은 미국에 한정지어 DMCA의 '공정 이용' 절을 검토해보라고 한다.
나같은 경우도 혹시 몰라 robots.txt를 확인하고 있다. 그리고 이 파일이 있어서 대부분 위키백과를 그렇게 많이 크롤링하는 건가 라는 생각도 들었다. 책에서도 나오지만 위키백과의 robots.txt는 웹 스크레이핑에 대해 굉장히 관대하다.
"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."