본문 바로가기
데이터 분석

웹 크롤링 with Python 3장

by ChocoPeanut 2017. 7. 11.

웹 크롤링 with Python 3

 

문서 인코딩은 애프리케이션이 그 문서를 읽는 방법을 지정한다. 모든 문서는 근본적으로 01로 인코딩되어 있다. 인코딩 알고리즘을 통해 문서에 대한 다양한 정보가 저장된다. 다양한 언어나 숫자에 대한 정보를 저장하고 출력하기 위해서는 UTF-8에 대한 것을 알아야한다. 원래 영어를 사용하는 입장에서는 ASCII를 사용하게 되면 인코딩을 쉽게 할 수 있었다. 하지만 다른 나라의 언어를 담고 있지는 못했다. 이에 대해 Universal Character Set Transformation Format 8 bitUTF-8을 사용하여 인코딩을 하면 모든 글자를 표현할 수 있게 된다.


CSV 파일을 읽는 방법은 다양하다. 원하는 파일을 직접 내려받은 후 파이썬에 그 파일의 위치를 알려주는 방법, 파일을 내려받는 파이썬 스크립트를 작성해서 읽고 원한다면 삭제도 하는 방법, 파일을 문자열 형식으로 읽은 후 StringIO 객체로 바꿔서 파일처럼 다루는 방법이 있다. 첫 번째 두 번째 방법도 좋지만 메모리에서 쉽게 처리하는 방법으로는 세 번째 방법이 사용된다. urlopen을 통해 csv 파일을 받은 후 StringIO 객체로 만든다. 이 후 reader를 이용해서 해당 객체를 읽어 오는 것이다. 이는 파이썬의 리스트 객체로 만들어지게 된다.


PDF 파일은 아주 널리 쓰이고 특히 공식 서식에 많이 사용된다. pdfminer 라이브러리를 사용하여 PDF 파싱을 할 수 있게 된다.


데이터를 읽는 것에 있어서 지저분한 데이터를 정리하는 것도 중요하다. 웹 크롤리에서 제한된 곳에서만 데이터를 수집할 수는 없을 때가 많다. 잘못된 구두점, 일관성 없는 대문자 사용, 줄바꿈, 오타 등 지저분한 데이터는 웹의 큰 문제점 중 하나이다. 이를 잘 수정하여 문제가 발생하지 않게 하는 것이 중요하다.


예외 처리를 위한 코드는 존재한다. urllib에서 HTTPError에 대한 import를 시킨 후 tryexcept를 사용하면 쉽게 예외를 처리할 수 있게 된다. 하지만 이뿐만 아니라 예상 못한 상황에 대해 대응하는 방어적 코드도 중요하다. n-그램은 텍스트나 연설에서 연속으로 나타난 단어 n개를 말한다. splitappend 함수를 이용하게 되면 입력 문자열을 받고 연속된 단어를 n개의 숫자에 맞게 배열을 만들어 반환할 수 있다. 하지만 여기에는 쓸모없는 다양한 값들이 같이 들어가게 된다. 이는 정규 표현식을 사용하여 이스케이프 문자를 제거하고 유니코드 문자도 제거하면 정리가 될 것이다. 또한 대괄호나 구두점, 한 글자로 된 단어 같은 경우에도 쓸모없는 정보이기 때문에 코드를 작성하여 제거를 시켜야한다.


위의 작업을 직접 코드로 작성할 수도 있지만 오픈리파인 같은 프로그램을 사용하면 빠르고 쉽게 정리할 수 있다