파이썬 설치
- 일종의 번역팩 설치의 느낌
파이썬 - 터미널(Terminal)
- 사용자가 텍스트로 명령어 입력 → 결과를 텍스트로 화면에 출력해주는 도구
- 파이썬 라이브러리 설치, 파이선 프로젝트 실행 시 사용됨
- 명령어를 적어 작동시키는 것이 빠르고 편하기 때문에 사용됨
변수
a = 3 b = a a = a + 1 num1 = a * b num2 = 99 # 변수의 이름은 마음대로 지정 가능 # 하지만 직관적으로 알아볼 수 있는 변수명을 사용하는 것이 좋음 !
숫자, 문자형
name = 'bob' num = 12 is_number = True
리스트 형 (List)
a = ['두준', '요섭', '기광', '동운] print(a[0]) # 두준
딕셔너리 형 (Dictionary)
a = {'name' : '두준', 'age' : 33} # a 값: {'name' : '두준', 'age' : 33} # a['name'] : 두준
함수 (Fuction)
- 함수 이름은 마음대로 지정 가능
f(x) = 3*x + 2 y = f(2) print(y) # 8 #함수 정의 def f(x) : return 3*x + 2 y = f(2) print(y) # 8
- 함수 응용
def call() : print("하이") #들여쓰기 주의하기 call() # 하이
def sum (a,b,c) : return a+b+c result = sum(3,2,1) print(result) # 6
조건문
age = 24 if (age > 20) : print("성인") else : print("청소년")
반복문
- 리스트의 요소들을 하나씩 꺼내쓰는 형태
members = ['두준', '요섭', '기광', '동운] for m in members: print(m)
조건문 + 반복문
ages = [14,16,33,32,20,32,15,31] for a in ages: if (a > 20) : print("성인") else : print("청소년")
- 폴더 생성과 가상환경
- 가상환경 venv : 패키지를 담아두는 공구함
- 가상환경(Virtual Environment): 같은 시스템에서 실행되는 다른 파이썬 응용 프로그램들의 동작에 영향일 미치지 않기 위해서 파이썬 배포 패키지들을 설치 혹은 업그레이드를 가능하게 하는 격리된 실행 환경
- (출처: 파이썬 공식 용어집)
- venv 생성하기
- Ctrl + ` 을 눌러 터미널 실행
- python -m venv venv 를 실행
- venv 활성화하기
- 하단의 {}python 옆의 이름이 (venv:venv)로 되어 있는지 확인
- 터미널에서 (venv)라고 뜨면 가상환경 활성화 완료
- 파이썬 패키지 설치하기
- 패키지 설치 = 외부 라이브러리 설치
- 패키지는 모듈(기능들 묶음)을 모아놓은 단위
- 패키지의 묶음을 라이브러리 라고 할 수 있음
- requests 패키지 설치해보기
- 터미널 열기
- requests 패키지 설치 (pip install requests)
Requests 라이브러리 사용해보기
import requests r = requests.get('가져오고싶은 OPEN API 링크') rjson = r.json() print(rjson)
크롤링 준비
- 패키지 추가 설치하기 (beautifulsoup4)
- 터미널에서 가상환경 활성화 확인 후 pip install bs4 실행
- 크롤링 기본 세팅
import requests from bs4 import BeautifulSoup URL = '가져오려는 URL' headers = {"User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'} data = requests.get(URL, headers = headers) soup = BeautifulSoup(data.text, 'html.parser')
3.select / select_one 사용법
(태그 안의 텍스트: 태그.text / 태크 안의 속성: 태그['속성'])
- 어떤 뼈대를 가져와야 할까?
- 원하는 부분에서 검사 - Copy - Copy selector변수명 = soup.select_one('가져온선택자').text print(변수명)
추가 문법
선택자 사용 방법
soup.select('태그명') soup.select('.클래스명') soup.select('#id값') soup.select('상위태그명 > 하위태그명 > 하위태그명') soup.select('상위태그명.클래스명 > 하위태그명.클래스명')
태그와 속성값으로 찾는 방법
soup.select('태그명[속성 = '값']')
한 개만 가져오고 싶은 경우
soup.select_one('위와 동일')
DB를 쓰는 이유
- 데이터를 잘 넣어두고 나중에 잘 찾기 위해서
- 우리 눈에 보이지 않지만 DB는 index라는 순서로 데이터가 정렬되어 있음
DB의 두 가지 종류
- RDBMS (SQL)
- 행/열의 생김새가 정해진 엑셀에 데이터 저장과 유사.
- 갑자기 중간에 열을 하나 더하기는 어려울 것
- 정형화되어 있어 데이터 일관성/분석에 용이
- ex. MS-SQL, My-SQL 등
- No-SQL
- 딕셔너리 형태로 데이터를 저장해두는 DB
- 데이터 하나 하나 마다 같은 값을 가질 필요 없음
- 자유로운 형태의 데이터 적재에 유리한 반면 일관성이 부족할 수 있음
- ex. mongoDB
DB 란
- DB는 아주 간단히, 우리가 쓰는 프로그램과 같은 것
- 요새는 Cloud 형태로 제공해주는 곳들이 많음
- 사용자가 몰리거나 / DB 백업 / 모니터링이 용이하기 때문
mongoDB - Atlas 가입하기
- 가입 후 연결
- Network Access에서 Allow Access from Anywhere → Add IP address
- 데이터 베이스 첫 번째 페이지에서 좌측 메뉴 Network Access
- mongoDB 모든 IP 허용
- Database connect → Create Database User 클릭
- Choose a connection method 클릭 후 Username, Password 입력
mongoDB - Atlas 연결
- 터미널 (Ctrl + `) 열고 (venv) 가상환경 활성화 확인
- pip install pymongo dnspython 입력 후 엔터
- pymongo 기본 코드
from pymongo import MongoClient client = MongoClient('여기에 URL 입력') db = client.db이름
- Python - mongoDB 연결
- mongo atals 화면에서 Connect 클릭
- 연결 방법 Drivers → Driver:Python, Version: 3.6 or later
- 생성된 하단의 링크를 복사하여 url 부분에 붙여넣기
- 연결 테스트
doc = { 'name' : '두준', 'age' : 33 } db.user.insert_one(doc) # 실행 후 Collections 확인하기
DB연결 & 데이터 삽입
# users라는 collection에 넣음 db.users.insert_one({'name':'두준', 'age':33}) db.users.insert_one({'name':'요섭', 'age':32}) db.users.insert_one({'name':'기광', 'age':32}) db.users.insert_one({'name':'동운', 'age':31})
결과 값 보기(전부)
all_users = list(db.users.find({}, {'_id':False})) print(all_users[0]) # 0번째 값 print(all_users[0]['name']) # 0번째 값의 'name' for a in all_users: # 반복문을 돌며 모든 결과값 확인 print(a)
특정 결과 값 보기
user = db.users.find_one({}) print(user)
값 수정하기
db.users.update_one({'name':'두준'}, {'$set':{'age':32}}) user = db.users.find_one({'name':'두준') print(user)
값 삭제하기 (거의 사용하지 않음)
db.users.delete_one({'name':'두준'}) user = db.users.find_one({'name':'두준'}) print(user)
insert - 웹스크래핑 결과 DB에 저장하기
# 영화 가져오기
import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient
client = MongoClient('URL')
db = client.db이름
URL = '가져올링크'
headers = {"User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get(URL, headers = headers)
soup = BeautifulSoup(data.text, 'html.parser')
video_list = soup.select("가져온 선택자")
for v in video_list :
rank = v.select_one(".클래스명").text
title = v.select_one(".클래스명").text.strip("\n")
rate = v.select_one(".클래스명").text
doc = {
'title' : title,
'rank' : rank,
'rate' : rate
}
db.movies.insert_one(doc)