ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Crawling with python 3 준비(1)
    Python 2020. 2. 9. 00:48

    1. 웹 크롤링이란?

    리서치의 영역에서 정보를 수집하는 것은 기본 중에 기본입니다.
    우리는 단순하게 데스크 리서치를 통해 정보를 수집할 수도 있습니다만,
    그러한 단순 작업을 반복하는 것은 그 누구도 원하지 않습니다.

    웹 크롤링은 웹 사이트에 있는 정보들에 쉽게 수집할 수 있는 자동화 기술을 의미합니다.

    2. 웹 크롤링의 필요성

    예를 들어보죠.
    우리는 '2020년 1월 한 달간 있었던 이슈'를 정리하고 싶습니다.
    그러기위해 '각 신문사에서 나왔던 뉴스'를 수집하여 정리하기로 합니다.
    각 신문사 별 사이트에 들어가서, 최대한 제목만 보고 자료를 모으는데,
    처음 100개까지는 어렵지 않았는데, 1000개가 되고 10000개가 되니 힘들고, 지루하고, 회의감이 듭니다.
    웹 크롤링은 이럴 때 필요합니다. 컴퓨터가 자동으로 사이트에서 지난 1개월 간의 자료를 모아서 정리하고 파일로 만들어 주는거죠.
    100개 정도의 자료라면 프로그램을 짜는 동안, 차라리 손으로 하는게 편하지 않을까 생각하시는 분들께 말씀드리자면, 당연하게도 우리의 프로그래밍 실력이 부족하다면 1000개를 손으로 정리하는 것보다 크롤링을 하는게 어려울겁니다.
    그러나 프로그램은 이번에 잘 짜두면 다음에 100개를 찾을 때, 그 다음 100개를 찾을 때, 혹은 10000개를 찾을 때도 사용할 수 있습니다.
    크롤링을 하는 것은 효율의 문제로, 선택은 우리 자신의 몫이죠. 잠깐의 귀찮음과 수고를 하면 이후에는 편안해질 수 있습니다. 인간도 10만 건의 자료를 정리할 수 있습니다. 그러나 우리는 사마천도 아니고 사마천처럼 수세기에 걸친 역사를 정리하는 것도 아닙니다. 게다가 창작 작업조차 아니죠.
    여러분 기계에게 맡길 수 있는 일은 기계에게 맡깁니다.

    - 어떤 정보를 어떻게 접근할 것인가에 대한 질문은 매우 중요하며 기본적인 일이므로 다음에 기회가 있다면 꼭 다루어보도록 하겠습니다. -

    3. 도구 (Python)

    python 끝.
    전 python 패키지를 이용하고 python 정규식을 사용하고 csv 파일로 정리해서 내보낼겁니다.
    물론 몇몇 사이트에 대해서는 Open API를 이용해야 합니다.
    개인적으로 이런 종류의 글들이 올라와 있는 몇몇 훌륭한 사이트를 알고 있습니다만 각각의 특징이 있고 저는 여러 학습 단계를 거치지 않고 따라하면 완성할 수 있도록 하고 싶습니다.
    그리고 적절한 기초 지식들을 같이 제공할 수 있다면 더 좋겠네요.

    더보기

    python 끝. 이라고 했지만 python이라는 언어에 대해서 소개를 안하고 넘어갈 수는 없겠죠.
    필수는 아닙니다.

    위키에서 끌어온 정의를 해석해드리며 진행을 해보겠습니다.

    파이썬[2](영어:Python)은1991년[3]프로그래머귀도 반 로섬(Guido van Rossum)[4]이 발표한 고급프로그래밍 언어로, 플랫폼에 독립적이며인터프리터식,객체지향적,동적 타이핑(dynamically typed) 대화형 언어이다. 파이썬이라는 이름은 귀도가 좋아하는 코미디 〈Monty Python's Flying Circus〉에서 따온 것이다. 파이썬은 비영리의파이썬 소프트웨어 재단이 관리하는 개방형, 공동체 기반 개발 모델을 가지고 있다.C언어로 구현된C파이썬구현이 사실상의 표준이다.

    이미 첫줄에서 질려버리셨나요? 이렇게 개념이 압축되어 있는 글을 처음 접하시면 마치 초등학교때로 돌아간 느낌일겁니다.

    1. 고급 프로그래밍 언어 : 고급이 있다면 저급이 있겠죠. 고급이니 저급이니해서 헷갈리지만 영어로 번역하면 다음과 같습니다(프로그램 언어를 배우는 순간 영어를 배우는 것과 마찬가지로 우리의 활동 영역은 세계로 넓어 지게 됩니다. 세계의 프로그래머와 의사소통하기 위해 영어로 학습을 해나갑시다)
    저급 언어(low-level programming language)는 기계어와 어셈블리어가 있습니다. "낮은 단계의 언어 = 기계식 언어" 로 이해하면 되겠네요. 기계어는 말 그대로 0과 1인 언어입니다. 어셈블리어는 1차원 적인 번역기(어셈블러)를 사용하는 언어로 로우 레벨 언어는 굳이 우리가 접근할 필요가 없는 언어입니다. 우리에게는 고급 언어(high-level programming language)가 있으니까요.
    고급 언어는 우리 인간이 보기 좀 더 편한 언어들입니다. 영어 변수를 사용할 수 있으므로 가독성이 좋고, 일종의 대명사라고 할 수 있는 영어 변수명을 사용할 수 있으니까요. 대명사의 위대함을 알아주세요. 고급 언어는 번역가(컴파일러)와 통역가(인터프리터)를 가지고 있습니다. 간단하게 컴파일러는 저급 언어로 전부 문법을 변환하여 실행하는 것이고, 인터프리터는 해석하면서 기계에게 언어를 통역해주는 거라고 생각하면 되겠네요. 이러한 방식에 의해서 두 종류의 언어에서는 차이가 발생하고 서로 다른 이점이 생겨납니다. 근데 지금 그걸 설명하면 말이 너무 길어지네요.

    2. 플랫폼에 독립적: 간단하게 설명하죠. 유닉스, 리눅스, 윈도우, MacOS 등등등... 어디서든 사용할 수 있다.
    아니 이게 무슨 장점이야? 라고 하실 분들을 위해서 간단하게 설명하자면 iOS와 안드로이드는 따로따로 놀아요. 우리가 앱을 만드려면 두 플랫폼 각각 개발하는게 맞다는거죠. 근데 플러터가 나왔네. 와 플러터가 나왔구나. 플러터는 iOS에서도 놀고 안드로이드에서도 놀아요. 최고죠? 그래서 플러터인겁니다.

    3. 인터프리터식: 넘어가려고 했는데 바로 나오네요. 그런데 파이썬은 컴파일러식으로 작성가능합니다. 심지어 트랜스파일러 형태로도 가능하다고 하네요. 하이브리드요? 그게 뭡니까 어차피 저는 자바는 하기 싫어요. 그리고 그 정도는 PyPy를 쓰면되... 프리프로세서 이런건 들어본적만 있다고 해도 됩니다.

    4. 객체지향적 : 이건 복잡한거라서 다음에 다루겠습니다. 예시가 없으면 말만 듣고 이해하기가 힘들어요.
    하지만 여러분이 프로그래머라고 얘기하고 싶어하는 문과생이라면 프로그래밍 패러다임을 공부하세요.
    빡시지만 공부하고 나면 기본은 충분하다고 얘기할 수 있습니다. 그리고 프로그래밍 언어를 쓰는 용도에 따라서 다르게 프로그래밍을 합니다... 어떤 직군에 계신 분들은 OOP를 싫어해요. 메모리때문이라던가...
    그리고 파이썬은 개발을 개발새발해도 나만 쓸거니까 상관없어라고 생각하시는 분들이 쓰기에 나쁘지 않은거 같습니다. 나도 사실 개발새발 코딩하는 코더니까요. 물론 블로그 방문자들을 위해서 좀 잘 해볼 생각입니다만 ㅋ

    5. 동적 타입 언어 : 데이터에는 다양한 타입이 있습니다. 그걸 미리 정하느냐(정적 타입) 아니면 너네가 알아서 해봐(동적 타입)의 차이라고 생각하면 될 것같습니다. 근데 그냥 가능하시다면 정적 타입인 느낌으로 쓰세요. 동적 타입 언어라도 머릿속에서는 정적 타입이라고 생각하시며 쓰시는게 정신 건강에 이롭습니다. 아니라면 여러분이 보시는 에러의 반은 Type Error가 될겁니다. 혹은 Cython을 사용하면 행복.

    6. 개방형, 공동체 기반 개발 모델 : 한마디로 Open source라는 겁니다. 이것이야 말로 파이썬의 최대 장점. 여러분은 방대한 패키지의 세계로 들어가게 되는 겁니다.

    7. C파이썬구현 : 구현은 뭐랄까... 열심히 논문을 논문 작성 규정에 따라서 쓰면 그게 구현이랄까? C파이썬은 기본일뿐이며 다른 길도 있다는 것만 알면 될것같습니다. Python3에 아직 갈길이 멀다고 하지만 언젠가는 가장 좋은 형태로 통합될 것을 믿고 있습니다.

    여담 : 파이썬은 느리지는 않지만 무진장 빠른 언어는 아닙니다. R이나 C야 말로 빠른 언어지. 복잡한 알고리즘을 통한 분석과 그래픽 작업은 R이 더 나은 선택이란 말이죠. 물론 PyPy와 같은 구현이라면 많이 따라잡을 수 있겠지만... (R도 인터프리터 언어라서 느리다는 말을 하는 사람도 있을 수 있지만 써보면 아닐텐데? 대안으로 C를 배우는 것보다는 나은거 아닌가?? 파이썬으로 그래픽 작업을 대량으로하고 나면 그런 말이 나올까?)
    그리고 파이썬 말고 다른 언어를 선택하는 길도 있습니다. Ruby, Go 등... Ruby는 이미 한물간 녀석 취급을 받는것두 같고 Go야 말로 정말 쉬운 언어란 말도 있지만 파이썬은 여러 의미에서 기초를 익히기에 좋은 언어이기도 하니... 그렇지만 python과 더불어 C를 익힌다면 범용성, 확장성에서 최선의 선택이지 않을까 생각합니다. 여차하면 파이썬에서 R을 돌려도 되지 않을까?

     

    4. python 설치

    파이썬 설치에 앞서서 개발 환경과 설치 방식에 대해서 생각해보시길 권장합니다.
    (이 글에서는 가장 간단한 방식을 소개드립니다.)
    순정으로 파이썬을 설치하면 기본적으로 IDLE란 콘솔을 제공합니다.
    진짜 윈도우 메모장에 간단한 코드를 짜시는 분도 봤는데 이게 뭔가 싶었습니다.
    혹은 sublime text 같은 에디터나 pycharm와 같은 IDE를 쓰시는 분들도 봤죠. sublime은 hex데이터 등 여러 유형의 데이터를 보기 좋아서 나쁘지 않았고 pycharm은 디버깅에 좋습니다. 근데 저는 vscode로 배웠습니다. 왜냐구요?

    아나콘다(가장 쉬운 파이썬 + 패키지 설치 배포판)를 사용했기 때문입니다.
    그리고 쥬피터 노트북을 쓰지요. 자신에게 가장 맞는걸 쓰라고 말하고 싶지만 그런건 여러 가지 프로그램과 프로젝트를 경험하면서 찾는거고, 에디터를 설치하고 기본 세팅하고 그런 과정이 귀찮기도 해서, 처음에는 취향이라는 것따위 없으니 잘 차려진 밥상을 받아서 먹으라는 겁니다. 기본이 중요하다구요? 아니 잘 해준다는데 왜 그런 고생을 굳이... 

    https://www.anaconda.com/distribution/

     

    Anaconda Python/R Distribution - Free Download

    Anaconda Distribution is the world's most popular Python data science platform. Download the free version to access over 1500 data science packages and manage libraries and dependencies with Conda.

    www.anaconda.com

    2020년 2월 현재 2.7 아닙니다. 3.7로 잘 설치해 주세요.

    잊지 말고 아나콘다를 기본으로! 위의 옵션은 불필요합니다. 그러나  PATH란 단어는 매우 중요하므로 기억해둡시다. 여러분이 무엇인가 잘 설치해서 잘 쓰려면 PATH에 잘 넣어줘야하니까요. 아참! 저는 맥OS를 써본적이 없습니다. 리눅스나 유닉스를 써본적은 있지만 그 OS에서 다루실 정도라면 이 과정이 굳이 필요하신가요?

     

     

    잘 설치되었으면 네비게이터를 켜주세요. 나중에 쓰시다보면 네비게이터가 아주 불편하고 아나콘다(정확하게는 conda prompt가)도 불편하다는 느낌을 받으시는 날이 오실 수도 있겠지만 지금 당장은 아니겠죠. 

     

    네비게이터를 실행하시면 다음과 같은 옵션들이 우리를 기다리고 있습니다. 지금은 쥬피터 랩만 있어도 되겠네요. VSCode요? 안쓸 계획입니다. 나중에 프로그램이 잘 안돌아가면 그때 쓰자구요. 쥬피터 노트북이 기본이기는 한데 저는 랩이 좋습니다. 왠지 깔쌈하거든요. 

    우리는 언젠가 ML을 할 계획이기 때문에 우리의 쥬피터는 외부 서버에서 돌아갈겁니다. 친구를 꼬셔서 서버를 하나 사야겠습니다. 서울에서 타지도 않는 자동차를 사서 자동차 보험을 드는 것보다 운전자 보험만 드는 것처럼 아주 효율적인 방법입니다. 매일 분석에 쓰지도 않고 영화나 볼 ML용 컴퓨터를 사는 것보다 구글이나 아마존이 가지고 있는 컴퓨터를 이용하는게 더 좋잖아요? 우린 구글 클라우드나 아마존 서버를 이용하게 될겁니다. 다음주에는 서버에 대해서 잠시 얘기해봅시다.

    크롤링에 필요하냐구요? 몰라요. 그냥 있으면 좋지 않을까요? 

    ---본 문에 있는 미세한 오류들은 글쓴이의 학습 과정에서 수정되어 나갑니다. 따끔한 지적도 환영입니다 ---

    댓글

R/Python은 겉치레가 아니야