목록PYTHON (27)
Dev log
파이썬에서의 클래스 생성자와 소멸자에 관해 알아보겠습니다. 생성자는 이름에서 알 수 있듯이 객체가 만들어질 때 호출되는 함수를 생성자라고 이야기 하며, 객체가 사라질 때 호출되는 함수를 소멸자라고 이야기합니다. init 위에서 생성자가 무엇인지 이야기를 했는데, 생성자는 왜 사용하는 걸까요? class MyClass: def __init__(self): self.var = '안녕하세요!' print('MyClass 인스턴스 객체가 생성되었습니다') obj = MyClass() # ‘MyClass 인스턴스 객체가 생성되었습니다’가 출력됨 print(obj.var) # ‘안녕하세요’가 출력됨 생성자는 객체를 초기화 할 때, 자주 사용합니다. del def __init__으로 객체를 생성했으므로 이번엔 객체를..
파이썬에서 특정 부분만 걸러 내고 싶을때, 사용되는 filter 함수입니다. 이름에서부터 느껴지듯 뭔가 걸러내기 위해 사용되는 함수라는 것을 알 수 있습니다. filter 기본적으로 내장되어 있는 모듈이기 때문에 따로 불러 올 필요는 없습니다. filter를 이용하면 소수를 걸러낼 수 있다고 했는데, 소수는 두개의 수로 못나눈 것을 이야기합니다. 대표적으로 7이 소수가 될 수 있습니다. 소수의 반대는 합성수라고 이야기 할 수 있는데, 합성수의 예로는 6이 있습니다. (2*3=6) def getPrime(x): for i in range(2, x-1): if x%i == 0: break else: return x listdata = [117, 119, 1113, 11113, 11119] ret = filt..
에외처리에도 여러가지 방법이 있는데, 이번에는 실행한 코드가 정상적으로 작동을 하든, 에러가 나던 무조건 실행되는 블록을 추가해보는 것을 해보겠습니다. 예외처리 (try ~ except ~ finally) try ~ except ~ finally문법은 아래와 같습니다. try ~ except과 별반 다를 것이 없고 그냥 한줄만 추가하면 되는거라 복잡하지는 않습니다. def my_power(): try: x = input('분자 숫자를 입력하세요 ~ ') y = input('분모 숫자를 입력하세요 ~ ') z = int(x) / int(y) except: print(' 0 으로 나눌 수 없습니다. ') finally: print('저는 무조건 실행할꺼라구요! 아.시.겠.어.요.?') print(my_pow..
파이썬에서 예외처리는 프로그램에서 에러가 발생 했을 때, 에러를 핸들링하는 기능을 이야기합니다. 예외처리 (try ~ except ~ else) 에러가 나면 보통 프로그램이 종료되기 때문에 큰 문제가 발생하게 됩니다. 예를들면 API를 구현했는데, 어떠한 이유로 에러가 나서 종료가 된다면 큰 문제가 될 수 밖에 없습니다. 그래서 보통 예외처리를 하게 되는데, 예외처리를 하게 된다면 에러가 나는 부분을 제외하고 나머지 프로그램은 정상 작동하기 때문에 문제가 발생되지 않습니다. def my_power(): x =input(" 분자 숫자를 입력하세요 " ) y =input(" 분모 숫자를 입력하세요 ") return int(x)/int(y) print(my_power()) 위와 같이 코드를 작성하고 에러를 출..
강화학습에서의 자주 거론되는 min/max 알고리즘에 대해 자세히 알아보겠습니다. min/max 알고리즘 min/max 알고리즘에서 max는 나를 뜻하는 것이고 min는 적을 이야기 합니다. 탐색전에 트리는 맨 아래 단계만 의미있는 수를 가지며, 탐색이 진행되면서 하위에서 상위로 값을 찾아 올라가게 되는데 이때 상위 노드에서 선택되는 값은 현 단계가 max이면 아래에서 최대값을, 현 단계에서 min이면 아래에서 최소값을 선택하게 됩니다. 즉, 나(컴퓨터)는 가장 큰 수를 취해야 하며, 상대(사람)은 가장 작은 수를 취해야 합니다. 양수(+ ∞)는 내가 이긴 것(컴퓨터)이고, 음수(- ∞)는 내가 진 것(사람)을 이야기합니다. 강화학습으로 Tic Tac Toe을 학습한다고 했을 때, 평가 함수 e와 상태 ..
오늘은 몬테카를로 알고리즘으로 파이썬 원주율을 구해보려고 합니다. 원주율 가로 길이가 2인 사각형에 내접하는 반지름 길이가 1인 원의 넓이를 몬테카를로 알고리즘으로 구해보겠습니다. 원에 무작위로 점을 찍어서 원 안에 들어가는 점의 개수와 사각형 안에 찍히는 전체 점의 개수를 비교합니다. 예를 들면 10개의 점을 무작위로 찍었을 때, 원 안에 찍히는 점의 개수가 7개 라면? 이런식으로 비교하는 거죠. 그래서 100개의 점을 무작위로 찍었을 때, 1000, 10000, ... 1억개의 점을 무작위로 찍었을 때, 찍는 점의 수가 많아 질수록 실제 원의 넓이에 가까워 집니다. 만약에 100개의 점을 찍었을 때, 이 중 80개의 점이 부채꼴의 내부에 찍혔다면, 아래와 같이 계산 할 수 있습니다. 코드로 구현하면 ..
저번 포스팅에서는 신문사를 크롤링하는 것을 해봤는데, 이번에는 네이버에서 이미지를 크롤링하는 것을 해볼까합니다. 이미지 크롤링 이미지 크롤링할 때 필요한 모듈은 아래와 같습니다. import urllib.request from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.common.keys import Keys # 웹 애플리케이션의 테스트를 자동화하기 위한 프레임 워크 # 손으로 마우스 클릭해서 데이터를 검색하고 스크롤링 할 수 있다 import time # 중간마다 sleep를 걸어야 한다. 그리고 저번 신문사 크롤링과는 다르게 이번에 chromedriver가 필요하기 때문에 다운해야합니다. 여기에서 O..
저번에 중앙일보와 한계례 신문사를 저번에 웹 크롤링하는 것을 했습니다. 두 번 정도 해보니까 이제 슬슬 감이 잡히지 않던가요? 링크랑 기사 내용 태그만 확인하면 크롤링되는 것을 확인했으니, 이번엔 그냥 전체 신문사에서 선택해서 크롤링하는 스크립트를 짜 볼까 합니다. 웹 크롤링 함수 구현 우선 자신의 컴퓨터 user-agent를 확인해야합니다. 여기를 눌러 자신의 agent를 꼭 확인합니다. 우리는 메인 함수와 서브 함수 두가지를 우선 만들어야 합니다. 메인 함수는 크롤링한 text를 리턴하는 함수를 만들고, 서브 함수는 두 가지 정도를 만들려고 합니다. 서브 함수는 기사 상세 url과 기사 text를 리스트를 append 시키는 함수, 그리고 url를 입력받아 html로 변환하고 beautiful sou..
저번에 H사 신문사를 웹 크롤링해봤습니다. 신문사마다 주소가 다르기 때문에 이번에는 J사 주소를 가지고 와서 저번이랑 똑같이 웹 크롤링을 해보도록 하겠습니다. 웹 크롤링 우선 중앙일보 신문사 링크를 가져와 보겠습니다. 저번과 마찬가지로 메모장에 복붙하면 암호화 된 주소 를 확인할 수있습니다. import urllib.request from bs4 import BeautifulSoup search_text = input("검색어를 입력하세요 : ").encode("utf-8") search_text = str(search_text)[2:-1].replace('\\x', '%') list_url = "hhttp://search.joins.com/JoongangNews?page=2&Keyword=" + sea..
저번 포스팅에서는 기사 제목과 내용을 크롤링하는 것을 했는데, 이번에는 크롤링 하려고 검색어을 입력받아 자동으로 크롤링하는 것을 짜보겠습니다. 웹 크롤링 저번에 가져온 암호화 된 주소를 살펴보면 아래와 같은데, 여기서 검색어를 삽입해야합니다. def han_article(): # 모듈 임포트 import urllib.request from bs4 import BeautifulSoup import re import os # 검색어 입력 search_text = input("검색어를 입력하세요 : ").encode("utf-8") search_text = str(search_text)[2:-1].replace('\\x', '%') ##상세 기사 url url_list = [] for i in range(30..
지난 포스팅에서 기사 제목만을 크롤링하는 것을 했는데, 이번에는 조금 더 나아가서 기사 내용까지 크롤링해보도록 하겠습니다 웹 크롤링 기사 내용을 크롤링하기 위해 기사를 클릭 후 저번과 마찬가지로 F12를 눌러 기사 내용을 클릭합니다. 그럼 기사 내용이 div 태그에 text 클래스에 기사 내용이 있음을 확인할 수 있습니다. 여기서 기사 내용만을 클릭하면 언제 올라온 기사인지 모르니 기사 날짜도 함께 크롤링합니다. 기사 날짜는 p 태그에 data-time 클래스가 있습니다. import urllib.request from bs4 import BeautifulSoup def fetch_list_url(): # 현재 기사 URL list_url = "http://www.hani.co.kr/arti/econom..
워드 클라우드나 특정 데이터를 수집하기 위해 자주 사용되는 웹 스크롤링에 대해 한번 알아보겠습니다. 보통 웹 스크롤링할 때는 a태그에 있는 것을 긁어서 사용합니다. 저는 오늘 특정 신문사에서 기사를 긁어오는 것을 한번 해보겠습니다. 스크롤링 신문사 홈페이지로 들어가서 찾고자 하는 것을 검색한 후 url을 가져오겠습니다. 여기서 알아야 할 점은 주소가 위 그림처럼 뜨지만, 주소를 메모장에 복붙하면 아래처럼 암호화된 주소가 보입니다. 그렇기 때문에 직접 URL를 건들어서 웹 스크롤링을 하기는 힘들다는 점을 알아두셔야 합니다. 이제 여기서 우리가 해야 댈것은 페이지 번호를 확인하고 나서 for문을 돌려서 웹 스크롤링할 예정입니다. 우선 F12를 눌러 기사 제목을 클릭해서 기사 제목을 확인해보겠습니다. F12를..
다른 언어와 마찬가지로 파이썬에도 상속 개념이 존재합니다. 클래스 상속을 사용하게 되면 반복적으로 코드를 짜지 않아도 되기 때문에 많이 사용합니다. 상속 상속은 클래스들끼리 기능을 서로에게 물려주는 것이기 때문에 같은 코드를 반복해서 짜지 않아도 됩니다. 상속을 받기 위해 클래스 두개를 작성하고 자식 클래스에 상속시켜보겠습니다. class father: def base_method(self): print("hello~") class child(father): pass father=father() father.base_method() child=child() child.base_method() 코드를 보면 자식 클래스가 아빠 클래스를 상속을 받았는데, 이상태로 출력을 하면 아래와 같은 결과를 얻을 수 있습..
정적 메소드를 사용하여 클래스가 같은 메모리를 바라보는 것을 해보도록 하겠습니다. static method 정적 메소드는 self를 매개변수로 받지 않는 메소드를 말하며 여러 인스턴스가 공유해서 사용하는 메소드입니다. 저번에 만든 코드를 이용하여 예를 들어보겠습니다. class gun(): # 클래스가 실체화 될때, 바로 작동하는 메소드(함수) def __init__(self): # 총을 만든다. (실체화) # 총알을 0으로 설정 self.bullet = 0 # class에는 꼭 self가 들어간다. def charge(self, num):#충전하는 기능 self.bullet=num def shoot(self, num): #쏘는 기능 for i in range(num): if self.bullet>0: ..
파이썬 코드를 가끔 보다 보면 _ 같은 것을 볼 수 있습니다. 이 언더바(_)는 언제 사용하는 걸까요? 언더바( _ )를 사용하는 경우 언더바를 사용하는 경우는 주로 아래의 4가지 경우입니다. 1. 인터프리터에서 마지막 값을 저장할 때 2. 값을 무시하고 싶을 때 3. 변수나 함수명에 특별한 의미를 부여하고 싶을 때 4. 숫자 또는 문자 값의 자릿수 구분을 위한 구분자로써 사용할 때 우선 첫번째, 인터프리터에서 마지막 값을 저장할 때 사용하는데, 아래와 같이 사용할 수 있습니다. 그래서 이런 출력도 가능합니다. 두번째는 값을 무시하고 싶을 때 사용하는데, for 문을 사용할 때 가장 많이 사용됩니다. 2를 무시하고 값이 출력되는 것을 알 수 있으며, for 문을 사용하면 아래와 같이 사용할 수 있습니다...