본문 바로가기

Spider

Web Crawler 013 - Initializing first spider - 첫 스파이더 구동하기. 자, 이번 시간부터는 본격적으로 웹 사이트 크롤링을 해 보도록 하겠습니다. 그러기 위해서 이제까지 만들어 둔 함수 및 파일들을 한 곳에서 일괄적으로 다루어야 함으로 main.py 라는 파일을 만들도록 하겠습니다. 그리고는 아래와 같이 파일들도 불러오고 쓰레딩(threading) 관련 모듈도 불러 옵니다. 하나의 스파이더로 처리하는 것은 비효율적이겠죠? 몇 개는 링크들을 찾는 크롤러로 활동하게 하고, 또 다른 몇개의 스파이더들은 다른 스파이더들이 찾은 링크를 타고 들어가서 또 링크를 찾고 이렇게 서로 협업을 하게 하기 위함입니다. 개략적인 내용은 쓰레딩을 lookup 해보시면 아시리라 봅니다. ▼ 프로젝트 네임을 아래와 같이 정해주었습니다. 그냥 단순하게 홈페이지 이름을 기입하였습니다. 지금은 이렇게 써 .. 더보기
Web Crawler 009 - Crawling Pages You want to crawl - 크롤링 하고자 하는 페이지 링크들 크롤링하기. 오랜만에 글을 쓰는 것 같네요. 이번에는 지난 시간까지 만들어 둔 코드부분에 크롤링을 할 수 있게 하는 함수 crawl_page() 부분을 추가해 주도록 하겠습니다. 아래와 같이 함수를 정의해 주겠습니다. thread_name, page_url 을 인자로 받도록 하겠습니다.▼만약에 전달 받은 page_url 값이 기존에 crawled 되어 있는 리스트에 존재하고 있다면, 중복해서 또 크롤링 해 줄 필요가 없겠죠? 그래서 없는 경우에만 크롤링할 수 있도록 조건을 달았습니다.▼크롤링된 값에 없는 url 이면, 이제부터는 해당 url 을 크롤링 할 것이라고 사용자에게 알려주는 문구를 보여주게 하고 있습니다. 물론 크롤링 할 page_url 이 어떤 것인지도 함께 표기하도록 하였습니다. ▼그리고 waiting .. 더보기
Web Crawler 008 - Making the Spider boot up. - 스파이더 구동하기. 지난 시간에는 스파이더 클래스를 초기화 하는 과정까지 알아보았다. 이번에는 이 스파이더 클래스를 조금 더 풍성하게 만들어 보자. 우선 이 스파이더 클래스가 객체화 될 때, self.boot(), self(crawl_page) 이렇게 2개의 함수를 호출하는 부분을 초기화하는데 넣어주었었다. 그래서 이번에는 이 2개의 함수 중 boot() 함수를 정의해 보려고 합니다. 우선 아래 이미지를 먼저 보면서 살펴보자면, boot(self) 를 정의하고 create_project_dir(Spider.project_name) 이라고 하는 부분을 삽입해 주었습니다. 이는 클래스가 객체화될때, 이전에 만들어 둔 create_project_dir() 함수를 이용해서 폴더를 먼저 만들어 주게 하려고 했는데, 여기서 이렇게 사.. 더보기
Web Crawler 007 - Initialize the Spider information - 스파이더 초기화. 이제 스파이더에서 사용될 변수(variables)들을 선언해주었으니, 다음으로는 스파이더 클래스를 초기화 하도록 하겠습니다. 우선 스파이더 클래스 초기화를 위해 정의를 해주어야겠죠? 아래와 같이 선언을 해주고, 사용할 인자는 project_name, base_url, domain_name 을 넣어 주었습니다. 프로젝트 네임은 어느 사이트를 크롤링할지 초기에 정해줄 이름입니다. 그리고 해당 사이트의 기본 주소인 base_url 을 넣어 주었습니다. 그리고 중요한 것 중 하나인 domain_name 을 넣어주었는데, 만약 도메인 네임을 특정 웹 사이트내로 한정하지 않는다면, 인터넷 전체를 링크 타고타고해서 크롤링을 하게 됩니다. 정말 이러면 구글의 크롤러처럼 전세계 모든 웹사이트를 서치할 수 있게 되어 버릴.. 더보기
Web Crawler 006 - Creating the spider - 스파이더 만들기. ## 시작하기에 앞서, Paek 님이 지적해 주신 사항입니다. 이전 시간까지는 main.py 로 작성을 하였는데, 파일명을 general.py 로 바꾸었습니다. 왜냐하면 추후에 만들어둔 모든 함수, 파일을 한곳에서 처리하기 위해 별도로 main.py 를 만들기 위함입니다. 지적해주신 Peak님 감사합니다. ## 이제 기본으로 필요한 도구들(함수)을 만둘어 보았으니, 다음으로 크롤링을 위한 스파이더를 만들어 보도록 하겠습니다. 파이썬에서 말하는 스파이더는 마치 거미가 거미줄(web)을 여기저기 돌아 다닌다는 의미로 네이밍이 되었습니다. 그와 마찬가지로 코딩을 통하여 웹상에서 링크를 타고 타고 돌아다니게 하기 위해 스파이더를 만들어 주도록 하겠습니다. 우선 필요한 모듈을 불러오도록 하겠습니다. 아래와 같이 .. 더보기
Web Crawler 005 - Parsing HTML and Find Links - HTML 파싱 및 링크 찾기. 이번 시간에는 HTML 을 파싱하고 웹페이지에서 링크들을 찾는 것 까지 다루어 보도록 하겠습니다. 우선 HTML을 파싱하기 위해 관련 모듈을 불러오겠습니다. ▼ urllib 에서 parse 도 불러오겠습니다. ▼ 링크를 찾는 클래스를 정의해 주도록 하겠습니다. ▼ 초기화를 아래와 같이 하고 HTMLParser를 종속하게 하였습니다. ▼ 웹페이지에서 tag 를 다루는 함수를 정의하고 찾게 될 tag를 확인할 용도로 print() 하도록 하였습니다. ▼ 에러는 아래와 같이 우선 정의해 주었습니다.▼ 클래스 기초 정의는 끝났습니다. 그럼 이게 어떤 의미인지 알아보도록 하겠습니다. 아래 코드를 보시면 finder 는 LinkFinder() 로부터 생성하였습니다. 그리고 웹페이지에서 찾을 태그가 feed() 안에.. 더보기
[PYTHON 3] Tutorials 24. 웹 크롤러(like Google) 만들기 1 - How to build a web crawler 안녕하세요. 몇일동안 본업(?)에 매진하느라 소홀했던 튜토리얼을 다시 작성하려 합니다. 간혹 메일로 문의를 주시는 분이 계신데, (메일은 어떻게 아셨지 -_-a) 그냥 여기에 댓글을 다셔도 가능하면 답을 달아 드립니다. 긴급한(!) 일이 아니라면 메일은 삼가해 주셨으면 합니다^^;. 서두가 길었네요. 시작해 보겠습니다. 이번 시간에는 인터넷 상에 있는 자료(데이터: 글 + 이미지 + 파일 등등) 들을 파이썬을 이용해서 긁어오는 것을 하겠습니다. 우리가 잘 알고 있는 구글의 검색 시스템도 시시각각 인터넷상에 올라오는 글들을 크롤러(로봇)가 링크를 타고 타고해서 DB(데이터 베이스)에 잘 저장을 해 둔것을 사용자들이 찾는 시스템입니다. 여타 검색엔진과 다르게 구글이 크게 성장할 수 있었던 요인 중 하나는 사.. 더보기