Python 22

Python 실습 - 셀레니움으로 크롤링(이었던것)

파이썬 처음 공부할 때 셀레니움으로 크롤링 했던것을 다시 한번 살펴보자 혼자 열심히 구글과 고군분투해서 뿌듯했던 기억이 있다. 물론 지금 보면 코드가 맘에 안든다. 핫딜 게시판을 크롤링해서 csv파일에 중복된 항목이 나올 때 까지 페이지를 넘겨가며 csv파일에 저장하는 방식이다. 모듈 import 많은 import들.. 셀레니움은 크롬드라이버가 계속 속을 썩여서 BeautifulSoup이 더 편한것 같다.. from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from selenium.webdriver.support.ui impo..

Python 2023.09.24

Python 실습 - 핫딜 크롤링 해보기

원래 목표는 핫딜 게시판을 크롤링하는 py파일을 만들어서 그걸 매 시간 정각마다 실행되도록 외부 서버를 이용한 후, 만약 새 글이 올라왔으면 나에게 알림을 보내는 것이었지만 아직 그렇게 까지 하기에는 실력이 부족하기도하고 귀찮기도해서 일단 크롤링만 해보았다. 예전에는 셀레니움으로 했었는데 이번엔 BeautifulSoup으로 해봄. 모듈 import from bs4 import BeautifulSoup import requests import re 내가 검색하고싶은 키워드 정하고 url입력한 후, 잘 응답했는지 확인 난 애플워치 스테인리스를 싸게 사고싶으니까 애플워치로 함 mykeyword = '애플워치' # 검색하고싶은 키워드 res = requests.get(f'https://www.fmkorea.co..

Python 2023.09.24

Python(20) BeautifulSoup 크롤링

예전에 bs4랑 Selenium이랑 이미 한번 공부하고 핫딜 사이트 크롤링해서 csv파일로 카테고리별로 나눠서 저장해오는 코드도 연습했었는데 크롬 드라이버 에러 때문에 실행이 안된다.. 자동으로 크롬 버전에 맞는 드라이버 설치해서 돌리는 코드였는데 아직 드라이버는 업데이트가 안되어서 그런듯? 이 부분은 나중에 다시 공부해서 고치는걸로. 기본 세팅 import requests from bs4 import BeautifulSoup response = requests.get('사이트url') # GET방식으로 HTTP요청 # params = {'pa1': 'val1', 'pa2': 'value2'} # response = requests.get('사이트url', params=params) # print(res..

Python 2023.09.22

Python(19) 정규표현식

https://regexr.com/5nvc2 RegExr: Learn, Build, & Test RegEx RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp). regexr.com 여기서 연습 가능 정규표현식 일반 문자열 ^hello : 처음에 나오는 hello hello$ : 마지막에 나오는 hello h.llo : h 다음에 어떤 문자든 1개의 문자(영문, 특수문자, 숫자, 한글 등)이 오며 llo가 나옴 대괄호(택1) h[eao]llo : hello, hallo, hollo를 선택. h[e!ao]llo : hello, hallo, hollo, h!llo 선택. [a-z] : 알파벳 소문자 중 하나 ..

Python 2023.09.22

Python(18) f-string 문법

중괄호 출력하고 싶을 때 value = 'hello' print(f"{value}") # hello print(f"{{value}}") # {value} print(f"{{{value}}}") # {hello} print(f"{{{{value}}}}") # {{value}} print(f"{{{{{value}}}}}") # {{hello}} print(f"{{{{{{value}}}}}}") # {{{value}}} 포맷팅 지정 num = 3.14159 print(f"{num:.2f}") # 출력: 3.14 # 소숫점 두번째 자리까지 표현해라 name = "Alice" print(f"{name:>10}") # 출력: Alice # 10자리에 맞춰서 오른쪽 정렬 something = '볼펜' EA = 2 o..

Python 2023.09.21

Python(17) args, kwargs, 이터레이터와 제너레이터

*args : 가변 아규먼트, 여러가지 인자들을 가변인수로 받음. tuple로 저장 **kwargs : 딕셔너리로 가변인수를 받음. a, b, *c = 10, 20, 30, 40, 50 print(a) # 10 print(b) # 20 print(c) # (30, 40, 50) args 패킹 def func(*args): print(args) # (10, 20, 30) func(10, 20, 30) # 10, 20, 30 => *args => (10, 20, 30) args 언패킹 def func(a, b, c): print(a, b, c) # 10 20 30 args = (10, 20, 30) func(*args) # (10, 20, 30) => *args => 10, 20, 30 kwargs 패킹 d..

Python 2023.09.20

Python(16) 일급 함수와 고차 함수, 클로저, 데코레이터

일급 함수 : 함수나 메서드를 일급 객체(값, 주소) 취급 고차 함수 : 함수를 아규먼트로 받거나 return값으로 반환하는 함수 donghu = print donghu('Hello World') # Hello World class Cat: def sound(self): print('냐옹') licat = Cat() licat_sound = licat.sound licat_sound() # licat.sound()와 같다. l = [10, 20, 30] la = l.append la(40) print(l) # [10, 20, 30, 40] def add(x, y): return x + y def sub(x, y): return x - y funcs = [add, sub] print(funcs[0](2, ..

Python 2023.09.20

Python(15) 예외 처리와 오류 관리

Error의 종류 # Syntax Error 문법 에러 for i in range(10) print(i) # Name Error 이름 에러 print(x) # Type Error 타입 에러 x = 10 y = '20' print(x + y) # Index Error 인덱스 에러 my_list = [1, 2, 3] print(my_list[3]) # Key Error 키 에러 my_dict = {'a': 1, 'b': 2} print(my_dict['c']) # Value Error 값 에러 int('a') # ZeroDivision Error 0 나누기 에러 x = 10 y = 0 print(x / y) # Attribute Error 어트리뷰트 에러 : 객체에 존재하지 않는 속성이나 메서드 호출 my_..

Python 2023.09.19

Python(14) 모듈

모듈 다른 파일에 작성된 클래스나 함수, 변수를 재사용할 수 있도록 한것 import로 불러옴 # hoo.py name = 'KimDonghu' age = 20 def hello(): return 'hello world' 보통 from은 폴더 import는 모듈 import hoo print(hoo.name) # KimDonghu hoo.hello() # hello world from hoo import name, age # 이것도 많이 사용함 print(name) # KimDonghu print(age) # 20 from hoo import name as n print(n) # KimDonghu import hoo as h print(h.name) # KimDonghu 많이 사용하는 모듈 import ..

Python 2023.09.19

Python(13) 클래스 심화

클래스 메서드 클래스에 작용하는 메서드 인자를 cls로 명명함. class MyClass: count = 0 # 이거 안붙이면 cls는 그냥 인스턴스 변수 됨 @classmethod def increment(cls): cls.count += 1 a = MyClass() b = MyClass() MyClass.increment() print(MyClass.count) # 출력 : 1 a.count, b.count # 1 1 원래 클래스 메서드를 안썼을 때 class MyClass: count = 0 def increment(self): self.count += 1 a = MyClass() b = MyClass() # MyClass.increment() # error a.increment() print(a...

Python 2023.09.19