본문 바로가기

Programming/Python Web Crawler for intermediate learners

Web Crawler 013 - Initializing first spider - 첫 스파이더 구동하기.



자, 이번 시간부터는 본격적으로 웹 사이트 크롤링을 해 보도록 하겠습니다. 그러기 위해서 이제까지 만들어 둔 함수 및 파일들을 한 곳에서 일괄적으로 다루어야 함으로 main.py 라는 파일을 만들도록 하겠습니다.


그리고는 아래와 같이 파일들도 불러오고 쓰레딩(threading) 관련 모듈도 불러 옵니다. 하나의 스파이더로 처리하는 것은 비효율적이겠죠? 몇 개는 링크들을 찾는 크롤러로 활동하게 하고, 또 다른 몇개의 스파이더들은 다른 스파이더들이 찾은 링크를 타고 들어가서 또 링크를 찾고 이렇게 서로 협업을 하게 하기 위함입니다. 개략적인 내용은 쓰레딩을 lookup 해보시면 아시리라 봅니다. ▼

프로젝트 네임을 아래와 같이 정해주었습니다. 그냥 단순하게 홈페이지 이름을 기입하였습니다. 지금은 이렇게 써 넣었지만, 자동으로 구현할 수도 있을 것이고, GUI 형태로 사용자가 특정 웹사이드를 크롤링 할 때마다 기입하게 할 수도 있을 것입니다. 그러나 이는 추후 해보시기 바랍니다. ▼

크롤링 할 홈페이지의 주소를 넣어줍니다. ▼

앞 시간에서 만든 2개의 도메인 네임 관련 함수가 았었는데, 여기는 개인 블로그 이므로 아래와 같이 get_blog_domain(url) 을 사용하면 됩니다. 주석에도 기입하였지만, 만약 본인의 고유 도메인을 사용하고 있다면 get_domain_nain(url) 을 사용하면 됩니다. ▼

이제 프로젝트 폴더 밑에 queue.txt 파일을 만들기 위해 아래와 같이 적습니다. 크롤한 링크들이 저장될 파일입니다. ▼

queue.txt 에 수집된 링크들을 다른 스파이더들이 읽어 해당 링크를 크롤링했다면 이미 작업했으니 하지 말라는 의미로, crawled.txt 에 이미 크롤링 한 주소를 넣게 합니다. 그리고 프로젝트 네임폴더 아래에 crawled.txt 파일의 형태로 저장하게 합니다. ▼

몇 개의 스파이더(thread) 를 사용할 지를 정해주는 부분입니다. 컴퓨터 자원이 충분하다면 많이 잡아도 되지만, 그렇지 않다면 그 수를 적게하여야 무리가 가지 않을 것입니다. 저는 그냥 일단 4개정도만 잡았습니다.▼

왼쪽의 queue 와 오른쪽의 Queue 가 다른데, 오른쪽은 쓰레딩을 사용할 때 사용할 Queue() 메소드입니다. 이름이 같아서 혼동할 수 있으니 주의하셔야 합니다. ▼

아래와 같이 첫 스파이더가 구동될 때 필요한 인자들을 넣어 주었습니다. 프로젝트 네임, 홈페이지 주소, 도메인 주소를 가지고 Spider() 를 구동하면 관련 폴더가 생기고 첫 홈페이지에서 찾을 수 있는 모든 링크를 찾게 됩니다. 일종의 스타트라인을 치는 거라고 보면 됩니다. 그럼 여기서 찾은 링크들을 이용해서 해당 도메인 내의 모든 링크값들을 찾게 되는 것입니다. ▼

여기까지만 하고 한 번 테스트 삼아 실행을 해 보았습니다. ▼

첫 페이지에 있는 모든 링크를 찾았습니다. 그리고 그 값을 왼쪽에 보이는 폴더를 만들어 그 안에 각각의 파일에 저장을 하였습니다. ▼

파일을 들여다 보니 처음으로 시작할 주소가 들어 있네요. 여기 값을 가지고, 저 주소에 있는 모든 링크를 찾기 시작하는 것입니다. ▼

찾은 링크값들은 queue.txt 에 저장이 되어 있네요. 모든 링크값들이 여기에 저장이 되는 것입니다. 그럼 여기에 있는 링크값들을 다시 더 깊숙히 크롤링하여 또 다른 링크를 찾게 되는 것입니다. ▼

첫페이지에서 찾은 링크가 제법 되네요.▼

여기까지 입니다. 우선은 제 블로그에 있는 모든 링크를 타고 타고 해서, 전부 링크들을 찾게 되겠죠. 일단은 여기까지만 다룰 예정입니다. 그 이후에 찾은 링크를 이용해서 각각의 페이지에 있는 내용을 크롤링하는 것은 할지 말지 생각해 보겠습니다. 뭐.. 굳이 할 필요성이 없어서...;;;