Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

열심히 살고 싶어

[노마드코더] 파이썬 본문

공부

[노마드코더] 파이썬

낭 콩 2023. 11. 6. 01:22

7/10 월

 

친구의 추천으로 시작하게 된 파이썬 챌린지!

 

#1.3 Why Python

high-level lang 인간의 언어와 매우 가까움

인공지능, pentesting, 해킹, 백엔드, 웹 스크래핑, 경제관련 엡, 데이터 시각화 등

 

#1.4 Replit

replit.com 사이트에서 계정만든 후 create -> python 원하는 제목 입력해서 파이썬 파일 만들기

replit은 코드를 작성하고 앱을 호스팅할 수 있는 코딩 플랫폼

 

#2.0 Hello world

이 강의의 목표는 몇몇 개념들을 이용하여 작은 프로젝트를 만드는 것.

왜 설명하고 왜 배우는 지 이해하기.

 

#2.1 Variables

변수 이름 = 값 (ex, my_name = "nangkong", age = 100, dead = False)

파이썬은 코드를 위에서 아래로 읽음

변수는 각 메모리를 할당받고 그곳에 값이 입력됨

변수에 공백 사용불가

파이썬에서 가장 많이 사용하는 변수 이름 방식은 _ 를 사용하는것 (Snake Case)

숫자로 시작하는것도 X. 중간이나 마지막에 넣는 것은 괜찮음. 시작은 항상 글자로 !

 

#2.2 Booleans and Strings

문자열은  ""(따옴표)를 이용하여 입력

variables 안에 입력할 수 있는 데이터 타입엔 어떤 것들이 있을까.

boolean : 참 또는 거짓 상태를 나타냄. True / False 로 써야함 (첫글자 대문자 필수, 따옴표 X)

 


 

7/19 수

 

#2.3 Recap

variable은 프로그램에 데이터를 넣게 해주고, 원하는 만큼 데이터를 재사용할 수 있게 함.

이렇게 입력하면, 변수를 이용하여 결과가 출력됨.

 

 

 

 

 

#2.4 Functions

print : 값들을 console에 나타나게 해 줌.

콤마(,)를 이용해서 한번에 나타나게 할 수 있음.

파이썬에서 함수를 만들때는 def를 이용해서 만들어야 함.

def function_name(): 이런 형식으로 만들어주면 됨.(함수 이름에도 공백 사용 불가, 숫자로 시작 불가)

함수를 정의하고 사용하기 위해서 함수를 호출해줘야함. 이때 함수이름() 으로, 함수이름 뒤에 괄호를 꼭 붙여줘야함 !

실행시키는 버튼이라고 생각하면 됨 .

 

#2.5 Indentation

파이썬은 공백(들여쓰기)만으로도 function안에 있다는 것을 표시할 수 있음.(중괄호 등을 사용하지 않음)

공백을 잘 입력해줘야함 ! (탭/스페이스 두번)

 

#2.6 Parameters

function에 데이터 보내기.print의 경우 어떤 값이든 괄호 안에 넣으면 그 값을 print function이 가져가서 console에 나타내줌.

function을 만들 때 데이터가 들어가는 플레이스홀더 같은 공간을 제공해야 함.

user_name 플레이스 홀더 역할을 하는 것이 parameter(매개변수)이고, 함수를 호출하며 전달한 데이터는 argument(인자)라고 함.

 

#2.7 Multiple Parameters

function(parameter1, parameter2):

function(argument1, argument2)

이런 형식으로 콤마로 연결해주면서 여러개의 매개변수와 인자 사용 가능. 하지만 매개변수와 인자의 매칭이 입력 순서대로 되기 때문에, 파라미터1, 파라미터2 이렇게 입력해놨으면 그에 상응하는 인자1, 인자2를 순서대로 써줘야 한다. 

print함수에 몇개의 argument를 줄 수 있는가? -> 함수를 선언할 때 받기로 한 parameter의 갯수만큼 줄 수 있음.

 

#2.8 Recap

함수. parameter. def function_name(): 함수 이름엔 공백X, 숫자로 시작X

파이썬은 공백에 민감 . tab이나 스페이스 두번을 이용하여 코드를 함수 안에 넣어줄 수 있음.

 


 

7/20 목

 

#2.9 Default Parameters

파라미터를 설정해주고 인자를 주지 않는다면 에러가 남. 따라서 파라미터에 기본값을 줘서 에러가 나지 않게 함.

이렇게 파라미터 옆에 = 값을 주게 되면 인자값을 주지 않아도 기본으로 준 값을 이용하여

결과를 출력하게 됨.

 

