항해 사전 준비기간 3주차 강의 정리

김형준·2022년 3월 20일
0

https://velog.io/@rlafbf222
<항해 99 사전 준비 기간>
웹 개발 종합반 개념 정리
3주차!!

  • 1강. 파이썬, GIT BASH 다운로드.

  • 2강. 2주차 복습
    1) 영화 리뷰 API AJAX로 호출해오기 (GET)
    2) html_temp 활용해서 값 넣어주기
    3) 자바스크립트 내장 반복 함수 사용하기 repeat.(반복 횟수)

let star_image = '⭐'.repeat(star)
  • 3강. 파이썬 시작하기
    1) 파이썬을 설치한다는 의미는 일종의 번역팩을 설치한다고 생각하면 된다,
    2) 파이썬 문법으로 된 코드를 컴퓨터 언어로 변환해줄 수 있도록 번역팩을 설치.
    3) 깃 배쉬 사용하여 새로운 repository에 커밋 완료.

  • 4강. 파이썬 기초 문법
    1) 변수 선언은 바로 해줄 수 있음.
    2) 함수에서 콜론(:)은 다음의 내용이 자신의 내용물임을 정의하는 용도로 쓰임.

def is_adult(age):
    if age > 20:
        print('성인 입니다.')
    else:
        print('성인이 아닙니다.')

is_adult(25)
3)	반복문의 형태는 변수 in 배열, 리스트 등등
4)	#반복문_리스트
fruits = ['사과','배','배','감','수박','귤','딸기','사과','배','수박']

count = 0
for fruit in fruits:
    if fruit == '배':
        count += 1

print(count)

#반복문_딕셔너리
people = [{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27}]

for person in people:
    if person['age'] > 20:
        print(person)
  • 5강. 파이썬 패키지 설치하기
    1) 가상환경(virtual environment)은 같은 시스템에서 실행되는 다른 파이썬 응용 프로그램들의 동작에 영향을 주지 않기 위해, 파이썬 배포 패키지들을 설치하거나 업그레이드하는 것을 가능하게 하는 격리된 실행 환경입니다.
    2) 즉, 프로젝트별로 패키지들을 담을 공구함
    3) Python에서 패키지는 모듈(일종의 기능들 묶음)을 모아 놓은 단위입니다. 이런 패키지의 묶음을 라이브러리라고 한다.
    4) 즉, 여기서는 패키지 설치 = 외부 라이브러리 설치
    5) 파이참 좌측 상단 파일 – 설정 – 프로젝트 – python 인터프리터 – 플러스 아이콘
    6) Requests 검색 후 install! (라이브러리 설치)

  • 6강.

import requests # requests 라이브러리 설치 필요

r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair')
rjson = r.json()

rows = rjson['RealtimeCityAir']['row']

for row in rows:
    gu_name = row['MSRSTE_NM']
    gu_mise = row['IDEX_MVL']

    if gu_mise < 85:
        print(gu_name, gu_mise)

1) Requests import 하기
2) Requests가 제공하는 함수 사용 (get, json)
3) Ajax로 연습했던 방식 그대로를 파이썬 문법으로!

  • 7강. 웹스크래핑(크롤링) 기초
    1) Bs4 package 설치 후 Beautiful Soup import 하기
    from bs4 import BeautifulSoup
    2) 코드
#마치 사람이 요청을 날린 것처럼 보여주기 위해 사용, 브라우저에서 요청한 것처럼 됨. (실제론 코드에서 날림)
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'}

# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦 
# soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨
data = requests.get('https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20210829',headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')

#구조를 먼저 파악해보기.
#old_content > table > tbody > tr:nth-child(2) > td.title > div > a
#old_content > table > tbody > tr:nth-child(4) > td.title > div > a

movies = soup.select('#old_content > table > tbody > tr')

for movie in movies:
    a = movie.select_one('td.title > div > a')
    if a is not None:
        print(a.text)
3)	태그 안의 텍스트는 태그.text // 속성은 태그.[‘속성’]
4)	BeautifulSoup 내 select에 미리 정의된 다른 방법들
# 선택자를 사용하는 방법 (copy selector)
soup.select('태그명')
soup.select('.클래스명')
soup.select('#아이디명')

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

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

# 한 개만 가져오고 싶은 경우
soup.select_one('위와 동일')
  • 8강. 웹스크래핑(크롤링) 연습
1)	<img src="https://ssl.pstatic.net/imgmovie/2007/img/common/bullet_r_r01.gif" alt="01" width="14" height="13">

