✅ 3주차 수업 목표
1. 파이썬 기초 문법을 안다.
2. 원하는 페이지를 크롤링 할 수 있다.
3. pymongo를 통해 mongoDB를 제어할 수 있다.
✅ Python 윈도우 다운로드
https://www.python.org/ftp/python/3.8.6/python-3.8.6-amd64.exe
주의) Add Python 3.8 to PATH 에 체크!
✔ gitbash 다운로드
✅ Python 맥 다운로드
https://www.python.org/ftp/python/3.8.2/python-3.8.2-macosx10.9.pkg
👉 파이썬을 설치한다는 것은?
일종의 번역팩을 설치하는 것이다.
파이썬 문법으로 된 것을 컴퓨터가 알아듣는 언어로 변환해줄 수 있도록, 번역 패키지를 설치하는 것.
패키지 설치 = 외부 라이브러리 설치
✔ 가상환경(virtual environment, venv) 이란?
프로젝트별로 패키지들을 담을 공구함
[설정] - [프로젝트] - [Python 인터프리터] - [+] - [requests 패키지 설치]
✅ 파이썬 기초 문법
▶ 변수
a = 3 //3을 a에 넣는다
b = a
▶ 자료형
숫자, 문자형
name = 'bob'
is_number = True //Boolean 형이 들어갈 수도 있음
리스트형
a_list = ['사과', '배', '감']
a_list.append('수박') //리스트에 추가하는 법 (자바에서는 push)
딕셔너리형
a_dict = {'name':'bob', 'age':27}
▶ 함수
def sum(a, b): //definition
return a+b
result = sum(1,2)
print(result) //3 출력
▶ 조건문
def is_adult(age):
if age > 20:
print('성인입니다')
else:
print('청소년입니다')
is_adult(15) //청소년입니다 출력
▶ 반복문
파이썬에서의 반복문은, 리스트의 요소들을 하나씩 꺼내쓰는 형태이다.
즉, 무조건 리스트와 함께 쓰인다
fruits = ['사과','배','배','감','수박','귤','딸기','사과','배','수박']
count = 0
for fruit in fruits:
if fruit == '사과':
count += 1
print(count) //2 출력
people = [{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27}]
for person in people:
if person['age'] > 20:
print(person['name']) //carry, ben 출력
✔ requests 라이브러리 사용해보기
import requests //requests 라이브러리 설치 필요
r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair')
rjson = r.json()
✔ 들여쓰기의 중요성!
✅ 크롤링 이란?
웹사이트, 하이퍼링크, 데이터, 정보 자원을 자동화된 방법으로 수집, 분류, 저장하는 것.
✔ 패키지 추가 설치하기(beautifulsoup4, bs4)
[설정] - [프로젝트] - [Python 인터프리터] - [+] - [bs4 패키지 설치]
✔ 크롤링 기본 세팅
import requests
from bs4 import BeautifulSoup
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('https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20210829',headers=headers)
//url만 변경해가며 쓰면 됨
soup = BeautifulSoup(data.text, 'html.parser')
✔ bs4 사용하는 법
예시) 영화 제목 가져와보기
영화제목 오른쪽 클릭 - [검사] - [우클릭] - [복사] - [selecetor 복사]
title = soup.select_one('~')
print(title) //검사창의 한 줄 출력
태그 안의 텍스트를 찍고 싶을 땐 👉 태그.text
태그 안의 속성을 찍고 싶을 땐 👉 태그['속성']
print(title.text) //영화 제목만 출력
print(title['href']) //하이퍼링크 출력
import requests
from bs4 import BeautifulSoup
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('https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20210829',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
#old_content > table > tbody > tr:nth-child(3) > td.title > div > a
#old_content > table > tbody > tr:nth-child(4) > td.title > div > a
movies = soup.select('#old_content > table > tbody > tr')
for movie in movies:
a = movie.select_one('td.title > div > a')
if a is not None: # is not 은 != 로도 표현 가능
print(a.text)
✅ 데이터베이스(Database)에 넣기
✔ DB의 두 가지 종류
👉 RDBMS(SQL)
행/열의 생김새가 정해진 엑셀에 데이터를 저장하는 것과 유사함
정형화되어 있어 데이터의 일관성이나 분석에 용이함
ex) MS-SQL, My-SQL 등
👉 No-SQL
딕셔너리 형태로 데이터를 저장해두는 DB
데이터 하나하나마다 같은 값들을 가질 필요가 없게 되고
자유로운 형태의 데이터 적재에 유리한 대신, 일관성이 부족할 수 있음
ex) MongoDB
✔ MongoDB 가입하기
https://account.mongodb.com/account/register
✔ 패키지 추가 설치하기(pymongo, dsnpython)
[설정] - [프로젝트] - [Python 인터프리터] - [+] - [pymongo, dsnpython 패키지 설치]
✔ pymongo 기본 코드
from pymongo import MongoClient
client = MongoClient('여기에 URL 입력')
db = client.dbsparta
MongoDB [Connect] - [Connect your application] - 네모 복사
✔ MongoDB 데이터 입력하기
from pymongo import MongoClient
client = MongoClient('mongodb+srv://test:sparta@cluster0.ucyg0qc.mongodb.net/?retryWrites=true&w=majority')
db = client.dbsparta
doc = {'name' : 'bob', 'age' : 27}
db.users.insert_one(doc)
-------------------------------
from pymongo import MongoClient
client = MongoClient('mongodb+srv://test:sparta@cluster0.ucyg0qc.mongodb.net/?retryWrites=true&w=majority')
db = client.dbsparta
db.users.insert_one({'name' : 'bob', 'age' : 27})
db.users.insert_one({'name' : 'bobby', 'age' : 22})
db.users.insert_one({'name' : 'Ann', 'age' : 20})
MongoDB [Browse Collections] - [Collections]
✔ pymongo 사용법과 코드 요약
# 저장(insert)
doc = {'name':'bobby','age':21}
db.users.insert_one(doc)
또는,
db.users.insert_one({'name':'bobby','age':21})
db.users.insert_one({'name':'ann','age':20})
# 한 개 찾기(find)
user = db.users.find_one({'name':'bobby'})
# 여러개 찾기(find) 👉 _id 값은 제외하고 출력
all_users = list(db.users.find({},{'_id':False}))
# 수정(update) 👉 조건, 바꿀 내용
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})
# 삭제(delete) 👉 거의 안 씀
db.users.delete_one({'name':'bobby'})
✅ 함수 정리
.select('~') 👉 해당 내용이 리스트로 묶여 나오는 것
.select_one('~') 👉 리스트 안의 값이 추출되는 것
.strip() 👉 양쪽 여백 없애기
.split(~) 👉 ~를 기준으로 문자열 나누기
.text[0:2] 👉 문자열 앞에서 두 글자만 끊기
.len() 👉 문자열의 길이를 반환하는 함수, .len[()] 👉 리스트나 튜플 등의 안에 속한 값의 개수
import requests
from bs4 import BeautifulSoup
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Saf
data = requests.get('https://www.genie.co.kr/chart/top200?ditc=M&rtm=N&ymd=20210701',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
trs = soup.select('#body-content > div.newest-list > div > table > tbody > tr')
for tr in trs:
title = tr.select_one('td.info > a.title.ellipsis').text.strip()
rank = tr.select_one('td.number').text[0:2].strip()
artist = tr.select_one('td.info > a.artist.ellipsis').text
print(rank, title, artist)
'웹개발 > 수업' 카테고리의 다른 글
웹개발 4주차 개발일지_Sparta Coding Club (0) | 2023.03.02 |
---|---|
웹개발 4주차_스파르타피디아 프로젝트 연습 (0) | 2023.02.27 |
웹개발 4주차_화성땅 공동구매 프로젝트 연습 (0) | 2023.02.27 |
웹개발 2주차 개발일지_Sparta Coding Club (0) | 2023.02.23 |
웹개발 1주차 개발일지_Sparta Coding Club (0) | 2022.08.25 |