항해 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 |