SQL
행/열의 생김새가 정해진 엑셀에 데이터를 저장. 정형화 되어 있어, 중간에 데이터를 변형하는 것이 어려울 수 있음. 데이터의 일관성이나 분석에 용이
ex ) My-SQL, MS-SQL 등No-SQL(Not only SQL)
Dictionary형태로 데이터를 저장. 자유로운 형태의 데이터 적재 가능, 일관성이 부족할 수 있음.
ex ) mongoDB
( pycharm에서 다운로드함 )
pycharm실행 > 설정 > 프로젝트 > python 인터프리터 > + > 'pymongo' 검색 > 패키지 다운로드 >'dnspython'검색 > 패키지 다운로드
from pymongo import MongoClient
client = MongoClient('mongoDBURL 입력')
db = client.dbsparta
mongodDB URL ?
Database Deployments > connect > mongoDB Drivers > Add your connection string into your application code 밑에 있는 코드복사 > password 부분을 데이터베이스 생성할 때 설정했던 password로 변경
pymongo 써보기
- DB 연결하기 및 데이터 넣기
ex) 'users'라는 collection에
{'name' : 'kim' , 'age' : 24 } 넣기ordoc = { 'name':'kim', 'age':24 } db.users.insert_one(doc)
db.users.insert_one({'name':'kim','age':24})
- DB의 모든 결과 값을 보기
#users의 모든 데이터 보기 all_users = list(db.users.find({},{'_id':False}))
#0번째 결과값을 보기 print(all_users[0])
# 0번째 결과값의 'name'을 보기 print(all_users[0]['name'])
# 반복문을 돌며 모든 결과값을 보기 for user in all_users: print(user)
- 특정 결과 값을 보기
ex ) name이 kim인 user를 printuser = db.users.find_one({'name':'kim'}) print(user)
- 수정하기
ex ) 'users' collection에서 'name'이 'kim'인 사람의 나이를 19로 수정하기db.users.update_one({'name':'kim'},{'$set':{'age':19}}) # user값 print해서 수정됐는지 확인 ! user = db.users.find_one({'name':'bobby'}) print(user)
- 삭제하기 ( 사용 잘 안함 )
ex ) 'users' collection에서 'name'이 'kim'인 사람의 데이터 삭제하기db.users.delete_one({'name':'bobby'}) # user값 print해서 삭제됐는지 확인 ! user = db.users.find_one({'name':'bobby'}) print(user)
import requests
from bs4 import BeautifulSoup
##pymongo 여기##
from pymongo import MongoClient
client = MongoClient('mongodb+srv://test:<password>a@cluster0.55vah.mongodb.net/Cluster0?retryWrites=true&w=majority')
db = client.dbsparta
##여기##
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')
genie뮤직 크롤링숙제 리뷰
genie뮤직 순위페이지를 크롤링하여 '순위/곡제목/가수'스크래핑하기
- DB가 아직 익숙하지 않아서 평소보다 어려움을 많이 느꼈었다. 하지만, 힌트를 참고하면 금방 해결되는 문제였다.
1) .text[0:2]
: .text는 텍스트만 나타내는 것이지만 이렇게 [ ]안에 범위를 나타내면, 범위 안의 글자만 나타낼 수 있다.
2) .strip()
: .strip()은 양쪽에 있는 공백 및 문자를 없애주는 Python 문자열함수이다.ex) title = tr.select_one('td.info > a').text.strip()
양쪽 뿐만 아니라, 오른쪽에 있는 공백 및 문자를 없애주는 .rstrip()과 왼쪽에 있는 공백 및 문자를 없애주는 .lstrip()도 있다.
이 3가지 함수를 사용하여 문자를 없애고 싶을 때에는 괄호 안에 없애고 싶은 문자를 입력하면 된다.
ex ) 'ooomongodbooo'의 'o'를 없애고 싶을 때.text.rstrip('o') #오른쪽에 있는'o'=>'ooomongodb' .text.lstrip('o') #왼쪽에 있는'o'=>'mongodbooo' .text.strip('o') #양쪽에 있는'o'=>'mongodb