제로부터 시작하는 개발자 생활3.(python,크롤링,mongoDB)

Geun Bo Kim·2023년 2월 19일
0

세 번째 개발공부!!

  • 첫 '파이썬' 배우기! 기초 문법 습득
  • 라이브러리를 활용하여 네이버 영화 순위 크롤링을 해보기
  • 인생의 첫 데이터베이스 mongoDB
  • 크롤링한 것을 연결하여 pymongo를 이용하여 조작해보기

(1)PYTHON

python 문법 기초공부(1)

변수 & 기본연산

a = 3 # 3을 a에 넣는다
b = a # a를 b에 넣는다
a = a + 1 # a+1을 다시 a에 넣는다

num1 = ab # ab의 값을 num1이라는 변수에 넣는다
num2 = 99 # 99의 값을 num2이라는 변수에 넣는다

  • 변수의 이름은 마음대로 지을 수 있음!

자료형

- 숫자,문자형

name = 'bob'
num = 12

- 리스트 형 (Javascript의 배열형과 동일)

a=['사과','배','감']
print(a[0])

->사과

- Dictionary 형 (Javascript의 dictionary형과 동일)

a= { }
a= {'name':'영수','age':24}

a의 값은? {'name':'영수','age':24}

-> a['name'] 하면 '영수'
-> a['age'] 하면 '24'

함수

- 함수정의

파이썬에서는

def f(x):
	return 2*x+3

y = f(2)
y의 값은? 7

자바스크립트에서는


function f(x) {
	return 2*x+3
}

- 변수를 받는 함수

def = 함수를 선언할게~

ex) def hey(): = hey를 부르면 어떤일이 일어나냐면 :뒤에가 이 함수의 내용물이다~ 라는 뜻

def hey():
	print("헤이")

*파이썬에서 함수 생성시, 들여쓰기는 중요!! (같은 라인에 있으면 그 안에 포함된걸로 간주함)

hey() #헤이

def sum(a,b,c):
	return a+b+c

result = sum(1,2,3)
print(result) #6

python 문법 기초공부(2)

- 조건문

age = 25

if age > 20:
	print("성인입니다")
else:
	print("청소년입니다")
 
*age가 20보다 크면 성인입니다, 그렇지 않다면 청소년입니다

- 반복문

ages = [5,10,13,23,25,9]

for a in ages:
    print(a)

*ages의 하나하나씩을 가져와서 a로 넣고 그 a를 밑에가서 가져다 쓰자

- 반복+조건문

ages = [5,10,13,23,25,9]

for a in ages:
    if a > 20:
        print('성인입니다')
    else:
        print('청소년입니다')

*ages의 내용물을 하나하나 가져와서 20보다 크면 성인 그렇지 않다면 청소년으로 출력

(2) 크롤링(crawling)

- 크롤링이란?

-웹에 접속해서 데이터를 솎아내어 가지고 오는것
-library가 2개 필요함
(1).웹에 접속하는 친구(ex: requests)
(2).솎아내는 친구(ex: beaytifulsoup)

- 기본세팅

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('url',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')

- 네이버 영화순위 크롤링해보기!

크롤링 기본코드 세팅을 해준뒤 네이버 영화순위 url을 입력해준다!

그 후 네이버 영화 주소로 가서 각 키워드(순위,영화제목,별점점수)에 각각 검사를 눌려 코드를 찾는다

#old_content > table > tbody > tr:nth-child(2) > td.title > div > a (영화제목)
#old_content > table > tbody > tr:nth-child(2) > td.point (별점점수)
#old_content > table > tbody > tr:nth-child(2) > td:nth-child(1) > img (순위)

코드입력~!

trs = soup.select('#old_content > table > tbody > tr')

for tr in trs:
    a = movie.select_one('td.title > div > a')
    if a is not None:
        title = a.text
        rank = tr.select_one('td:nth-child(1) > img')['alt']
        star = tr.select_one('td.point').text
        print(rank, title, star)

여기서 none이 떠서 if a is not None을 붙여준다.

  • if a is not None (a가 None과 같지 않다)
    =if a is != None
    if a is None (a가 None과 같다)
    =if a is ==None

출력해 보면?! 완성!!!

(3)MongoDB

DB는 왜 쓰는 것일까? ->저장해 놓은 데이터를 필요할 때 '잘'가지고 오도록 하는 역할

- DB의 2가지 종류

(1)RDBMS(SQL)
행/열의 생김새가 정해진 엑셀에 데이터를 저장하는 것과 유사합니다. 데이터 50만 개가 적재된 상태에서, 갑자기 중간에 열을 하나 더하기는 어려울 것입니다. 그러나, 정형화되어 있는 만큼, 데이터의 일관성이나 / 분석에 용이할 수 있습니다.
ex) MS-SQL, My-SQL 등

  • 주로 바꿀일이 드문 대기업에서 많이 사용함

