본문 바로가기

web

실시간 내 주가를 알려주는 Python Code 이번에는 실시간 주식 데이터를 가져와서 시시각각 동향을 출력하게 하려고 한다. 그 후에는 내가 보유한 종목의 주가 흐름을 계속 추적하고, 더 나아가 컴퓨터가 보유종목의 주가를 계속 오디오로 알려주게 하는데까지 알아보려고 한다. 포털사이트 다음의 증권에 올라오는 종목 시세를 참고하였다. 옛날 같으면 포털사이트에서 제공하는 주가는 20분 지연 시세를 제공하여 효용성이 많이 떨어졌던게 사실이다. 그러나 이제는 실시간 시세를 제공하고 있으므로, 증권사에서 제공하는 데이터 못지않게 빠르고 정확하다. 그래서 다음 사이트의 데이터를 가지고 와서 뚝딱뚝딱 기름칠해서 내가 필요로 하는 정보만을 추출하였다. 아래는 그 코드이다. import urllib.request, time, os, re, csv, sys def fe.. 더보기
Web Crawler 011 - Adding Links to Queue - 링크를 웨이팅 리스트에 추가하기. 이번 시간에는 이전 시간에 이어서 웹페이지에서 찾아낸 링크들을 waiting list 에 추가하는 함수를 만들어 보도록 하겠습니다. 어떤 특정 사이트에 있는 전체 웹페이지들을 크롤링하기 위해서 해당 사이트의 홈페이지를 들어가고 거기서 링크를 타고 타고 가서, 해당 사이트의 모든 링크들을 찾을 것입니다. 이렇게 찾아낸 링크 값들을 waiting list 에 넣게 하는 스파이더와 waiting list 에 저장이 된 링크들을 각각 따로 크롤링 할 스파이더들을 만들어야 합니다. 이와 같은 일련의 과정중 전자인 찾은 링크들을 waiting list ( queue) 에 넣어주기 위한 함수를 만들것 입니다. 우선 아래와 같이 찾은 링크를 인자로 받는 함수를 선언해 줍니다. ▼만약 전달 받은 링크의 url 값이 qu.. 더보기
Web Crawler 010 - Gather_Links 함수 만들기 이번 시간에는 앞 시간에서 코딩한 부분중 정의하지 못한 gather_links() 부분을 만들어 주도록 하겠습니다. 웹페이지의 url 값을 넣어주면 해당 페이지에서 링크를 포함하고 있는 html 값을 찾게 되는데, 여기에서 링크 값만을 추출하게 하여 리스트에 넣어 주어야 그 값으로 링크들의 웹페이지를 다시 크롤링 할 수 있게 됩니다. 우선, 아래와 같이 정의를 해 주었습니다. ▼ 여기에서 하나의 문제가 있는데, 파이썬에서 urlopen 모듈을 사용해서 웹페이지를 연결하면, 인간이 읽을 수 있는 형태의 문자를 받아 오는게 아니라, 컴퓨터(기계)가 이해할 수 있는 바이트(bytes: 0 or 1) 단위로 데이터를 가지고 옵니다. 질문을 주시는 많은 분들이 파이썬으로 크롤링할 때, 내가 지금 무엇을 크롤링하는.. 더보기
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 004 - Accelerate Crawling by avoiding repetition - 중복을 회피하여 크롤링 속도 개선하기. 이전 시간까지는 기본적으로 어떤 웹 사이트를 크롤링하기 위해서 기초작업을 하였습니다. 프로젝트 생성, 링크를 저장할 파일 만들기, 파일 내용 삭제하기 등등. 이번에는 웹 크롤링을 할 때, 어떤 페이지를 타고 들어간다고 생각해보세요. 거기서 링크를 파일로 저장을 하였는데, 다른 곳에서도 같은 링크를 찾을 경우가 많을 것입니다. 이렇게 서로 중복되는 링크들을 크롤링을 하게 된다면, 시간이 꽤 걸릴 것입니다. 물론 몇 페이지가 안된다면, 체감할 정도는 아닐 것입니다. 그러나 크롤링 할 페이지가 1만 혹은 그 이상이 된다고 한다면, 상당한 시간을 중복된 링크를 크롤링하는데 소요하게 될 것입니다. 그래서 이번에는 이러한 중복 자체를 크롤링 하기 이전에 제거하는 코딩을 해 보려고 합니다. 파이썬에서는 여러개가 중복.. 더보기
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 33. Make words counters - 2 ( words counter 만들기) 이전까지는 웹페이지에서 특정 부분을 크롤링하여 단어들을 추출하였습니다. 그러나 여기에는 특수문자 등 원하지 않는 부분도 포함되어 있었습니다. 이번 시간에는 앞에서 얻은 자료에서 원치않는 부분을 제거하는 코딩을 하도록 하겠습니다. 앞 장에서 다룬 코드는 아래와 같습니다.▼ 상기 코드에서 우선 확인을 위해 삽입한 print(each_word)를 삭제하도록 하겠습니다.▼ 또 다른 함수를 정의할 건데 start(url) 함수 내에서 호출 하도록 할 예정입니다. 그래서 아래 코드에서 처럼 clean_up_list(word_list) 문구를 삽입하였습니다.▼ clean_up_list(word_list) 함수를 정의하겠습니다.▼ start(url) 함수와 마찬가지로 원하지 않는 데이터를 뺸 자료를 담을 그릇(리스트).. 더보기
IBM, Swift sandbox website 공개. Swift 코드를 웹 브라우저에서 작성하다. https://developer.ibm.com/swift/2015/12/03/introducing-the-ibm-swift-sandbox/ 3일 전 애플에서 iOS, Mac OS X 애플리케이션을 제작할 수 있는 프로그래밍 언어인 Swift 를 오픈소스로 전세계에 공개하였습니다. 이를 통해 개인은 물론 기업들도 자유롭게 standard library functions and objects 에 접근할 수 있게 되었고, 서버에도 Swift 를 설치하여 보다 다양한 저작활동을 하는 것이 가능해졌습니다. 이런 애플의 오픈소스 전환 소식이 전해진 이후, 금일 IBM에서 이에 화답하듯이 Swift 코드를 웹 브라우저 상에서 작성하고 컴파일 할 수 있는 IBM Swift .. 더보기
[PYTHON 3] Tutorials 25. 웹 크롤러(like Google) 만들기 2 - How to build a web crawler 안녕하세요. 지난 시간에 이어 웹 크롤러 만들기 2번째 시간입니다. 지난 시간에는 BeautifulSoup 를 이용해서 특정 사이트의 글 목록 리스트에서 URL, 제목을 파이썬으로 가지고 오는 방법에 대해 알아 보았습니다. 이번에는 그 연장선상으로 URL, 제목에 해당하는 글의 본문 내용을 가지고 오게 만들어 보겠습니다. 시작하겠습니다. 앞 시간의 코드에서 각 글의 본문 내용을 확인할 수 있도록 하는 함수 get_single_article(item_url) 을 만들어 주었습니다. 물론, 함수명은 원하는 이름으로 정하여도 무방합니다.▼ 앞서 만든 코드에서 지금부터 만들어 줄 함수가 들어가는 위치에서 호출할 수 있도록 함수 호출 부분을 삽입합니다. page += 1 위에 함수 호출 코드를 넣어 주었습니다. .. 더보기
[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을 이용한 웹사이트 스캐너 만들기 - 4. Nmap Port Scan 이제 타겟 서버의 아이피 주소까지 얻었습니다. 이제부터는 nmap을 사용하여 타겟 서버의 포트 개방 여부를 확인하고, 어떤 프로세서가 러닝되고 있는지 확인하려고 합니다. 그러기 위해서는 'NMAP' 이 설치가 되어 있어야 합니다. 맥을 사용하시는 분들이라면 homebrew 를 설치하신 이후에 brew install nmap 을 하시면 설치하실수 있습니다. 물론 리눅스를 설치하고 계신분은 바로 인스톨 하시면 됩니다. NMAP 으로 확인하려고 하는 결과를 먼저보여 드리면 아래 그림과 같습니다. 앞에서 얻은 tistory.com 의 아이피 주소인 180.70.93.117 을 넣어보니 http 프로토콜의 포트번호인 80번과, https의 포트번호인 443만 개방되어 있는것을 확인하실 수 있습니다. 자 그럼 본격.. 더보기
[PYTHON] Python을 이용한 웹사이트 스캐너 만들기 - 3. IP Address 2편에서 tld(Top Level Domain)을 얻었습니다. 이제는 스캐닝을 할 웹사이트의 ip address 를 얻을 필요가 있습니다. 위와 같이 티스토리의 아이피는 180.70.93.117 이네요. 그렇지만 우리가 원하는 정보는 이 IPv4에 해당하는 숫자만 필요합니다. 즉, 프로그램적으로 앞부분의 'history.com has address ' 이 부분을 날려버리면 됩니다. 혹은 뒷 부부만 선택적으로 받아들이게 하면 됩니다. 1. 아이피를 얻기위해 위와같이 파일을 만들어 줍니다. 2. 위의 터미널에서 보여진대로 특정 정보만 취사선택 하기위해 이번에도 os 를 임포트 해줍니다. 3. 아이피 정보를 얻기 위한 함수를 선언. 4. 위의 터미널에서의 명령을 파이썬으로 프로그램적으로 구동 시키기 위한 방법.. 더보기
[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.. 더보기
[PYTHON] Python을 이용한 웹사이트 스캐너 만들기 - 1. 소개 파이썬을 이용해 간략한 웹사이트 스캐너를 만드는 과정을 소개하려 한다. 프로그래밍을 공부하는 분들에게 조금이나마 도움이 되었으면 하는 바람으로 이 글을 작성합니다. 금일 기준(2015년 10월 30일) 정말 개략적인 소개입니다. 여기에 아이디어를 덧붙여 본인에게 맞는 프로그램을 작성해 보시면 유용하리라 생각합니다. 자 그럼 시작해 보겠습니다. 우선. 이글은 파이썬이 어떤것이며, 본인의 컴퓨터에 깔려 있다는 전제하에 진행됩니다. 추후 기초적인 것부터 소개하는 글을 따로 올리겠지만, 현 시점에서는 건너띄고 진행하겠습니다. 또한, 베이스 OS 는 리눅스이면 금상첨화일 것입니다. 저는 맥에서 'Homebrew'를 이용해 리눅스 명령어를 설치해 사용하고 있습니다. 그리고 아래 IDE 툴은 Pycharm 이라고 불.. 더보기
[Ruby] Node.js를 이용하여 웹 사이트 데이터 가져오기(web scraping, Phantomjs) 서론우리는 흔히 데이터를 데이터베이스에서 가져온다고 생각한다. 실제 웹사이트를 구축할 때 웹 페이지를 생성하기 위해서 웹 프로그램이 데이터베이스에서 데이터를 조회해서 웹 페이지를 만드는데 요즘은 API 서비스들이 많기 때문에 데이터를 가져오는 것이 데이터베이스에만 국한되지 않고 API를 통해서 가져오기도 한다. 하지만 API를 지원하지 않는 서비스에서 데이터를 가져오는 방법은 없을까? 고민하게 되는 경우도 있다. 예를 들어서, 석사때 학교 기숙사에 지내면서 기숙사 게시판의 공지를 매번 사이트에 들어가서 확인하는 것이 불편하고 또 중요한 공지사항이 있음에도 불구하고 시간이 없어서 웹 사이트를 방문하지 않아서 공지를 놓치는 경우가 많았었다. 그래서 ruby로 웹 사이트의 HTML 코드를 가져와서 분석해서 새.. 더보기