2016년 5월 1일 일요일

동적 웹컨텐츠 크롤링

최근에 간단한 웹크롤러를 만들고 있는데, 동적 웹컨텐츠를 크롤링하는 방법을 정리한다.  이 블로그에서( http://yujuwon.tistory.com/entry/PhantomJS-사용하기) 설명한 것처럼 PhantomJS을 사용하였다.

1. 동적 웹컨텐츠

아래와 같이 파이어폭스의 개발자 도구의 "네트워크" 텝을 켜서 보면, 응답의 형식이 html이 아닌, json 이나 xml 인 경우가 있다. 브라우저가 이러한 응답을 읽어서 내용을 표시해주는데 보통의 ajax 방식으로 로딩되는 경우가 이러한 경우이다. 이런 경우는 소스에서 Request 을 하는 url 을 찾기 쉽지 않다. 그래서 PhantomJS 와 같은 브라우저를 이용해서 웹페이지를 로컬로 임시로 저장해서 그것을 크롤링 하는 방법을 사용해보기로 한다.  더 좋은 방법이 있을법도 한데, 일단 동작하는 프로그램을 빨리 만들어보자.
























2. PhantomJS

맥에서 PhantomJS을 사용하려면 소스코드를 다운받고 빌드를 해주어야 한다. 아래 문서를 참고하자. http://phantomjs.org/build.html

git submodule update 까지 해주고 실행하고 build을 하려고 하면 OpenSSD, Xcode 등이 없다고 빌드가 되지 않는다. 다 설치해주고 나서 build 을 해주자. build 는 조금 시간이 걸린다. 


그리고 나서 phantomjs을 이용해서 웹페이지를 로컬로 저장해보자. 간단한 js 스크립트를 이용해서 저장을 한다. 위의 소스코드는 "http://yujuwon.tistory.com/entry/PhantomJS-사용하기" 에서 복사해온 것이다. 그리고 나서 아래처럼 실행해보자.

➜  phantomjs git:(d9cda3d) ./bin/phantomjs save_web.js http://sports.news.naver.com/wfootball/news/index.nhn

공식문서의 아래 문서를 참조하면 도움이 된다.
http://phantomjs.org/screen-capture.html

3. 크롤링 라이브러리

크롤링 하는 프로그램은 scrapy 라는 파이썬 라이브러리를 이용해서 작성하고 있다. 여러모로 편리하다.
http://scrapy.org



2016년 4월 13일 수요일

파이썬 모듈, 패키지

1. 모듈

파이썬에서 모듈은 단순히 파이썬 코드 파일이다. 한권의 책이 단어들, 문장, 단락, 장(챕터) 로 이루어진 것처럼 프로그램 코드도 대략 데이터 타입(단어들), 문장, 함수(단락), 모듈(챕터)과 같은 형태로 구조화 된 것으로 생각해 볼 수 있다. 파이썬에서는 다른 모듈에 정의된 데이터 타입, 함수등을 import 을 통해서 불러와 사용할 수 있다.

아래 hello_world.py 에서는 hello 와 hi 모듈에 있는 함수를 사용하고 있다.


[라인 1] 에서와 같이 모듈에 있는 모든 함수를 import 하거나, [라인 2]에서 처럼 필요한 함수만 import 하여 사용할 수 도 있다.


2. 패키지

이 모듈들은 패키지라고 불리우는 폴더를 통해서 체계적으로 구조화 시킬 수 있다. 어플리케이션의 덩치가 커질수록 패키지를 이용해서 잘 구조화 시키는 것은 필수적인 요소이다. 파일시스템에서 파이썬 패키지로 인식되려면 __init__.py 라는 특별한 파일을 만들어 주어야 한다. 이 파일은 아무 내용이 없을 수도 있고, 필요한 내용들을 기술해 줄 수도 있다. 자세한 내용은 여기를 참조하자.

















예제에서 사용된 파이썬 프로젝트의 구조를 살펴보면 두 개의 패키지("hello", "world")  가 생성되어 사용되고 있으며 각각의 폴더의 아래에는 __init__.py 라는 파일이 존재하는 것을 볼 수 있다.

[라인 3]에서 볼수 있는 것과 같이 "패키지명.모듈명" 의 형태로 다른 패키지에 있는 모듈을 import 하여 사용할 수 있다. as  키워드을 이용하 별칭을 붙여줄 수 있다. [라인 10]에서 별칭을 이용해 cn.where_are_you() 라는 메서드를 호출하고 있다. [라인 4]에서는 다른 패키지에 있는 모듈에서 특정함수만을 import 하는 것을 보여준다.





2016년 4월 2일 토요일

이클립스 python 개발 환경

python 개발 도구로는 많은 것들이 있다. 나는 이클립스 환경이 익숙하기에, 이클립스에 PyDev 라는 플러그인을 설치하여 개발환경을 구축하여 사용한다. 프로젝트가 다양한 언어를 사용하여 이루어진 경우, 별도의 IDE 을 열지 않고, 이클립스 하나만으로 프로젝트 전체 코드를 보는데 유용하기도 하다.

1. PyDev 설치하기


이클립스 마켓플레이스에서 pydev 을 검색하여 설치한다.





2. PyDev 프로젝트 생성하기





3. intepreter, python path


프로젝트를 생성한 다음에, 마우스 오른쪽 버튼을 눌러서 프로젝트 속성으로 이동한다. 거기서 파이썬 버전과 파이썬패스를 설정해 줄 수 있다.





























4. HelloWorld 


자, 이제 HelloWorld을 찍어보자.


























5. 라이브러리 추가하기

개발을 하다보면 라이브러리를 추가해야 할 경우가 있다. 이클립스에서는 아래와 같이 "Add zip/jar/egg" 버튼을 눌러 라이브러리가 설치된 경로를 지정해주면 된다.