본문 바로가기

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 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() 안에.. 더보기
Web Crawler 004 - Accelerate Crawling by avoiding repetition - 중복을 회피하여 크롤링 속도 개선하기. 이전 시간까지는 기본적으로 어떤 웹 사이트를 크롤링하기 위해서 기초작업을 하였습니다. 프로젝트 생성, 링크를 저장할 파일 만들기, 파일 내용 삭제하기 등등. 이번에는 웹 크롤링을 할 때, 어떤 페이지를 타고 들어간다고 생각해보세요. 거기서 링크를 파일로 저장을 하였는데, 다른 곳에서도 같은 링크를 찾을 경우가 많을 것입니다. 이렇게 서로 중복되는 링크들을 크롤링을 하게 된다면, 시간이 꽤 걸릴 것입니다. 물론 몇 페이지가 안된다면, 체감할 정도는 아닐 것입니다. 그러나 크롤링 할 페이지가 1만 혹은 그 이상이 된다고 한다면, 상당한 시간을 중복된 링크를 크롤링하는데 소요하게 될 것입니다. 그래서 이번에는 이러한 중복 자체를 크롤링 하기 이전에 제거하는 코딩을 해 보려고 합니다. 파이썬에서는 여러개가 중복.. 더보기
Web Crawler 003 - 링크 찾기 및 삭제하기 (Adding and deleting links) 이번에는 기본 URL 에서 크롤링 하려고 찾은 링크들을 파일에 저장을 하려고 합니다. 멀티 프로세싱 혹은 멀티 쓰레딩 작업을 통해서, 하나의 과정은 링크를 찾아 파일에 넣어 저장하고, 다른 하나의 과정은 이렇게 찾은 링크들을 크롤링하게 하려고 합니다. 여기에서 찾은 링크를 파일에 저장을 할 시에 중복되는 링크도 존재하기 마련입니다. 그래서 그런것들의 중복 크롤링을 막기 위해, 애초에 크롤링할 파일에 해당 링크 URL 이 존재하면 추가적으로 append 하지 않게 하면 됩니다. 시작해 볼까요? 우선 이미 만들어 둔 파일에 링크를 더해가는 함수를 정의하겠습니다. ▼ append 모드로 해당 경로를 열어줍니다. 그리고 이것을 file 로 명명하겠습니다.▼ 파일을 열어 전달해 줄 데이터 값을 넣고 뒤에는 개행문.. 더보기
Web Crawler 002 - Creating Crawled files and Queue 이번 시간에는 지난 시간에 프로젝트(폴더)를 만드는 코딩에 이어, 웹사이트를 크롤링할 때 크롤링해야 할 웹페이지들의 URL 값을 가지고 있어야 하는데, 그렇게 하기 위해서 queue를 만들어 긁어 올 웹페이지 주소를 넣어 두려고 합니다. 이렇게 queue에 저장된 웹페이지 URL 을 가지고 다 긁어왔으면 해당 URL을 crawled 로 넘겨주어 더 이상 중복 크롤링하지 않게 하려고 합니다. 말보다는 코딩을 보는게 더 빠를거라 봅니다. 시작해 볼까요~? 히위~꼬우~! 지난 시간에 만든 부분에 아래와 같이 주석을 달아 주었습니다. 그리고 이번에 만들 부분에 주석도 함께 넣었습니다. 프로젝트 이름과, 기본 주소를 인자로 받는 파일을 만들어 줄 함수를 아래와 같이 정의하겠습니다. ▼ 기본 URL 을 가지고 어떤.. 더보기
Web Crawler 001 - Creating a New Project 요즈음 들어 귀찮이즘으로 만사를 내 팽개쳐두고 있는데, 블로그를 방문하는 많은 분들이 Python Web Crawling 에 질문을 많이 주시고, 또 방문 로그를 보아도 대부분 Web Crawling 으로 접속을 많이 하시는 듯 하여, 그 후속편을 살짝쿵~ 써보려고 자판을 두드려 보려고 합니다. 혹시 크롤링이 어떤 것인지 잘 모르시는 분은 아래 링크를 한번 보시면 도움이 되시리라 봅니다. [PYTHON 3] Tutorials 24. 웹 크롤러(like Google) 만들기 1 - How to build a web crawler [PYTHON 3] Tutorials 25. 웹 크롤러(like Google) 만들기 2 - How to build a web crawler 예전에 간략히 다룬 웹 크롤러는 블로그.. 더보기
[PYTHON 3] Tutorials 24. 웹 크롤러(like Google) 만들기 1 - How to build a web crawler 안녕하세요. 몇일동안 본업(?)에 매진하느라 소홀했던 튜토리얼을 다시 작성하려 합니다. 간혹 메일로 문의를 주시는 분이 계신데, (메일은 어떻게 아셨지 -_-a) 그냥 여기에 댓글을 다셔도 가능하면 답을 달아 드립니다. 긴급한(!) 일이 아니라면 메일은 삼가해 주셨으면 합니다^^;. 서두가 길었네요. 시작해 보겠습니다. 이번 시간에는 인터넷 상에 있는 자료(데이터: 글 + 이미지 + 파일 등등) 들을 파이썬을 이용해서 긁어오는 것을 하겠습니다. 우리가 잘 알고 있는 구글의 검색 시스템도 시시각각 인터넷상에 올라오는 글들을 크롤러(로봇)가 링크를 타고 타고해서 DB(데이터 베이스)에 잘 저장을 해 둔것을 사용자들이 찾는 시스템입니다. 여타 검색엔진과 다르게 구글이 크게 성장할 수 있었던 요인 중 하나는 사.. 더보기
[PYTHON 3] Tutorials 21. Download images from the web - 이미지(사진) 다운로드 하기 with 파이썬 안녕하세요. 이번 시간에는 앞시간에서 다룬 모듈을 사용해서 인터넷(웹) 상에서 이미지(사진)을 다운로드 해 보겠습니다. 그 까지것 직접 다운하면 되지 않냐? 할 수도 있겠으나, 우리는 호모 사피엔스( 생각하는 인간 ) 이지 않습니까! 번거로운 일은 컴퓨터가 알아서 하게 시키자는 취지입니다. 당연히 다운로드 해야할 양이 많아지면 귀차니즘이 발동 되니, 그 일을 컴퓨터에게 양보(?) 하는게 현명할 것입니다. 각설하고 시작하겠습니다. 앞에서 다룬 random 모듈을 불러들입니다. 파이썬 내장 모듈(함수)인 urllib를 불러들이는데, 그 중 request를 호출하였습니다. 우리가 웹브라우저(chrome, firefox, safari, internet explore, opera etc.)를 이용하여 인터넷을 서.. 더보기
[PYTHON] Python을 이용한 웹사이트 스캐너 만들기 - 7. 완결편 이번 시간에는 그동안 만들어 둔 함수들을 가지고 종합적으로 다루어 보도록 하겠습니다. 1편 소개편에서 말씀드린것 처럼 이것을 가지고 자신에게 보다 더 유용한 방향으로 수정, 편집해서 사용하시면 도움이 되리라 봅니다. 그럼 시작해보겠습니다. 1. 가장 처음 만들어 둔 main.py로 이동을 합니다. 여기에서 위와 같이 앞에서 만든 함수들을 불러옵니다. 2. ROOT_DIR 를 'sites' 라는 이름으로 지정을 해주었습니다. 향후 이 'sites' 폴더 밑에 각 사이트의 정보가 쌓이게 될 것입니다. 3. ROOT_DIR을 만들어 줄 것입니다. 아직 create_dir 함수를 정의하지 않았는데, 이는 아래에서 다룰 예정입니다. 4. 이제까지 만든 함수들을 종합적으로 다룰 함수 'gather_info'를 정의.. 더보기
[PYTHON] Python을 이용한 웹사이트 스캐너 만들기 - 5. robots.txt 이번 시간에는 robots.txt 에 대해 알아보려고 합니다. robots.txt 파일이 어떤 역할을 하냐면, 웹을 만들때 구글이나, 야후, 네이버, 다음과 같은 검색엔진에서 크롤링(사이트를 프로그램으로 자동 저장하는것)을 하는데 이때 민감한 페이지나 관리자 페이지 같은것은 크롤링 하지 못하게 텍스트 파일 형태로 작성해 둔 것입니다. 보다 자세한 사항은 Robots.txt 링크를 참조하시면 이해하실 수 있을것 입니다. 자 그럼 시작해 보겠습니다. 1. 우선 robots_txt.py 파일을 만들어 주고 import urllib.request 를 작성해 줍니다. urllib 와 request 는 웹과 관련된 파이썬 모듈입니다. 2. io 또한 임포트 해줍니다. 3. get_robots_txt 함수를 정의하고.. 더보기
[PYTHON] Python을 이용한 웹사이트 스캐너 만들기 - 2 최상위 레벨 도메인 이름 Top level of Domain 은 가령. 티스토리 같은경우 http://www.tistory.com 이렇게 URL 이 있다고 하면 여기에서는 history.com 이 부분이 top level of domain 에 해당한다. 즉, 프로토콜(http), WWW 은 제외단되는 말이다. 터미널창에서 보다 자세히 확인해 보자. 위와 같이 터미널에서 프로토콜, www을 함께 넣으면 whois 명령어가 인식을 못하니 제대로 넣으라고한다. 그럼 아래처럼 하면 어떻까? 티스토리의 정보가 쫘~~악 뜬다. 음..과금 담당자의 연락처라든지.... ㅎㅎ 자 그럼 이러한 정보를 smooth하게 한방(?)에 해결하기 위해 시작해보자. 1. domain_name.py 파일을 만들어 주고 from tld import get_tl.. 더보기
뽐뿌를 무너뜨렸다고 하는 SQL INJECTION 이란............ 미래창조과학부는 지난 9월 11일 발생한 '뽐뿌' 웹사이트 침해사고 관련 민관합동조사단의 조사결과를 발표했다. 결과는, 정말 안타깝게도 SQL 인젝션을 통한 개인정보 탈취 사건이었다. 이건 무슨, 범죄 수법의 박물관도 아니고 어째서 이런 고색창연한 수법에 번번이 당하는가. '뽐뿌'는 주로 스마트폰을 판매하는 쇼핑몰 정보를 공유하는 인터넷 커뮤니티 사이트다. 2005년에 개장해 10년 동안 스마트폰 대중화에 힘입어 엄청나게 성장해 현재 200만 회원수를 자랑하는 대형 커뮤니티. 그러던 지난 2015년 9월 11일, 해킹범으로 추정되는 자가 자유게시판에 타 회원의 개인정보를 공개하며 해킹 사실을 알렸고, 파장은 일파만파 퍼져 나가 급기야 미래창조과학부가 나서 민관합동조사단이 출동해 2015년 10월 20일,.. 더보기