기록하는 개발자

3주차_Python, 크롤링, mongoDB 본문

학습 노트/항해 99 강의 정리

3주차_Python, 크롤링, mongoDB

hannah1009 2021. 12. 24. 20:20
728x90

1. python : 컴퓨터가 이해하는 명령어로 번역해주는 패키지, venv 폴더 --> 그대로 내버려 둬야 함 (라이브러리를 담아두는 폴더)

(1) 자바와 다른점
1. 변수 성질 특정하지 않는것 빼곤 자바와 거의 동일
2. 들여쓰기 --> 내용물, 중괄호가 없음

3. 리스트

예제) for문 어차피 list 값을 꺼내니까 문법을 간소화 함
fruits = ['사과','배','배','감','수박','귤','딸기','사과','배','수박']
count = 0
for fruit in fruits:
    if fruit == '수박':
        count += 1;

4. dictionary 형 for 문
for person in people:
    if person['age'] > 20:
        print(person)

+ python tip
에러는 밑에 줄부터 읽으면 편하다 
-> 에러 설명을 구글링하면 쉽게 처리할 수 있다

(2) 사용 package 설치

ctrl + alt + s ->python interpreter -> + -> package 이름 검색
( requests, bs4, pymongo )

 

+ bs4 -> pymongo CRUD 기본 문법

from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta

# insert, find, update, delete --> CRUD 기본

# 1. insert
doc = {'name':'Jane','age':21}
db.users.insert_one(doc)

#2. find
same_ages = list(db.users.find({'age':21},{'_id':False}))
same_ages = list(db.users.find({},{'_id':False})) # Select *

for person in same_ages:
    print(person)

user = db.users.find_one({'name':'bobby'}) # Select * user where name = 'bobby'
print(user)

#3. update
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})
db.users.update_many({'name':'Hannah'},{'$set':{'age':20}}) # update all

#4. delete
db.users.delete_one({'name':'bobby'})


(3) 크롤링, 스크랩핑
크롤링의 기본 이유 : 이미 받아온 값을 솎아내는 것

 

(4) DB
RDBMS(SQL) : 정형화된 데이터는 일관성이 있고, 분석에 용이, 자유롭게 적재하기 어려움, 엑셀형 
ex) MS-SQL, MySQL

No-SQL : 자유로운 형태의 데이터 적재에 유리, 일관성 부족, 딕셔너리 형 
ex) MongoDB

(5) homework

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=D&ymd=20200403&hh=23&rtm=N&pg=1',headers=headers)

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

# Rank #body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.number
# title #body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info > a.title.ellipsis
# singer #body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info > a.artist.ellipsis
songs = soup.select('#body-content > div.newest-list > div > table > tbody > tr')
for song in songs:
    rank = song.select_one('td.number').text[0:2].strip()
    title = song.select_one('td.info > a.title.ellipsis').text.strip()
    singer = song.select_one('td.info > a.artist.ellipsis').text

    print(rank, title, singer)
Comments