본문 바로가기

Plo Hanghae99/Plo Ready for hanghae99

Ready For Hanhae -3주차-

 

항해 D-88

Ready For Hanghae


-3주차 개발일지-

Python  , Python Package , Requests , 크롤링 , RDBMS(SQL) , NO-SQL , Pymongo

[Python] 직관적이며 인간 친화적인 고차원 언어 라이브러리가 다양하고 폭넓으며 문법이 직관적이다.
[Python Package] 파이썬의 강점이며 다양한 기능을 개발자들이 미리 구현해놓은 패키지가 다양하다.
[Request (Package) ] 파이썬의 패키지 중 하나이며 이전 배웠던 Ajax와 같이 데이터베이스에서 데이터를 가져온다.
[Crawling , Scraping ] 웹 페이지를 그대로 가져와 데이터를 추출해내는 행위이다.
[RDBMS(SQL)] 엑셀과 같이 행,열에 데이터를 저장해두는 정형화된 데이터 베이스 (MS-SQL , MY-SQL)
[NO-SQL] 딕셔너리 형태로 데이터를 자유롭게 저장해두는 데이터 베이스
[Pymongo] Python으로 mongoDB 데이터 베이스를 다루는 파이썬 라이브러리
[ROBO 3T] mongoDB 를 다루기위한 GUI를 제공하는 IDE

 


- Mini Project [ 1 ] -

[네이버 영화 순위 크롤링하기]

# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta


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')

# 코딩 시작

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

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']
        point = tr.select_one('td.point').text

        print(title ,rank , point )

        doc = {
            'rank'  : rank ,
            'title' : title ,
            'point' : point
        }
        db.movies.insert_one(doc)

 

Requests , Beautifulsoup을 이용하여

네이버의 영화 순위를 크롤링

순위 , 영화명 , 평점 순으로 데이터 정리 후

pymongo와 robo 3T를 이용하여

mongoDB형태의 데이터 베이스를 저장하는 프로젝트

이전에 머신러닝 교육을 받았던 적이 있기에 

파이썬의 활용은 크게 어렵지 않았으며 

새로 배우는 파이썬 패키지들이 흥미롭고 새롭게 다가왔다.

 

 

 

 

 


 - Mini Project [ 2 ] -

[GenieMusic Crawling]

# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta


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')

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

for line in lines:
    ranks = line.select_one('td.number').text.strip()
    singers = line.select_one('td.info > a.artist.ellipsis').text.strip()
    names = line.select_one('td.info > a.title.ellipsis').text.strip()

    rank = ranks.strip("상승").strip("하강").strip("유지").strip("new")
    rank_final = rank[0:2].strip()

    print(rank_final,singers , names)

앞서 배운 패키지와 내용들을 토대로 지니뮤직의 실시간 음원순위를 크롤링 후 정리하는 숙제였다.

수업 때 다뤘던 네이버 영화순위 웹과 달리 지니뮤직의 실시간 음원순위 웹은 내가 필요로하는 html태그에 자식태그가 있었기에

크롤링 했을 때에 내가 원하는 데이터와 함께 자식태그까지 긁어왔다.

처음에는 자식태그 없이 부모태그만 가져올 수 없을까 하는 생각으로 구글링을했으나 해결되지 않았고

str타입 데이터의 슬라이싱을 통하여 필요한 부분만 인덱싱하는 방식으로 해결했다.

숙제 해설영상을 통하지않고 스스로 해결했음에 뿌듯함을 느꼈다.


-Review-

 

3주차에는 올해 여름 세달동안 머신러닝 수업에서 배웠던 파이썬이 핵심언어였다.

한번 교육을 들었던적이 있기에 파이썬 자체는 크게 어렵지 않았으나

mongoDB , Robo3T 등 데이터베이스와 데이터를 다루는 IDE

pymongo , Request 등 새로운 패키지들에 적응하는데에 조금 시간이 걸렸던 것 같다. 

'Plo Hanghae99 > Plo Ready for hanghae99' 카테고리의 다른 글

Ready For Hanhae -4주차-  (0) 2021.12.15
Ready For Hanhae -2주차-  (0) 2021.12.04
Ready For Hanhae -1주차-  (0) 2021.11.27