yyndevv 2022. 7. 21. 22:25

1. 파이썬 기초 문법

// 리스트 예시
fruits = ['사과','배','배','감','수박','귤','딸기','사과','배','수박']

// fruits 리스트에 있는 데이터를 하나씩 꺼내서 쓰겠다! 보통 단수-복수 형태
for fruit in fruits:
    print(fruit)

// 딕셔너리 예시
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['name'])

repeat 함수: 특정 문자열 반복 출력

// 특정 문자열을 반복해서 출력하는 내장함수
let star_image = '⭐'.repeat(star)

strip 함수: 문자열에서 특정 문자 제거, 공백 제거

strip([chars])  // 인자로 전달된 문자를 문자열의 왼쪽과 오른쪽에서 제거
lstrip([chars]) // 인자로 전달된 문자를 문자열의 왼쪽에서 제거
rstrip([chars]) // 인자로 전달된 문자를 문자열의 오른쪽에서 제거
strip() // 문자열의 공백 제거

replace 함수: 문자열의 특정 부분 대체

str = str.replace("바꿀 문자열","대체할 문자열")

 

2. 크롤링

가상 환경(virtual environment; venv): 프로젝트별로 라이브러리를 모아두는 곳 

패키지가 담기는 공간이므로 우리는 건드릴 필요가 없다!

라이브러리 설치 [파일]-[설정]-[프로젝트]-[Python 인터프리터]-[+ 버튼]-[requests]-[패키지 설치]

requests는 Ajax와 비슷한 느낌

크롤링 작업을 위해 필요한 두가지

1. 요청해서 html을 가져오는 것 → requests 패키지

2. html을 가져온 다음 내가 필요한 데이터의 이름 확인 → beautifulsoup 패키지

 

크롤링 기본 세팅

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'}
// headers 용도: 우리가 코드에서 날리는 콜을 사람이 브라우저에서 날리는 것처럼 해줌
data = requests.get('크롤링할 url', headers=headers)

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

 

3. pymongo를 통한 mongoDB 제어

DB

데이터를 잘 쌓고 잘 가져오게 하는 프로그램으로 index로 순서로 데이터를 정렬함

클라우드 환경에서 제공하는 DB가 트렌드 → 유저 몰리는 경우, DB 백업 모니터링 수월

 

SQL vs NoSQL

SQL: 정형화된 데이터

장점: 데이터 이상한 값 들어오지 않고 빨리 찾을 수 있음 단점: 유연한 대처 어려움 확장 등

NoSQL(Not only SQL): 칸 없이 그때 그때 들어오는대로 쌓음 대표적으로 mongoDB

장점: 유연한 대처 가능, 초기 서비스나 스타트업에서 사용

 

mongoDB 기본 코드

from pymongo import MongoClient
client = MongoClient('여기에 URL 입력')
db = client.dbsparta

url칸에 들어갈 주소. <password> 부분에 db 패스워드로 설정해서 입력

 

pymongo 조작어 

from pymongo import MongoClient
client = MongoClient('mongodb+srv://test:sparta@cluster0.cflsglu.mongodb.net/?retryWrites=true&w=majority')
db = client.dbsparta

# 저장 - 예시
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'})

BeautifulSoup(bs4) 기본 코드

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

 

bs4를 활용한 크롤링 순서

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

for music in all_music:
    rank = music.select_one('td.number').text[0:2].strip()
    title = music.select_one('td.info > a.title.ellipsis').text.strip()
    artist = music.select_one('td.info > a.artist.ellipsis').text

    if "19금" in title:
        title = title.replace("19금","").strip()

    print(rank, title, artist)

3주차 과제는 지니 뮤직 크롤링! 15위에 있는 Peaches가 19금 딱지가 붙어있어서 그 부분 처리하는 것 때문에 머리가 아팠다. 덕분에 replace 함수를 다시 복습하게 된 것은 좋지만.. 

* 3주차를 마치며 *

강사님이 3주차 수업은 웹 서비스를 구성하는 두 가지: 눈에 보이는 것인 HTML, CSS,  Javascript와 눈에 보이는 것을 주는 서버 활용을 각각 배운 것이라고 정리해주셨다. 4~5주차에는 3주차에 배운 두 가지를 만나게 하는 작업을 배우게 된다고 하셨는데 기대된다.

 

이번 수업을 들으면서 기존에 배웠던 파이썬, C언어 등의 언어와 이를 웹 개발에서 활용하는 것이 얼마나 다른지를 많이 느끼게 되는 것 같다. 많이 들어보았던 크롤링도 실제로 해보니 어떤 도구를 활용하고 어떤 형태로 작업을 해야 하는지를 이제야 내가 조금 배웠구나 하는 생각을 했다. 무엇보다도 실제로 크롤링을 해서 내가 원하는 데이터를 뽑아내는 작업이 굉장히 재미있었다. 크롤링 관련해서 이후에도 더 공부를 하고 싶다.

 

진도를 이번 주에는 조금 빨리 끝냈다. 4주차도 힘내서 잘 들어봐야지!