덧셈 뺄셈은 기본값을 0으로,

곱셈 나눗셈 제곱은 기본값을 1로 줘서 계산기를 완성하였음.

 

 

 

 

 

 

 

 

 

#2.10 Return Values

함수로부터 값을 받아내려면 return을 사용하면 됨.

 

 

 

 

 

 

#2.11 Return Recap

1) print(f"Hello I'm {my_name}, I have {my_age} years in the earth, {my_color_eyes} is my eye color")

-> string안에 변수를 넣어서 print하고 싶다면, f"문자열 {변수}" 이런식으로 표현해주면 됨. f 꼭 써주기, 중괄호 사용 !

2) 파이썬은 return이후에 쓴 모든 코드를 사용하지 않음. return 만나면 그 함수는 끝인 것임.

귀여운 주스 메이커 만들기

 

>> 출력 : 🍒+🥤+🧊+🍯

 

 

 

 

 

 

 

 

 

#3.0 If

control flow, 조건문에 대해 !

 

#3.1 Else & Elif

if 와 else는 같은 라인에서 시작 ! 

if문이나 else문에 포함되는 식들은 탭하거나 스페이스 두번 이용하여 공백 만들어줘야함.

elif도 똑같이 사용하면 됨. if -> elif -> else 이 순서로

 

#3.2 Recap

if문을 사용할 때, if의 조건과 elif의 조건 모두 만족하는 경우 if문의 조건만 실행함. 위에서부터 아래로 실행하는 것이기 때문에 위의 조건을 충족한다면 아래의 조건들은 다 무시하게 됨.

 

#3.3 And & Or

input() -> 값을 입력받는 함수. 오직 하나의 argument만 받음.

type() -> 변수의 type을 알려주는 함수.

and -> 둘 다 모두 참일 경우 참. 하나라도 거짓일 경우 거짓.

or -> 둘 중 하나만 참이라도 참. 둘 다 거짓일 결우 거짓.

 

#3.4 Python Standard Library

built-in-function : 항상 사용할 수 있는 function

<- random 함수를 사용하려면, random 모듈의 randint 함수를 불러와야 함.

 

그 후에 randint(시작, 끝)을 이용하여 랜덤한 수를 뽑는 식을 작성하면 됨.

 

 

 

 

 

 

파이썬 표준 라이브러리 문서 ▼

https://docs.python.org/ko/3/library/index.html

 

The Python Standard Library

While The Python Language Reference describes the exact syntax and semantics of the Python language, this library reference manual describes the standard library that is distributed with Python. It...

docs.python.org

 

#3.5 While

코드 무시하게 하려면 해시태그 # 사용할 것.

