관리 메뉴

공부기록용

웹개발 종합반 3주차_02 본문

📚강의록📚/스파르타)웹 개발 종합

웹개발 종합반 3주차_02

과부하가즈아 2023. 6. 5. 01:36
# pymongo 연결 코드를 맨 위에 넣어주고
# url은 다음 데이터들을 저장할 mongoDB url을 넣어준다(위에 한 방법)
from pymongo import MongoClient
client = MongoClient('mongodb+srv://test:sparta@cluster0.ybbyzho.mongodb.net/?retryWrites=true&w=majority')
db = client.dbsparta

# 여기부터는 mongoDB에 넣을 데이터를 크롤링 해서 어떤 데이터를 넣을지 한 것
import requests
from bs4 import BeautifulSoup

URL = "https://movie.daum.net/ranking/reservation"
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("#mainContent > div > div.box_ranking > ol > li")
for v in video_list:
    # print(v)
    rank = v.select_one(".rank_num").text
    title = v.select_one(".tit_item").text.strip("\n")
    rate = v.select_one(".txt_grade").text
    doc = {
        'title': title,
        'rank': rank,
        'rate': rate
    }
    db.movies.insert_one(doc) 
    # movies파일?을 만들고 크롤링한 다음의 데이터들을 mongoDB에 저장함

> 그럼 크롤링 할 웹 페이지에서 크롤링 한(제목_title, 순위_rank, 평점_rate) 데이터가 mongoDB에 새로운 movies를 만들고 저장된걸 확인 가능! 



영화제목 '[범죄도시3]'의 평점을 가져오기
from pymongo import MongoClient
client = MongoClient('mongodb+srv://test:sparta@cluster0.ybbyzho.mongodb.net/?retryWrites=true&w=majority')
db = client.dbsparta

movie = db.movies.find_one({'title':'범죄도시3'})
print(movie['rate'])​

 

from pymongo import MongoClient
client = MongoClient('mongodb+srv://test:sparta@cluster0.ybbyzho.mongodb.net/?retryWrites=true&w=majority')
db = client.dbsparta

movie = db.movies.find_one({'title':'범죄도시3'})
target_rate = movie['rate']

movies = list(db.movies.find({'rate':target_rate},{'_id':False}))
print(movies)


코드 해석

# 코드 해석
from pymongo import MongoClient
client = MongoClient('mongodb+srv://test:sparta@cluster0.ybbyzho.mongodb.net/?retryWrites=true&w=majority')
db = client.dbsparta

# movie는 mongoDB에 저장된 movies중에 title가 범죄도시3인 걸 뜻하는데
movie = db.movies.find_one({'title':'범죄도시3'})
# print(movie['rate']) : 6.9 -> (mongoDB에 저장된 movies중에 title가 범죄도시3)인 movie의 평점
# target_rate라고 칭할꺼야 (mongoDB에 저장된 movies중에 title가 범죄도시3)인 movie의 평점을
target_rate = movie['rate']

# movies는 mongoDB에 저장된 리스트중 movies에서 찾을껀대 
# rate가 target_rate인걸 찾을꺼야, 단 id는 제거하고
movies = list(db.movies.find({'rate':target_rate},{'_id':False}))
print(movies)

> 범죄도시3와 같은 평점은 없어서 범죄도시에 대한 정보만 나옴


'[범죄도시3]'의 평점과 같은 평점의 영화 제목들을 가져오기

from pymongo import MongoClient
client = MongoClient('mongodb+srv://test:sparta@cluster0.ybbyzho.mongodb.net/?retryWrites=true&w=majority')
db = client.dbsparta

movie = db.movies.find_one({'title':'범죄도시3'})
target_rate = movie['rate']

movies = list(db.movies.find({'rate':target_rate},{'_id':False}))
for a in movies:
    print(a['title'])
    
# movies를 돌면서 가져와 title를

> movies는 범죄도시3와 같은 평점을 가진 것의 정보를 담고 있고 그 같은 평점을 가지고 있는 데이터의 title을 가져오는것, 다만 범죄도시3와 같은 평점이 없어서 범죄도시3만 출력된것


'[범죄도시3]' 영화의 평점을 0으로 만들기

from pymongo import MongoClient
client = MongoClient('mongodb+srv://test:sparta@cluster0.ybbyzho.mongodb.net/?retryWrites=true&w=majority')
db = client.dbsparta

db.movies.update_one({'title':'범죄도시3'},{'$set':{'rate':'0'}})

 


3주차 숙제

지니뮤직의 1~50위 곡을 스크래핑 

# mongoDB 연결
from pymongo import MongoClient
client = MongoClient('mongodb+srv://test:sparta@cluster0.ybbyzho.mongodb.net/?retryWrites=true&w=majority')
db = client.dbsparta

# requests로 웹 사이트 연결
# bs4로 크롤링 준비
import requests
from bs4 import BeautifulSoup

URL = "https://www.genie.co.kr/chart/top200?ditc=M&rtm=N&ymd=20230101"
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')

# songs로 모두 긁어오고
songs = soup.select('#body-content > div.newest-list > div > table > tbody > tr')

# songs로 가져온 정보들을 돌아가면서 다음과 같은 데이터만 추출
for song in songs:
    title = song.select_one('td.info > a.title.ellipsis').text.strip()
    rank = song.select_one('td.number').text[0:2].strip()
    artist = song.select_one('td.info > a.artist.ellipsis').text
    print(rank, title, artist)

for song in songs:
    title = song.select_one('td.info > a.title.ellipsis').text.strip()
    rank = song.select_one('td.number').text[0:2].strip()
    artist = song.select_one('td.info > a.artist.ellipsis').text
    print(rank, title, artist)

> .stip --> 앞뒤공백을 지워줌
> [0:2] -->0에서2까지라는 뜻으로 두가지만 나타남

.select 할때 참고

# 선택자를 사용하는 방법 (copy selector)
soup.select('태그명')
soup.select('.클래스명')
soup.select('#아이디명')

soup.select('상위태그명 > 하위태그명 > 하위태그명')
soup.select('상위태그명.클래스명 > 하위태그명.클래스명')

# 태그와 속성값으로 찾는 방법
soup.select('태그명[속성="값"]')

# 한 개만 가져오고 싶은 경우
soup.select_one('위와 동일')
Comments