brunch

You can make anything
by writing

C.S.Lewis

by 아무나 Jul 17. 2019

Python - 2. 웹 크롤러 만들기(1)

 crawling

*Udacity - Intro to Computer Science를 따라가고 있습니다.

https://classroom.udacity.com/courses/cs101




1. 코딩 공부를 하다가 중간에 포기하게 되는 이유


파이썬을 시작하면 보통 지루한 사칙연산과 문법부터 시작한다. 

(아하, 왜 내가 파이썬을 싫어했는지 갑자기 깨달았다, 돌이켜보니 n 년 전 혼자 독학해보겠다고 파이썬 책을 사서 1장부터 실습해 본 적이 있다. 실패했고 그 뒤로 파이썬이 싫어졌었다. 그랬었다 참.)

그러다 보니 어디에 쓰이는지도 모르는 언어들을 무한히 반복하다가 지쳐나가떨어졌다. 마치 영어를 성문 영문법으로 시작하거나 핵심 영단어 1000제 따위로 시작하는 것과 같은 행동이다.


외국어를 쉽고 즐겁게 익히는 것 중 하나는 실제로 그 언어를 써봐야 하는 것이다. 이를테면 정말 외국인과 대화해 보거나 그 외국어가 쓰이는 나라를 여행하다 보면 어떻게 쓰이는지 이 언어가 얼마나 멋진 건지 저절로 체감하게 되니까. 코딩도 하나의 외국어다. 그러니까 이 언어에 더욱 흥미를 가지고 공부하려면 눈에 보이는 결과가 필요하다.




2. 웹 크롤러를 만들자 - 손에 잡히는 목적과 성취


다행히 유다시티는 첫 강의부터 그런 간단하지만 꽤 괜찮은 목적을 하나 제시해준다. 이 강의를 듣고 나면, 웹페이지에서 링크를 긁어모을 수 있는 웹 크롤러(web crawler)를 만들 수 있다. 괜찮지 않은가?


원하는 웹페이지를 하나 열고 링크를 싹 불러와 예쁘게 정리할 수 있는 프로그램을 내 손으로 직접 만드는 것이다. 좋다! 한 번 시작해보자.





3. 피할 수 없는 간단한 사칙연산들


파이썬에는 다른 컴퓨터 언어와 마찬가지로 간단한 사칙연산들을 할 수 있는 기능들이 있다. 이것은 우리가 현실에서 사용하는 것과 동일하게 +, - ,* / (덧셈, 뺄셈, 곱셈, 나누셈)으로 쓰인다. 간단하다. 식은 죽 먹기다. 이런 건 잽싸게 넘어가자.





4. 텍스트를 불러올 수 있다.  = text [0:]


우리는 한 웹페이지의 원하는 정보(이를테면 링크들)를 긁어오는 웹 크롤러를 만들 것이다. 자 우리의 목적을 항상 기억하자. 


정보 즉, 텍스트를 긁어올 것이니 우리는 텍스트를 불러오는 기능을 배워야 한다. 먼저 간단하게 텍스트를 정의해준다.


text = [1,2,3,4,5,6,7]


자 우리가 가진 텍스트는 1,2,3,4,5,6,7이다. 나중에는 저 자리에 원하는 웹페이지 내용을 넣게 될 것이다. 그리고 그 웹페이지에서 원하는 정보를 뽑아 올 것이다. 대표적으로 어디서부터 어디까지 텍스트를 뽑을 것인가가 중요하다. 컴퓨터는 말로 하면 못 알아듣고 숫자로 해야 알아듣는다. 그렇기 때문에 몇 번째부터 몇 번째 글자까지 뽑아 오라고 해줘야 한다. 그 방법은 다음과 같다. 


*컴퓨터는 숫자를 0부터 센다.


text[0:] = 텍스트 처음부터 끝까지(컴퓨터는 0부터 센다) = [1,2,3,4,5,6,7]

text[4:] = 텍스트 5번째 문자부터 끝까지 =[5,6,7]

text [4:6] = 텍스트 5번째 문자부터 7 전까지 [5,6]

text[:-1] = 뒤에서 첫 번째 [7]





5. 특정 단어가 어디(몇 번째)에 있는지 검색해 볼 수 있다. = text.find('나') 


찾는 방법은 다음과 같다. 우리는 특정 텍스트에서 foo라는 단어를 찾아볼 것이다.


text.find('foo')


text라는 파일에서 foo의 위치를 찾아준다 이를테면 3번째부터 시작한다면 4, 해당 택스트에 foo가 없다면 -1을 띄운다. 컴퓨터는 바보라 하나를 찾으면 찾았어! 하고 프로그램을 종료한다. 그런데 만약 foo가 여러 개라면 두 번째는 어떻게 찾을까.


text = 'foo is foo'


자 foo가 두 번 나오는 택스트다. 두 번째 foo가 몇 번째부터 시작하는지 알고 싶다면 일단 첫 번째 foo부터 찾는다.


text.find('foo')

>>>0


0을 띄웠다, 첫 글자부터 나온다는 소리다. 첫 번째 foo가 0번째에서 나오니. 0,1,2번째에 있는 요 세 글자가 첫 foo일 것이다. 그럼 그다음인 3번째부터 검색해보라고 하자.


text.find('foo',3) // text의 3번째 글자부터 'foo'를 찾아!


이렇게 하면 3번째 이후부터 검색하니 다음 foo를 찾아서 이야기해줌

>>> 8


자 한 페이지에 같은 단어가 이렇게 여러 개가 있어도 찾을 수 있는 방법을 알게 되었다.




6. 모든 것을 문자열(string)로 바꿔주는 str


우리는 문자가 편하지만 컴퓨터는 자꾸 숫자를 원한다. 컴퓨터가 가진 숫자 값들을 우리네들이 쓰는 문자열(string)로 바꾸고 싶다면 string의 첫 3글자 str을 이용해보자


str(<number>) => <string> // string의 정의는 이렇다.


str(89)='89'


이렇게 하면 '89'는 숫자처럼 보이지만 사실은 문자가 되어버렸기 때문에, 더 이상 숫자처럼 쓰이지 않는다.




7. 파이썬은 반올림 쟁이 


파이썬은 정수로 반올림을 하는 성질이 있다. 그러니까, 소수점이 있는 글자를 쓸 때 주의해야 한다. 

x=3.14 라고 하면 파이선은 x=3으로

x= 27.89 라고 하면 파이선은 x=28로 

자동으로 고쳐준다



자 여기까지는 안배우고 넘어갈 수 없는 파이썬의 상식, 알파벳 같은 부분이었다. 이제 이런 간단한 것들을 조합하여 내가 원하는 것을 만들어 낼 수 있는 프로시저 부분을 다음 포스팅에서 알아보자. 

매거진의 이전글 Python - 1. Udacity에서 파이썬을 배우다
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari