[スパルタコードクラブ]ネットワーク開発総合クラス3週目


ネットワーク開発総合クラス3週目


📝学識

  • Pythonでスクロール(スクラッチ)
  • pymongoによるmongodb制御
  • Pythonパッケージのインストール


    👉 セットメニュー.ライブラリ.→
    Pythonでは、パッケージはモジュール(機能)のセットです.これらのパッケージのセットをライブラリと見なすことができます.これで、外部ライブラリを使用するためにパッケージをインストールします.
    つまり、ここにパッケージをインストール=外部ライブラリをインストール!
    使用
  • pip(python install package)requestsbs4pymongo設置
  • Requestsライブラリの使用


    import requests # requests 라이브러리 설치 필요
    
    r = requests.get('http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99')
    rjson = r.json()
    
    print(rjson['RealtimeCityAir']['row'][0]['NO2'])
  • 全地域IDEX MVL定価
  • import requests # requests 라이브러리 설치 필요
    
    r = requests.get('http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99')
    rjson = r.json()
    
    
    gus = rjson['RealtimeCityAir']['row']
    
    for gu in gus:
        gu_name = gu['MSRSTE_NM']
        gu_mise = gu['IDEX_MVL']
        print(gu_name, gu_mise)
  • IDEX MVL値が60未満の九拍
  • import requests # requests 라이브러리 설치 필요
    
    r = requests.get('http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99')
    rjson = r.json()
    
    
    gus = rjson['RealtimeCityAir']['row']
    
    for gu in gus:
        gu_name = gu['MSRSTE_NM']
        gu_mise = gu['IDEX_MVL']
        
        if gu_mise < 60:
    	print(gu_name, gu_mise)

    Webスクリプト(スクロール)

  • スクロール基本設定
  • 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.nhn?sel=pnt&date=20200303',headers=headers)
    
    # HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
    # soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨
    # 이제 코딩을 통해 필요한 부분을 추출하면 된다.
    soup = BeautifulSoup(data.text, 'html.parser')
    
    #############################
    # (입맛에 맞게 코딩)
    #############################
  • ラベルのテキストを撮りたい場合→ラベル.text
  • タグに属性を印刷したい場合→タグ[「属性」]
  • NAVERムービーページ->ムービータイトルの取得

    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.nhn?sel=pnt&date=20200303',headers=headers)
    
    # HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
    # soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨
    # 이제 코딩을 통해 필요한 부분을 추출하면 된다.
    soup = BeautifulSoup(data.text, 'html.parser')
    
    #############################
    # (입맛에 맞게 코딩)
    #############################
    
    movies = 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) >
    
    for movie in movies:
        a_tag = movie.select_one('td.title > div > a')
        if a_tag is not None:
            rank = movie.select_one('td:nth-child(1) > img')['alt']
            title = a_tag.text
            rate = movie.select_one('td.point').text
    
            print(rank, title, rate)
    
    結果
    /usr/local/bin/python3.9 /Users/munbyeongmin/Desktop/sparta/pythonprac/movie.py
    01 그린 북 9.60
    02 가버나움 9.59
    03 베일리 어게인 9.52
    04 주전장 9.52
    05 포드 V 페라리 9.51
    06 아일라 9.49
    07 원더 9.49
    08 당갈 9.47
    09 쇼생크 탈출 9.44
    010 터미네이터 2:오리지널 9.43
    11 보헤미안 랩소디 9.42
    12 덕구 9.41
    13 나 홀로 집에 9.41
    ...

    データベースの概要

  • DBの2種類
  • 👉 RDBMS(SQL)
    行または列の外観を持つ指定したセルにデータを格納するのと同じです.50万個のデータの場合、真ん中に突然1つの列を追加するのは難しい.しかしながら、データは固定されているため、データの整合性または/分析は非常に容易である可能性がある.
    ex)MS-SQL、My-SQL等
    No-SQL
    ディック形式でデータを格納するDB.したがって、データごとに同じ値を指定する必要はありません.フリーフォームのデータ・ロードに不利な一貫性が欠けている可能性があります.
    ex) MongoDB
  • python mongoをインストールしてmongodyを操作する
  • pymongo操作DBを使用する

  • pymongo基本コード
  • from pymongo import MongoClient
    client = MongoClient('localhost', 27017)
    db = client.dbsparta
    
    # 코딩 시작
  • 基本CRUDコード概要
  • # 저장 - 예시
    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'})

    Webスクリプトの結果をDBに保存

  • insert練習
  • import requests
    from bs4 import BeautifulSoup
    
    from pymongo import MongoClient             # pymongo를 임포트
    client = MongoClient('localhost', 27017)    # localhost, 27017포트로 연결
    db = client.dbsparta                        # 'dbsparta'라는 이름의 db 생성
    
    # 타겟 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.nhn?sel=pnt&date=20200303',headers=headers)
    
    # HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
    # soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨
    # 이제 코딩을 통해 필요한 부분을 추출하면 된다.
    soup = BeautifulSoup(data.text, 'html.parser')
    
    #############################
    # (입맛에 맞게 코딩)
    #############################
    
    movies = soup.select('#old_content > table > tbody > tr')
    
    for movie in movies:
        a_tag = movie.select_one('td.title > div > a')
        if a_tag is not None:
            rank = movie.select_one('td:nth-child(1) > img')['alt']
            title = a_tag.text
            rate = movie.select_one('td.point').text
    
    	# db에 넣을 dic 만들어주기
            dic = {
                'rank' : rank,
                'title': title,
                'rate': rate
            }
    
    	# db에 insert
            db.movies.insert_one(dic)
    
  • 選択・更新練習
  • from pymongo import MongoClient
    client = MongoClient('localhost', 27017)
    db = client.dbsparta
    
    # 코딩 시작
    
    # 매트리스 평점 가져오기
    target_movie = db.movie_list.find_one({'title':'매트릭스'}) # 하나만 찾기
    # print(target_movie['rate'])
    
    # 매트리스의 평점과 같은 평점의 영화 제목들 가져오기
    rate = target_movie['rate']
    
    movies = list(db.movie_list.find({'rate':rate},{'_id':False}))
    
    for movie in movies:
        print(movie['title'])
    
    # 매트리스 영화의 평점을 0으로 만들기
    db.movie_list.update_one({'title':'매트릭스'}, {'$set':{'rate': 0}})

    Genieの音楽のウェブサイトの脚本を練習します

  • ランキング/曲名/歌手scraping
  • 音楽サイトhttps://www.genie.co.kr/chart/top200?ditc=D&ymd=20200403&hh=23&rtm=N&pg=1
    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://www.genie.co.kr/chart/top200?ditc=D&ymd=20200403&hh=23&rtm=N&pg=1',headers=headers)
    
    # HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
    # soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨
    # 이제 코딩을 통해 필요한 부분을 추출하면 된다.
    soup = BeautifulSoup(data.text, 'html.parser')
    
    #############################
    # (입맛에 맞게 코딩)
    #############################
    
    music_list = soup.select('#body-content > div.newest-list > div > table > tbody > tr')
    
    for music in music_list:
        name = music.select_one('td.info > a.title.ellipsis').text.strip()
        rank = music.select_one('td.number').text[0:2].strip()
        artist = music.select_one('td.info > a.artist.ellipsis').text
    
        print(rank, name, artist)
    
  • strip()使用
  • 結果
    /usr/local/bin/python3.9 /Users/munbyeongmin/Desktop/sparta/pythonprac/genie.py
    1 아로하 조정석
    2 시작 가호 (Gaho)
    3 처음처럼 엠씨더맥스 (M.C the MAX)
    4 이제 나만 믿어요 임영웅
    5 아무노래 지코 (ZICO)
    6 흔들리는 꽃들 속에서 네 샴푸향이 느껴진거야 장범준
    7 뭔가 잘못됐어 권진아
    8 WANNABE ITZY (있지)
    9 돌덩이 하현우 (국카스텐)
    10 어떻게 지내 (Prod. by VAN.C) 오반 (OVAN)
    11 METEOR 창모 (CHANGMO)
    12 화려하지 않은 고백 규현 (KYUHYUN)
    13 그때 그 아인 김필