여러줄의 주석, 여러줄 무시 -> """ 쌍따옴표 3개로 열어주고 닫아줄 것

while은 기본적으로 if와 같은데, 다른 점은 true일 때 무한정 수행된다.

 

#3.6 Python Casino

 

 

 

 

 

 

 

 

 

 

 

 


 

7/21 금

 

#3.7 Recap

 


 

8/12 토

 

#4.0 Methods

data structure : 데이터를 구조화하고 싶을 때 사용

list : 한 개의 변수 안에 모든 데이터를 넣음. ex) days_of_week = ["Mon", "Tue", "Wed", "Thu", "Fri"]

tuple

dictionary

 

변수는 그 안에 많은 function들을 가지고 있음. 변수명.함수() 의 형태로 사용 가능.-> method라고 부름.

string, number 등 자료형에 따른 function들이 다름.  method는 데이터에 결합된 function임.

 

#4.1 Lists

list의 메소드들 : clear, reverse, append, remove 등

 

 

-> ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]

 

-> ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]

 

그리고 컴퓨터 특성 상 0번부터 번호를 매김.

 

#4.2 Tuples

튜플은 리스트의 대괄호 대신 소괄호를 쓰면 됨.

ex) days = ("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")

튜플은 리스트와 달리 내용을 변경하지 못함. 리스트처럼 삽입, 삭제 불가능. count, index만 가능.

days[0] 와 같이 아이템에 접근 가능. (소괄호 아님!) 만들 땐 소괄호, 접근할 땐 대괄호.

 

+ 아이템에 접근할 때 뒤에서부터도 접근 가능. days[-1] -> 뒤에서 첫번째 아이템에 접근

 

#4.3 Dicts

키-값 (key-value) 쌍으로 이루어짐.

딕셔너리 안의 내용을 가져오는 방법. -> print(딕셔너리명["key"]) ex) print(player["age"])

 

딕셔너리는 리스트처럼 만든 후에 수정 가능.

 

 

 

 

#4.4 Recap

method : 데이터에 연결된 function

list : 값들의 목록을 정렬. reverse, remove, count, clear, copy, append 등 method 사용 가능. list는 수정 가능.

tuple : 소괄호로 생성. tuple은 수정 불가능. 아이템에 접근할때는 대괄호[]  사용.

dictionary : 키-값으로 이루어짐. 중괄호로 생성. 안에  list나 tuple, dict 넣을 수도 있음.

 


 

8/14 월

 

#4.5 For Loops

현재 처리중인 item에 개별적으로 접근 가능하게 됨.

 

(관습) list나 tuple을 만들 때 사람들은 복수형을 주로 사용함.

 

 

#4.6 URL Formatting

https:// 로 시작하지 않는 사이트일 경우 앞에 https:// 붙여주기.

 

 

 

 

 

 

 

 

 

#4.7 Requests

↓ 파이썬 표준 라이브러리

https://docs.python.org/ko/3/library/index.html

 

The Python Standard Library

While The Python Language Reference describes the exact syntax and semantics of the Python language, this library reference manual describes the standard library that is distributed with Python. It...

docs.python.org

↓ 없을 경우 (다른 사람들이 만들어놓은 package들을 참고할 수 있음)

https://pypi.org/

 

PyPI · The Python Package Index

The Python Package Index (PyPI) is a repository of software for the Python programming language.

pypi.org

replit에서 package 설치하기.

-> 좌측 하단의 메뉴판? 에서 큐브 모양으로 생긴 package 아이콘 클릭 후 package 이름 검색하여 install.

(package 항목에 아무것도 보이지 않으면 adblock 끄기)

 

#4.8 Status Codes

status codes 는 http응답상태코드. 번호에 따라서 응답 상태가 다름.

1XX : Information responses
2XX : Successful responses
3XX : Redirection messages
4XX : Client error responses
5XX : Server error reponses

 

#4.9 Recap

 

 

 

 

 

 

 

 

결과를 딕셔너리로 저장할 것임.

 

 

 

 

-> 상태코드가 200(연결가능)이라면, 결과를  OK로 저장

아니라면 FAILED로 저장

 

 

이렇게 하고 프린트하면 연결가능인 것들은 OK로, 불가능한 것들은 FAILED로 저장된 딕셔너리 완성.

 

#5.1  Introduction

웹 스크래퍼 만들기

beautifulsoup : 웹 사이트의 데이터를 받아올 수 있게 해주는 python 라이브러리. 실제로는 HTML에서 받아옴.

(기본적인 HTML 지식이 필요함.)

 

스크래핑 : 

 

#5.2 Installation

앞서 설치한 requests는 요청, 즉 웹사이트 호출하는 걸 쉽게 해줄 것임.

추가로 beautifulsoup 패키지(버전4)도 설치해줌.

모든 웹사이트가 스크래핑 가능한 것은 아님. 특히 상업적 사용은 위험.

 

#5.3 Initial Request

weworkremotely 스크래핑 시작

 

 

 

 

 

 

 

 

 

#5.4 BeautifulSoup

우리 일은 jobs라는 class를 가진 section을 찾는 것임.

https://www.crummy.com/software/BeautifulSoup/bs4/doc/#

 

Beautiful Soup Documentation — Beautiful Soup 4.12.0 documentation

Beautiful Soup Documentation Beautiful Soup is a Python library for pulling data out of HTML and XML files. It works with your favorite parser to provide idiomatic ways of navigating, searching, and modifying the parse tree. It commonly saves programmers h

www.crummy.com

beautifulSoup은 아주 좋은 method들을 제공함.

 

-> beautifulsoup import 해주기

 

 

 

 

 

 

-> 상태코드가 200일 경우, soup에 beautifulsoup을 실행시켜(?) title만을 뽑아서 출력해줌.

 

-> 이렇게 하면 section에서 class 이름이 jobs인 것을 찾아서 출력해줌.

 

filnd_all 이 엄청나게 많은 argument들을 가지고 있기 때문에 class_라고  하는 argument를 이용하여 찾는것임. (#5.5참고)

class가  job인 section들을 다 찾으라고 하는 의미

class 뒤에 언더바_가 붙는 이유는 class라는 키워드는 이미 python에서 사용하고 있으므로.

 

#5.5 Keyword Arguments

positional argument : 위치에 따라 무엇이 올 지 알고 있음.

keyword argument : 자리에 더이상 신경쓰지 않음. 대신 argument의 이름을 신경씀.

이렇게 위치가 달라도 keyword를 지정해줬으므로 실행이 가능함.

 

 

 

 

 

#5.6 Job Posts

list의 각 항목에 대한 코드를 실행하고 싶을 때. 내가 실행하고 싶은 코드는 ul안에 있는 모든  li들임.

 

 

 

 

 

 

 

클래스 이름이 jobs인 section을 찾음.

 

job_posts 는 jobs에서 리스트 항목.

맨 마지막 jobs리스트 항목은 원하는 항목이 아니라(view-all 버튼이라 필요X) 제거해줌.

 

jobs리스트 하나 호출하고 //////로 구분지어주고.

 

 

#5.7 Job Extraction

weworkremotely posts에서 데이터를 추출해볼 것임.

이렇게 하면 list의 item들에게 각각 매칭시켜주지 않더라도 한번에 매칭 가능.

하지만 이건 리스트의 길이를 알아야만 사용 가능.

 

find_all() 과 find()의 차이점 : find_all은 list를 가져오고, find는 결과를 가져옴.

 

#5.8 Saving Results

span에서 텍스트 추출하기

 

#5.9 Recap

검색어 변수 2개 설정 -> 하나는 변하지 않는 검색어(사이트 이름) 하나는 계속 바뀔 수 있는 검색어(python, js ,react 등등)

-> 두 개의 url을 합치면 하나의 전체 url이 생성됨.

response를 받아서  상태 코드가 200인지 확인함.

200이라면 웹사이트의 내용을 갖고 beautifulsoup을 사용함. (beautifulsoup : html 코드를 우리가 다룰 수 있는 python entity로 변환해줌)

find_all을  하면 class 이름이 jobs인 section을 얻을 수 있음. jobs는 string이 아니고 python의 데이터 구조인 entity임.

for loop를 사용하여 job section의 내부를 검색함.

section에서 li(리스트)를 모두 검색함.

li들은 anchor을 갖고 있음. html 내부를 살펴보면, 우리가 원하는 데이터를 가진 anchor을 볼 수 있음.

우리는 두번째 a(anchor)만 필요함. -> anchors[1]로 두번째 a만 가져올 수 있음.

anchor은 dictionary 타입이고, href를 가지고 있음. href는 이 html의 attribute임.

company, kind, region에 anchor에서 가지고 온 span들을 하나씩 배정해줌.

job_data의 company는 company.string과 같음. .string을 쓰면 태그 안에 있는 텍스트를 준다고 배웠음. (html요소를 제거하고 -python 형태의- 문자열만 남겨줌)

job data dictionary를 만든 후, results라고 불리는 list를 dictionary에 추가해줄 것임.

매 li마다 실행되는 for loop안에 results를 저장하는 코드를 넣어서 값이 갱신되기(사라지기) 전에 결과값을 딕셔너리 형태로 저장함. -> 다만results의 틀은 for loop맨 바깥쪽에 생성해놔야함. (갱신되지 않도록)

 


 

8/17 목

 

#5.10 Refactor

refactoring : 결과의 변경없이 코드의 구조를 읽기 쉽고 재사용하기 쉽게 조정하는 것 ! ! !

main.py 옆에 새로운 폴더와 파일을 만들어주고 (extractors > wwr.py)

main파일에 있던 것들을 extractos의 wwr파일에 함수로 만들어주고,

main파일에서 import(세 번째 줄 참조)

>> from 폴더 이름 import 함수이름

 

#5.11 Recursive

이렇게 코드를 짜고, 검색된 jobs의 갯수를 출력하는 len(jobs)를 이용해 결과를 보면, list의 갯수보다 훨씬 많은 갯수가 출력됨.

이는 jobs안의 list의 하위 list까지 모두 검색하므로 이렇게 되는 것임.

이때 recursive를 이용하면 원하는 레벨의 리스트만 뽑아서 검색할 수 있음.

jobs = job_list.find_all("li", recursive = False)  이렇게 코드를 바꿔주면 ul 바로 아래 있는 li만을 찾아낼 것임.

recursive = False -> 바로 아래만 찾아주는 코드.

 

 

#5.12 Indeed Fix

자꾸 Can't request page로 뜨는 버그를 고치기. (인디드에서 스크래핑 막아놓음) 오류코드 : 403

selenium : 브라우저르 자동화 할 수 있는 프로그램.

우리가 indeed.com 에 접근할 때, indeed 쪽에서 봇으로 파악한 http request를 보내고 있음.

셀리니움을 통해 우리는 실제로 브라우저를 실행해서 그 브라우저로 해당 페이지에 방문할 예정.

목표 : indeed.com/jobs 페이지의 소스코드를 얻기

webdriver를 selenium에서 import하고, selenium webdriver chrome options에서 Options를 import함.