Summary #3 Python, Web-crawling, MongoDB

1. Python

일종의 컴퓨터언어 번역팩(변환을 도와줌)

기본문법

기존의 javascript 문법에 비해 직관적임

1) 변수

let 사용하지 않음
console.log() 대신에 print() 로 출력함

2) 자료형

마찬가지로 let 사용하지 않음
list, dict는 javascript 형식과 동일함

3) 함수

function 함수이름() {
	실행문
}
console.log()

로 출력하는 기존 방식에서

def 함수이름():
	실행문

여러함수값을 사칙연산으로 활용할 경우 result 값을 활용하여

result = 함수이름() + 함수이름()
print(result)

로 출력함

4) 조건문

기존 javascript 문법

if (조건) {
	실행문
} else {
	실행문
}

python 문법

if 조건:
	print()
else:
	print()

5) 반복문

리스트의 요소들을 꺼내쓰는 형태
무조건 리스트와 함께 쓰임

예시

fruits = ['사과','배','감','귤']

for fruit in fruits:
	print(fruit)

기존 javascript 문법

for (let i = 0; i < length(범위); i++) {
	실행문
}

python 문법

for 꺼내쓰고자하는 것 in 리스트:
	print()

파이썬 패키지 설치(외부 라이브러리)

라이브러리는 pip(python install package)를 이용하여 가상환경(venv)에 설치
가상환경: 실행환경을 격리시켜주는 프로젝트별 공구함

mac: PyCharm-Preference-Python Interpreter로 이동 후 '+'버튼 누른 뒤 패키지 설치

1) requests 패키지

기본세팅

import requests

r = requests.get('정보를 get하고자 하는 url')
rjson = r.json()

gus = rjson['list']

for gu in gus:
	print()

2. 크롤링(웹스크래핑)

Get한 정보를 솎아내는 과정
bs4(beautifulsoup4) 패키지 추가설치 필요

기본세팅

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('정보를 get 하고자 하는 url',headers=headers)

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

1) select(선택하여 데이터 불러오기)

soup.select('태그명')
soup.select('.클래스명')
soup.select('#아이디명')

soup.select('상위태그명 > 하위태그명 > 하위태그명')

soup.select('태그명[속성="값"]')

//한개만 가져오고 싶은 경우
soup.select_one('위와 동일')

2) 선택자 찾는 방법

웹페이지상에서 마우스 오른쪽 클릭 '검사'
원하는 태그에서 마우스 오른쪽 클릭
copy-copy selector

3. MongoDB

DB(데이터베이스): 데이터 쌓기(보이지않음)
robo 3T: 쌓여지는 데이터를 시각화해주는 프로그램

DB를 왜 사용할까?

데이터를 구별해서 사용성을 높이기 위해

DB의 두가지 종류

1) SQL: 정형화 / 변경하기 어려움 / 분석하기 쉬움
2) NoSQL: 비정형화 / 변경쉬움 / SQL보다 분석하기 어려움

MongoDB는 NoSQL에 속한다.

pymongo 패키지 설치

mongoDB를 조작하기 위한 라이브러리

기본세팅

from pymongo import MongoClient           
client = MongoClient('localhost', 27017)  
// mongoDB는 27017 포트 사용함
db = client.dbsparta

1) insert(DB에 데이터 삽입)

//'users'라는 collection에 {'name':'이름','age':숫자}를 넣습니다.

db.users.insert_one({'name':'john','age':30})

2) find(DB에서 데이터 찾기)

//데이터 모두 보기

all_users = list(db.users.find({}))

//특정 조건(같은 나이로 설정됨)의 데이터 모두 보기
//'_id'값은 랜덤으로 지정됨으로 'false'처리하여 찾지 않음

same_ages = list(db.users.find({'age':숫자},{'_id':False}))

//하나만 찾고자 할때(find_one)

user = db.users.find_one({'name':'이름'})

3) update_one/many(DB데이터 변경)

DB 하나 변경 one, 전체 변경 many 사용

db.people.update_one({찾을조건},{ '$set': {어떻게바꿀지} })
//찾을조건과 어떻게바꿀지는 key:value 형태의 객체로 입력

4) delete(DB데이터 삭제)

DB 하나 삭제 one, 전체 삭제 many 사용
거의 사용하지 않는 기능

db.people.delete_one({삭제할조건})
//삭제할조건은 key:value 형태의 객체로 작성

4. Genie 뮤직 1~50위 곡 스크래핑하기

인덱싱(Indexing)과 슬라이싱(Slicing)

인덱싱: [인덱스번호] 로 특정위치의 문자 하나를 추출하는 것
슬라이싱: [start : stop : step] 으로 여러개의 문자를 추출하는 것

start는 추출하고자 하는 문자열 첫 문자의 index,
stop은 추출하고자 하는 문자열 마지막 문자의 index+1,
step은 증가폭으로 생략가능하며 기본값은 1

예)

text = 'ABCD'
text[0:2:1] 혹은 [0:2]

첫 문자 'A'의 index값 0 /
마지막 'B'의 index값 1+1 = 2 /
증가폭 기본값 1

= A,B 출력

rank = tr.select_one('td.number').text[0:2]

에서 text만 출력하였을 때

1
(공백)
1상승

으로 출력되기 때문에 text를 정돈해줄 필요가 있었음

text[0:2] 적용시 '1'만 출력 나머지는 공백처리됨

strip 함수(불필요한 내용 지워줌)

strip() 사용 시, ()을 비워두면 공백을 지운다는 의미

rank = tr.select_one('td.number').text[0:2].strip()

나머지 공백처리된 부분을 지워줌으로 rank 정리!

좋은 웹페이지 즐겨찾기