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 정리!
Author And Source
이 문제에 관하여(Summary #3 Python, Web-crawling, MongoDB), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@lovvepearl/Summary3저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)