On a couch

[3주차] python 본문

프론트엔드 공부/스파르타 웹개발 종합반

[3주차] python

couch 2022. 2. 3. 00:07

일지

더보기

22.02.03

노마드코딩 한다고 잠시 미뤄뒀던 걸 다시 이어서 하려니까 손에 안 잡혀 죽는 줄 알았다.

그 사이 클론코딩 하나 완성하고 기본서도 사서 읽었다.

기본서도 이것도 2회는 돌려야 하는데 마음만 급하고 손에는 잘 안 잡혀서 더 조급하다.

 

파이썬 드디어 해 봤다. 듣던대로 더 단순하기도 한데, 기본적으로는 js랑 크게 다르지 않아서 안심도 된다.

스파르타 들을 때마다 흥선대원군 된 느낌이다.

 

22.02.04

흥선대원군 뺨때기 때리고 정신차려라. 갈 길이 멀다.

3주차 강의 간단한 내용인데도 집중 안 돼서 진짜 여러번 봤는데 덕분에 이해는 잘 하고 넘어가는 것 같다.어차피 안 쓰면 또 까먹겠지만 한번 이해 했던 건 다르겠지.

 

파이썬 문법 배운 것

{ }와 ; 쓰지 않고 들여쓰기와 : 로 포함관계를 구분한다.

for문 쓸 때 i++도 필요없다.

for 어레이 속 요소1개  in 어레이(전체) : 
       ~어레이 속 요소1개를 이렇게 저렇게~

하면 전체 어레이/리스트에서 각각의 요소를 1개씩 뽑아서 알아서 돌려서 출력해 줌.

for 뒤에 오는 이름은 아무렇게나 붙여도 상관없음.

*어레이[어레이속요소1개] 이런 식으로 쓰면 오류 남.

 어레이속요소1개  <---- 이게 이미 어레이[ i ]이기 때문.

 

파이썬으로 크롤링

사용하는 라이브러리

1. 코드단에서 정보를 요청하는 것      -> requests 라이브러리가 해 줌

2. 요청해서 가지고 온 html들 중 원하는 정보를 잘 솎아내는 것  -> beatyfulsoup4 라이브러리가 해 줌

 

beatyfulsoup 사용법

# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
soup = BeautifulSoup(data.text, 'html.parser')

# select를 이용해서, tr들을 불러오기
movies = soup.select('#old_content > table > tbody > tr')

*copy.select() 메소드로 가져오고자 하는 elem의 선택자 입력

    1) select_one( '선택자' )

    2) select( '선택자'

 *객체 key 로 선택

    ['key 이름']    

 

크롤링은 정답이 없다! 사이트마다 상태를 보고 어떻게 가져올 지 전략 세우는 것.

 

mongoDB와 ROBO T3 사용

mongodb : NoSQL으로 분류. 데이터를 테이블로 저장하지 않고 array로 쌓아 둠.

robot3 : mongodb 시각화 프로그램.

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

# insert / find / update / delete

# 저장 - 예시
doc = {'name':'bobby','age':21}
db.users.insert_one(doc)

# 한 개 찾기 - 예시
user = db.users.find_one({'name':'bobby'})

# 여러개 찾기 - 예시 ( _id 값은 제외하고 출력)
same_ages = list(db.users.find({'age':21},{'_id':False}))

# 바꾸기 - 예시
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})

# 지우기 - 예시
db.users.delete_one({'name':'bobby'})

 

지니뮤직 크롤링하기

requests, bs4, pymongo를 먼저 import하기.

크롤링해 올 정보들 중 html 경로가 겹치는 부분은 trs로 일단 묶어 둠.

이후 tr 뒤에서 더 필터링해서 나오는 정보는 다른 이름으로 정의.

필요한 정보 앞뒤에 공백이 있다거나 하면 정리해 줘야 함.

rank에서는 숫자마다 뒤에 '/n'이 붙어있길래 뒤에서부터 2번째까지를 [0:-1]로 지움.

 

*문자열.strip()  :  문자열 앞뒤의 공백을 전부 제거

*문자열.split('기준')  : 원하는 표식을 기준으로 자른 뒤 list로 만듦. 그 중 원하는 문자열이 몇 번째 항목인지 [n]으로 지정해줘야 함.

*문자열[start : end] : 엑셀의 left, right 함수 같은 것. 왼쪽의 특정 지점(첫번째 문자는 0)부터 오른쪽의 특정 지점(음수 가능)까지 선택해 줌.