(2) No-SQL
딕셔너리 형태로 데이터를 저장해두는 DB입니다. 고로 데이터 하나 하나 마다 같은 값들을 가질 필요가 없게 됩니다. 자유로운 형태의 데이터 적재에 유리한 대신, 일관성이 부족할 수 있습니다.
ex) MongoDB

  • 상황에 따라 자주 바꿀 수 있는 가능성이 높은 스타트업에서 많이 사용함

- MongoDB 연결하기

몽고 DB를 조작하려면 두 개의 라이브러리가 필요함.
1)pymongo (설치방법: 터미널 아래에 pip install pymongo 이라치고 엔터)
2)dnspython (설치방법: 터미널 아래에 pip install dnspython 이라치고 엔터)

- pymongo 기본코드 세팅

from pymongo import MongoClient
client = MongoClient('여기에 URL 입력')
db = client.dbsparta

- mongoDB와 Python 연결하기

1.mongo atlas 화면에서 Connect를 클릭하기

2.Connect your application 클릭하기

  1. 드라이버는 Phthon으로 바꾸고, 버전은 3.6 or later로 변경 후 주소 복사하기 클릭!

4.url입력하는 곳에 복사한 주소 입력

5.Mongo Atlas 계정 비밀번호를 입력해주기

- pymongo를 통해 mongoDB 조작하기

- (1)저장

doc = {'name':'bobby','age':21}
db.users.insert_one(doc)

- 한 개 찾기

user = db.users.find_one({'name':'bobby'})

- 여러개 찾기 ( _id 값은 제외하고 출력)

all_users = list(db.users.find({},{'_id':False}))

- 바꾸기

db.users.update_one({'name':'bobby'},{'$set':{'age':19}})

- 지우기

db.users.delete_one({'name':'bobby'})

- pymongo를 통해 크롤링한 결과를 DB에 저장해보기

1.연결한 코드를 크롤링했던 코드 맨위에 넣어주기!

2.도큐먼트 만들어 하나씩 insert 하기

3.mongo Atlas에서 확인하기!

- 크롤링한 것을 pymongo를 통해 조작해보기

1.디지몬어드벤처 라스트 에볼루션 : 인연 평점을 가져와보기

연결코드 입력해주고~

내가 필요한 정보를 찾기 ( 영화제목과[title],평점[star])

이제 한 개 찾는 코드를 입력한 후 print를 통해 필요한 별점 출력하기!

movie = db.movies.find_one({'title':'디지몬 어드벤처 라스트 에볼루션 : 인연'})
print(movie['star'])

완료

2.디지몬 영화 평점을 0으로 바꿔보기

한 개 찾는 코드를 지운 뒤 바꾸기 코드를 입력!

db.movies.update_one({'title':'디지몬 어드벤처 라스트 에볼루션 : 인연'},{'$set':{'star':0}})

확인하기!

9.53 평점이 0점이 되었다..!!

끝으로...

이제 3주차 강의를 들으며, 하나씩 만져보니 코딩에 재미를 붙이기 시작했다.
아직 초기 입문단계라 그럴 수 있지만 지금 배운 기초들도 잊지 않기 위해
응용을 하며 다른 방법으로도 활용하여 까먹지 않도록 머리에 새기자!

profile
미래는 개발이다

0개의 댓글