[스파르타코딩클럽 3주차]웹개발 종합반 Week I Learned

Dongchan Alex Kim·2023년 1월 23일
1

Week I Learned

목록 보기
12/14
post-thumbnail

날짜 : 2023년 1월 23일 월요일

📌 PLAN (~2/5)

  • 웹개발 종합반 강의 2회독 완료 → Velog 기술 블로그 정리까지 (3주차/총 5주차) (~1월/25일)
  • GIT & GITHUB 이해 및 사용법 숙달(2회 완료/총 5회)
  • 코딩테스트 맛보기 (Aft)
  • 토이프로젝트 맛보기 (Aft)

📌 WHAT TODAY?

웹 스크래핑(크롤링) & 데이터베이스 공부 회고시작(2주차)
Front-DAY 3 : Request 모듈을 이용한 JSON가져오기, 웹스크래핑 과정 숙달하기
강좌 : https://spartacodingclub.kr/online/web 웹개발 종합반_스파르타코딩클럽

  1. Requests 패키지 설치
  • Request 패키지는 http요청을 웹으로 보낼때 쓰는 패키지이다.

Request 패키지 json이랑 함께 이용해보기

import requests # requests 라이브러리 설치 필요
r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair')
rjson = r.json()

패키지?

- 모듈이 함수의 집합이라면 패키지(package)는 모듈을 모아놓은 
- 엄밀하게 말하면 ,라이브러리(library)는 패키지(package)의 집합으로 패키지보다 포괄적인 개념

  1. 웹 스크래핑(크롤링) 해보기

웹 스크래핑(크롤링)?

- 웹페이지에서 필요한 데이터들을 뽑아오는 작업을 일컫는다.

Beutifulsoup 라이브러리

- HTML,JSON들의 파일의 구문을 분석하는 모듈. 웹페이지를 표현하는 HTML을 분석하기 위해 사용
import requests
from bs4 import BeautifulSoup
#타겟 URL을 읽어서 HTML를 받아오고,
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)
# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
# soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨
# 이제 코딩을 통해 필요한 부분을 추출하면 된다.
soup = BeautifulSoup(data.text, 'html.parser')
import requests
from bs4 import BeautifulSoup

# URL을 읽어서 HTML를 받아오고,
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)

# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
soup = BeautifulSoup(data.text, 'html.parser')

# select를 이용해서, tr들을 불러오기
movies = soup.select('#old_content > table > tbody > tr')

# movies (tr들) 의 반복문을 돌리기
for movie in movies:
    # movie 안에 a 가 있으면,
    a_tag = movie.select_one('td.title > div > a')
    if a_tag is not None:
        # a의 text를 찍어본다.
        print (a_tag.text)
  • selector 사용법
    : select()는 조건에 맞는 태그를 여러개 가져옵니다.
    (1개만 가져와도 타입이 select_one와 다릅니다.)
    : select_one()은 조건에 맞는 태그를 한개만 가져옴
    (여러개 있어도 한개만 가져옵니다.)
# 선택자를 사용하는 방법 (copy selector)
soup.select('태그명')
soup.select('.클래스명')
soup.select('#아이디명')

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

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

# 한 개만 가져오고 싶은 경우
soup.select_one('위와 동일')
  1. 데이터베이스(DB), MongoDB
  • 나중에 쌓인 데이터들을 잘 쌓기 위해서 잘 정렬해놓은 프로그램이다.
    1. SQL : 행/열의 생김새가 정해진 엑셀에 데이터를 저장하는 것과 유사. 많은 자료가 모일수록 열을 하나 더하기는 어려울 것. BUT, 정형화되어 있는 만큼 데이터의 일관성이나 분석에 용이할 수 있음.
    2. NoSQL : 딕셔너리 형태로 데이터를 저장해두는 DB. 데이터 하나 하나마다 같은 값을 가질 필요가 없음. 자유로운 형태의 데이터 적재에 유리한 대신, 일관성이 부족할 수 있습니다. → 유연한 대처 가능

클라우드 형식의 DB → 유저가 몰리거나 / DB를 백업해야 하거나 / 모니터링 하기가 아주 용이함 → 'MongoDB Atlas' (NoSQL)

  1. MongoDB 연결 및 조작하기
  • mongoDB 라는 프로그램을 파이썬으로 조작하려면 특별한 라이브러리(package), pymongo가 필요.
from pymongo import MongoClient
import certifi

ca = certifi.where()
'''
SSL은 개인정보 보호를 제공하기 위해, 웹에서 전송되는 데이터를 암호화 한다. 
따라서, 데이터를 가로채려해도 거의 복호화가 불가능하다.
SSL은 클라이언트와 서버간에 핸드셰이크를 통해 인증이 이루어진다. 
또한 데이터 무결성을 위해 데이터에 디지털 서명을 하여 데이터가 의도적으로 도착하기 전에 조작된 여부를 확인한다.
-> SSL은 SSL인증서(=TLS인증서)가 있는 웹사이트만 실행할 수 있다. 인증서는 사람의 신분증과 유사하다고 볼 수 있다.
-> 특정 환경(특정 시스템 혹은 버전)에서는 지원을 하지 않는 경우가 있어서 certifi 라는 패키지를 설치하여 해결!
'''

client = MongoClient('여기에 URL 입력',tlsCAFile=ca)
db = client.dbsparta
  1. pymongo 사용법 요약
# 저장 - 예시
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'})
profile
Disciplined, Be systemic

0개의 댓글