2) 위와 같은 경우는 딕셔너리로 생각하면 쉬움

3)	따라서 alt값을 원한다면 변수[‘alt’]로 구할 수 있음.
  • 9강. DB 개괄
    1) DB를 쓰는 이유는 ‘나중에 잘 찾기 위해서’ 이다!
    2) DB의 종류에는 SQL과 NoSQL(Not Only SQL)이 있다.
    3) SQL(RDBMS): 관계형 모델을 기반으로함, 정형화된 데이터를 다루는 데 용이함
    4) NoSQL: 딕셔너리 형태로 데이터를 저장, 자유로운 형태의 데이터 적재에 유리함

  • 10~11강. mongoDB 시작하기 및 연결하기
    1) SSL Certi 관련 오류 발생 -> CERTIFI 패키지 설치 후, tlsCAFile=ca 넣어주기

from pymongo import MongoClient
import certifi

ca = certifi.where()
client = MongoClient('mongodb+srv://test:sparta@cluster0.6pe7g.mongodb.net/Cluster0?retryWrites=true&w=majority', tlsCAFile=ca)
db = client.dbsparta

doc = {
    'name': 'bob',
    'age': 27
}

db.users.insert_one(doc)
  • 12강. Pymongo로 DB 조작하기
    1) CRUD 해보기
    2) # 저장 - 예시
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'})
  • 13강. 웹 스크래핑 결과 저장하기
    1) 웹 스크래핑으로 긁어온 영화 정보들을 pymongo를 이용하여 MongoDB에 저장
2)	for movie in movies:
    title_tag = movie.select_one('td.title > div > a')
    rank_tag = movie.select_one('img')
    star_tag = movie.select_one('td.point')
    if title_tag is not None:
        title = title_tag.text
        rank = rank_tag['alt']
        star = star_tag.text
        doc = {
            'title': title,
            'rank' : rank,
            'star' : star
        }
        db.movies.insert_one(doc)
  • 14강. 웹스크래핑 결과 이용하기 Quiz
#가버나움의 평점 가져오기
movie = db.movies.find_one({'title':'가버나움'})
print(movie['star'])

#가버나움과 같은 평점의 영화 모두 가져오기
movie_list = list(db.movies.find({'star':movie['star']}, {'_id': False}))
for target_movie in movie_list:
    print(target_movie['title'])

#가버나움의 평점 0으로 바꾸기
db.movies.update_one({'title':'가버나움'},{'$set':{'star':'0'}})
    1. 숙제 지니 뮤직 스크래핑하기.
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=M&rtm=N&ymd=20210701',headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')

#순위
#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(2) > td.number

#제목
#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info > a.title.ellipsis
#body-content > div.newest-list > div > table > tbody > tr:nth-child(2) > td.info > a.title.ellipsis

#가수
#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info > a.artist.ellipsis
#body-content > div.newest-list > div > table > tbody > tr:nth-child(2) > td.info > a.artist.ellipsis

musics = soup.select('#body-content > div.newest-list > div > table > tbody > tr')


for music in musics:
    rank = music.select_one('td.number').text[0:2].strip()
    title = music.select_one('td.info > a.title.ellipsis').text.strip()
    singer = music.select_one('a.artist.ellipsis').text
    if '19금' in title:
        music.select_one('td.info > a.title.ellipsis').span.decompose()
        title = music.select_one('td.info > a.title.ellipsis').text.strip()
        print(rank, title, singer)
    else:
        print(rank, title, singer)

**특이사항: 15 순위에서 19금이 같이 나와 원하는 문자열이 제대로 나오지 않았다.
1) 자식태그를 제거하는 방법을 구글링
2) Decompose() 함수는 자식 태그를 제거하고 None을 리턴하는 함수
3) 이를 활용하여 자식태그인 span태그를 제거하고, 다시 그 결과를 title에 담아줌
4) 참조:https://mimah.tistory.com/entry/Python-BeautifulSoup%EB%A1%9C-%EC%A0%95%EC%A0%81-%EC%9B%B9-%EC%82%AC%EC%9D%B4%ED%8A%B8-%ED%8C%8C%EC%8B%B1%ED%95%98%EA%B8%B0
5) 앞에서 두 글자만 끊기! text[0:2]
6) 파이썬 내장 함수인 strip()

3주차 과제 url:https://github.com/Kim-HJ1986/pythonprac/blob/master/genie.py

profile
BackEnd Developer

0개의 댓글