웹 사이트에서 원하는 정보를 추출해보자! 파이썬으로 웹 크롤러 만들기 리뷰
created: 2017.05.07
최근에 미니 프로젝트로 생각해 둔 것이 있었는데, 매일 뉴스 기사에서 단어를 수집할 필요가 있었다. 그리고 파이썬으로 프로젝트를 해보고 싶은 생각도 있었는데 마침 필요한 것들이 전부 있는 책이 손에 들어왔다. HTML파싱에 필요한 라이브러리부터 문서 포맷 파싱, 자연어처리, 이미지 인식, 유닛 테스트까지 다루지 않는 부분이 없는 엄청난 책이었다. 전문서를 읽으면서 가끔 묘한 느낌이 들 때가 있는데 이 책이 그랬다. 책의 두께로만 봐서는 도저히 각 챕터를 전부 다룰 수 없을 것 같은데 정말 그렇게 하고 있었다. 초보자의 관점에서 본 이야기이고, 어떤 챕터는 한 권의 책으로 심층적으로 다뤄도 모자랄 것이다. 하지만 어떤 노하우나 기술의 '힌트'를 적절히 배치해놓은 것을 보고 감탄하지 않을 수 없었다. 그런 점에서 이 책은 웹 프로그래밍을 막 시작한 분들에게 굉장히 매력적인 책일 것이다.
5장에서는 관계형 데이터베이스에서 자료를 저장하는 스키마 설계에 대해 고민하게 하는 한편, 성능적인 면에서 쿼리 응답을 빠르게 하기 위한 인덱싱기술도 설명하고 있다.
책이 다양한 주제에 대해서 다루고 있다보니 원하는 챕터만 찾아봐야겠다고 다짐했다. 그래서 처음에 6장은 넘어가려고 했다. 그런데 웬걸 텍스트 인코딩에 대해 설명을 하고 있어서 읽다보니 한 챕터 전체를 다 읽게 되었다. 텍스트 인코딩에 대한 개괄적 설명, csv, pdf, docx 포맷에서 데이터를 추출하는 방법이 차례로 나온다. 책을 읽는 순서는 관계가 없지만 초보자는 유용한 내용이 많으니 웬만하면 모두 읽는 것이 좋을 것 같다.
데스크탑으로 맥을 쓰면서 멀웨어나 바이러스와는 많이 멀어졌다고 생각했는데 간과한 부분이 있었다. 위키의 유닉스 계열 서버의 점유율을 보면 가장 낮은 것도 60퍼센트를 넘는다. 크롤링을 잘못하면 저자의 말대로 악성코드를 내 컴퓨터로 초대하는 것이나 다름없다. 방어적 프로그래밍을 일깨워주는 참 좋은 책이다… 그리고 이런 '주의'표시가 있는 내용이 챕터 마다 있어서 책을 읽고 많이 배울 수 있었다.
웹 사이트를 돌아다니면서 법적 이슈가 생길 거라고 예상하는 사람이 없으니, 크롤링을 하는 것도 법적인 이슈가 없을 것이라고 예상했다. 그런 점에서 저자가 윤리적인 이슈 및 법적 이슈가 생길 수 있음을 경고해주고, 실제 사례도 소개해주고 있어서 흥미롭게 읽을 수 있었다.
curl 커맨드를 이용해서 HTTP 리퀘스트를 보낼 때 실패하는 사이트들이 있었는데 그 때는 어떤 정보를 통해서 확인하는지 몰랐었다. 이런 노하우를 배우다보니 내가 아직도 웹에 대해서 모르는게 굉장히 많다는 생각이 들었다…
코딩 컨벤션에 대해 잠깐 언급하고 리뷰를 마치고자 한다. 이전에는 파이썬을 간단히 로직 테스트 용도로만 사용했었다. 그래서 크게 긴 코드를 작성할 일이 없었다. 파이썬 코딩 컨벤션도 딱히 따르는 것이 없었는데 저자의 코드를 따라서 실습하다보니 홑따옴표와 쌍따옴표를 혼용해서 쓰고 있었다. 책에 파이썬 코딩 컨벤션에 대한 언급은 없기 때문에 스택오버플로우에서 관련된 내용을 찾아봤다. 기본적으로 이 논의는 가치가 없는 것(…)으로 보이지만, 참고할 만한 내용은 있었다. 펄 언어에서 보간(Interpolation)가능한 문자열과 보간하지 않는 문자열을 구분하는 문법이 있고, 그 전통이 펄 프로그래머들로부터 파이썬까지 따라왔다는 것, 혹은 (사람이 이해하는)자연어는 쌍따옴표로, 기계가 이해하는 언어는 홑따옴표로 쓴다는 규칙이 있었다. 어떤 사람은 영어의 문장부호 규칙에서 그것이 따라왔다고 보는 사람도 있었다. 쓰는 사람 마음이지만 오픈소스 프로젝트에 참여하는 것을 고려한다면 참고할 수 있을 것이다.
책을 읽으면서 파이썬 코드의 가독성이 정말 좋다는 것, 그리고 필요하다고 생각하는 라이브러리가 대부분 있다는 것을 느꼈다. 최근에 인기가 많은 Node.js도 라이브러리가 많이 구현돼있지만 데이터 과학쪽은 아직 파이썬의 환경이 더 잘 되있고, 초보자가 접근하기도 더 수월하다고 생각한다. 책이 얇고 다양한 주제에 대해 다루고 있기 때문에 심층적인 내용을 다룰 수 없는 것은 어쩔 수 없다. 하지만 흥미를 일으키기에 충분한 분량의 내용이 각 챕터별로 들어있다고 생각한다. 리뷰를 읽으실 초보자분들이 이 책을 통해 즐거운 코딩경험을 하시길 기대한다.