[스파르타 웹개발 종합반] 3주차 정리
이번주에는 생각보다 시간이 나지 않아서 진도가 많이 지지부진 했습니다.
이번에는 파이썬과 파이썬 패키지, 그리고 웹크롤링, MongoDB를 이용해보았는데, 파이썬은 기초를 알고 있어서 쉽게 따라갔지만 그 외에는 다 처음 다루는 거라서 조금 버벅거렸네요.
파이썬은 다른 언어들에 비해서 직관적이라서 보기에는 쉽다는 장점이 있고 변수를 선언할 때 따로 앞에 무슨 형인지 안 적어도 되는 점이 편한 것 같아요. 그리고 소괄호 없이 탭으로 구분이 가능하고...
# 수학문제에서
f(x) = 2*x+3
y = f(2)
y의 값은? 7
# 참고: 자바스크립트에서는
function f(x) {
return 2*x+3
}
# 파이썬에서
def f(x):
return 2*x+3
y = f(2)
y의 값은? 7
fruits = ['사과','배','감','귤']
for fruit in fruits:
print(fruit)
패키지?
Python 에서 패키지는 모듈(일종의 기능들 묶음)을 모아 놓은 단위. 이런 패키지 의 묶음을 라이브러리라 볼 수 있다.
가상환경으로 프로젝트 별로 패키지들을 담을 수 있다.
FILE > Setting > Project : > Python Interpreter에 들어가면 패키지들을 볼 수 있고 다운 또한 받을 수 있다.
+를 클릭하면
원하는 패키지를 install 할 수 있다.
웹 크롤링?
조직적, 자동화된 방법으로 웹을 탐색하는 프로그램. 즉, 웹 상에 존재하는 콘텐츠를 수집하는 작업이다.
패키지는 Requests 와 bs4를 이용한다.
F12를 통해 개발 도구를 킨 상태에서
필요한 부분에 오른쪽 클릭하여 Copy > Copy selector 를 하면 선택자를 카피할 수 있다. 이를 이용하여 코딩
import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient
client = MongoClient('localhost', 27017) #로컬호스트 몽고db에 접속합니다.
db = client.dbsparta #dbsparta라는 db에 접속합니다. 없으면 자동으로 생성합니다.
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.nhn?sel=pnt&date=20200303',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
#old_content > table > tbody > tr:nth-child(2)
trs = soup.select('#old_content > table > tbody > tr')
#old_content > table > tbody > tr:nth-child(2) > td.title > div > a
#old_content > table > tbody > tr:nth-child(2) > td:nth-child(1)
#old_content > table > tbody > tr:nth-child(2) > td.point
for tr in trs:
a_tag = tr.select_one('td.title > div > a')
if a_tag is not None:
title = a_tag.text
rank = tr.select_one('td:nth-child(1) > img')['alt']
star = tr.select_one('td.point').text
doc = {
'rank':rank,
'title':title,
'star':star
}
print(title, rank, star)
이렇게 나온다.
공통적인 부분은 tr로 담아두고 나머지 부분을 .select_one 을 이용해 가리키는 방식
MongoDB
No SQL
딕셔너리 형태로 데이터를 저장해두는 DB. 즉 데이터 하나 하나 마다 같은 값들을 가질 필요가 없게 되어 자유로운 형태의 데이터 적재에 유리한 대신, 일관성이 부족할 수 있다.
라고 해도 결국 DB이기 때문에,
- 저장
- 찾기
- 수정
- 삭제
네가지만 할 줄 알면 대부분 사용할 수 있다.
# 저장 - 예시
doc = {'name':'bobby','age':21}
db.users.insert_one(doc)
# 한 개 찾기 - 예시
user = db.users.find_one({'name':'bobby'})
# 여러개 찾기 - 예시 ( _id 값은 제외하고 출력)
same_ages = list(db.users.find({'age':21},{'_id':False}))
# 바꾸기 - 예시
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})
# 지우기 - 예시
db.users.delete_one({'name':'bobby'})
위의 웹크롤링과 MongoDB를 함께 사용하기
정확히는 이미 웹크롤링 한 것을 DB에 저장해서 이를 연습하는 것
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta
## 코딩 할 준비 ##
target_movie = db.movies.find_one({'title':'매트릭스'})
print (target_movie['star'])
target_star = target_movie['star']
movies = list(db.movies.find({'star':target_star}))
for movie in movies:
print(movie['title'])
db.movies.update_one({'title':'매트릭스'},{'$set':{'star':0}})
이러면 저장된 매트릭스 영화의 평점이 0이 된다.
3주차 숙제 :
지니 뮤직 1~50위 곡 스크래핑 하기
순위와 곡제목이 깔끔하게 나오지 않아서 빈공간을 제거해주는 strip()함수를 이용했다.
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://www.genie.co.kr/chart/top200?ditc=D&ymd=20200403&hh=23&rtm=N&pg=1',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
#body-content > div.newest-list > div > table > tbody > tr:nth-child(1)
trs = soup.select('#body-content > div.newest-list > div > table > tbody > tr')
#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.number
#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info
#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info > a.artist.ellipsis
for tr in trs:
rank = tr.select_one('td.number').text[0:2].strip()
title = tr.select_one('td.info > a.title.ellipsis').text.strip()
singer = tr.select_one('td.info > a.artist.ellipsis').text.strip()
print(rank, title, singer)
결과는 이렇게 나온다.
잠깐 해멘 부분은 text[0:2]
이건 글자의 2번째 까지만 출력해준다는 뜻이다. 그냥 text 했더니 제대로 나오지 않았다.
어찌어찌 스파르타 3주차 끝!
정리가 다소 간단대충이지만 어쩔 수 없다. 더 구구절절 적기엔 그게 더 어려운 것 같다.
Author And Source
이 문제에 관하여([스파르타 웹개발 종합반] 3주차 정리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@203095/스파르타-웹개발-종합반-3주차-정리저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)