안녕하세요. 이번 시간에는 크롤러가 어느 웹사이트를 크롤링 할지를 정해주는 도메인 네임에 대해 알아보고자 합니다. 인터넷은 참으로 광범위한 공간이죠. 만약 이러한 공간을 특별한 조건없이 크롤링하게 한다고 하면 어떻게 될까요? 아마도 내 컴퓨터의 모든 자원은 전세계 인터넷을 뒤지고 다니느라 바빠질 것입니다. 이러한 무한 루프를 방지하기 위해서는 특정한 조건을 주어 이 범위를 만족하는 사이트들만 크롤링 하라고 명령을 내려야 할 것입니다. 그래서 필요한 것이 도메인 네임입니다.
제 블로그를 기준으로 얘기를 하자면, 여기의 주소는 https://creativeworks.tistory.com 입니다. 여기에서 도메인 네임은 tistory.com 이 됩니다. 만약 tistory.com 을 제가 혼자 다 사용하고 있다면, 전체를 크롤링하는데 큰 제약이 없을 것입니다. 그러나 아시다시피 수 많은 사용자들이 각자의 아이디와 tistory.com 을 조합한 id.tistory.com 의 형태로 블로그를 운영중입니다. 그래서 전체 티스토리 블로그를 크롤링 하지 않기 위해서 도메인 네임에 자신의 블로그 주소만 크롤링하게 하는 조건을 하나 더 붙여줄 필요가 생깁니다.
언급하였듯이, 자신의 개인 웹사이트라면 도메인 네임만 규정해도 충분할 것입니다. 도메인 네임을 제한하지 않는다면...... 전세계를 유랑하겠죠? ^^;
글보다 코드로 얘기를 하겠습니다.
아래를 보시면 새로운 파이썬 파일을 만들어 주었습니다. domain.py 라고 하는 파일을 만들고 관련 모듈을 불러왔습니다. ▼
도메인 네임을 알아보려고 하는데 필요한 함수를 정의합니다. 받는 인자는 url 주소입니다. ▼
get_sub_domain_name 이라는 함수를 이용해서 콤마(.) 단위로 스플릿(나누기)를 하여 그 결과를 results 에 넣게 하였습니다. 이 get_sub_domain_name() 함수는 아래에서 다루어 줄 예정입니다. ▼
위에서 찾은 결과에서 결과 값에서 콤마를 기준으로 오른쪽 첫 번째와 두번째를 리턴하게 합니다. 예를 들자면, 'https://mail.google.com' 이라는 url 을 전달하면 google.com 값을 리턴하게 만드는 것입니다.▼
만약 오류가 발생한다면 '' 을 리턴하게 합니다. ▼
두 번째 함수는 도메인을 공유하는 블로그일 경우입니다. 여기 이 블로그와 같은 곳은 이 블로그 도메인 이름 함수를 사용하면 되겠죠. 방법은 위와 같습니다. ▼
한가지 다른 점은, 오른쪽 첫 번째, 두 번째 뿐만 아니라 세번째 값까지 리턴하게 하는 것입니다. 블로그 주소는 ID + 도메인 네임이므로, ID 값까지 포함하게 하기 위함입니다. 'https://creativeworks.tistory.com' 이라고 한다면 creativeworks.tistory.com 까지 리턴을 하게 합니다. ▼
오류가 발생할 시에도 위와 같이 리턴값을 정해줍니다.▼
세 번째 함수는 get_sub_domain_name() 함수를 정의해 주도록 하겠습니다. 전달 인자 역시 url 주소입니다. ▼
try , except 을 사용해서 urlparse() 내장 메소드를 사용하고, network location 을 이용해서 그 값을 리턴하게 합니다. ▼
역시 오류가 발생하면 블랭크를 리턴하게 합니다. ▼
이번에는 개인 블로그를 대상으로 테스트를 진행해 보겠습니다. 아래와 같이 본 블로그 주소를 넣으니 블로그 아이디와 함께 도메인 네임이 표기되고 있네요. 테스트를 완료하였으니 프린트문을 삭제하시면 됩니다. ▼
위의 과정은 파이썬으로 크롤러를 만들었을 때, 크롤링 할 사이트의 범주를 정할 때 유용하게 사용할 수 있는 부분입니다. 보다 효율적인 코딩을 위해서 꼭 필요한 부분이라 할 수 있습니다.
'Programming > Python Web Crawler for intermediate learners' 카테고리의 다른 글
Web Crawler 013 - Initializing first spider - 첫 스파이더 구동하기. (18) | 2016.04.06 |
---|---|
Web Crawler 011 - Adding Links to Queue - 링크를 웨이팅 리스트에 추가하기. (0) | 2016.04.04 |
Web Crawler 010 - Gather_Links 함수 만들기 (2) | 2016.04.04 |
Web Crawler 009 - Crawling Pages You want to crawl - 크롤링 하고자 하는 페이지 링크들 크롤링하기. (1) | 2016.04.04 |
Web Crawler 008 - Making the Spider boot up. - 스파이더 구동하기. (0) | 2016.03.25 |