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'}
response = requests.get('https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20210829',headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
requests : http통신을 위한 라이브러리
bs4 : requests로 가져온 html파일로부터 데이터 추출을 도와주는 라이브러리
headers : 코드로 접근하는것을 차단한 사이트일때 작성해서 크롤링을 할 수 있게 해줌.
response : requests.get으로 요청하고 받은 응답이 담긴 객체. 많은 정보가 담긴다. bs4에서는 response.text를 이용하는 것 같다.
soup : 문자열 response.text 에서 selector를 사용해 원하는 정보를 쉽게 가져올수 있게 수프 객체로 만든다.
# 저장 - 예시
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'})
mysql, oracle에서는 테이블의 PK를 정해서 ID값이 같은 경우에는 중복으로 데이터가 들어가지 않았는데, mongodb 에서는
doc = {'rank': 1, 'title': 1, 'star' : 1}
db.movies.insert_one(doc)
이 코드를 실행할때마다 중복값이 계속 insert 되었다. 이걸 해결하기 위해 구글링을 하던 중, upsert에 대해 알게됐다.
#update({업데이트를 위해 선택할 key-value쌍}, {수정될 내용의 key-value쌍}, upsert, 멀티라인 조건여부) # upsert와 멀티라인 조건여부의 default는 false
update함수의 upsert의 값을 True로 설정하면 선택한 key-value쌍이 존재할 경우에는 update를 진행하고, 없다면 insert를 한다.
doc = {'rank': rank, 'title': title, 'star': star}
db.movies.update_one({'title': title}, {'$set': doc}, True)
코드를 위와같이 수정해서 중복값이 insert되는것을 방지할 수 있었다. 근데 왜 시원한 느낌이 안드는지 모르겠다. 더 공부하면 알 수 있으려나