[항해99 사전스터디] 3주차 개발일지

rara_kim·2022년 10월 12일
0

항해99

목록 보기
3/18

과제 완성작

  • 지니뮤직의 1~50위 곡의 정보를 스크래핑

3주차에 공부한 것들

  1. python 기초
  2. 웹 스크래핑(크롤링)
  3. python을 활용한 mongoDB 제어

GitHub: 3주차 과제 완성작


웹 스크래핑(크롤링)

웹 스크래핑을 하기 위해 외부 라이브러리를 사용해야 하는데, 이를 위해서는 패키지를 설치해야한다.

💡파이썬 패키지 설치(macOS)
Preferences-> Project:프로젝트 이름 -> Python Interpreter -> +버튼 -> bs4, requests 설치

크롤링 기본 세팅

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('url',headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')
  • 타겟 URL을 읽dj HTML을 받아오고, HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만든다.
  • soup이라는 변수에 파싱이 용이해진 HTML이 담긴 상태가 된다.
  • 그리고 코드를 작성하여 필요한 부분을 추출하면 된다.

select / select_one

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('url',headers=headers)

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

# select를 이용하여 tr들 불러오기
movies = soup.select('#old_content > table > tbody > tr')

# movies(tr들)의 반복문 돌리기
for movie in movies:
    # movie 안에 a 가 있으면,
    a_tag = movie.select_one('td.title > div > a')
    if a_tag is not None:
        # a의 text를 찍어본다.
        print (a_tag.text)

select에 미리 정의된 다른 방법

# 선택자를 사용하는 방법
soup.select('태그명')
soup.select('.클래스명')
soup.select('#아이디명')

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

# 태그와 속성값으로 찾는 방법
soup.select('태그명[속성='']')

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

DB(데이터 베이스)

데이터 베이스에는 크게 SQL, NoSQL 두 가지 종류가 있다.

RDBMS(SQL)

행/열의 생김새가 정해진 엑셀에 데이터를 저장하는 것과 유사하다.
데이터 50만 개가 적재된 상태에서, 갑자기 중간에 열을 추가하기는 어려울 것이다.
그러나 RDBMS는 정형화되어 있어 데이터의 일관성이나 분석에 용이하다.
예) MS-SQL, MySQL 등


NoSQL

딕셔너리(키-값) 형태로 데이터를 저장해두는 데이터 베이스이다.
데이터 하나하나 같은 값들을 가질 필요가 없다.
자유로운 형태의 데이터 적재에 유리하지만, 데이터의 일관성이 부족하다.
예) MongoDB

MongDB

mongoDB라는 프로그램을 조작하기 위해서는 라이브러리 pymongodnspython 설치가 필요하다.

# DB 연결
from pymongo import MongoClient
client = MongoClient('URL')
db = client.dbsparta(db.db명)

# 데이터 입력
doc = {
    'name':'bob',
    'age':27
}
db.users.insert_one(doc)

pymongo로 mongoDB 조작하기(CRUD)

Create(insert_one, insertMany)

# 특정 데이터 넣기
doc = {
	'name':'bobby','age':21
}
db.users.insert_one(doc)


# 여러 데이터 넣기
db.users.insertMany( [
	{'name':'bobby','age':21},
    {'name':'kay','age':27},
    {'name':'john','age':30}
])

Read(find, find_one)

# 모든 데이터 뽑아보기
all_users = list(db.users.find({},{'_id':False}))

print(all_users[0])        
print(all_users[0]['name'])  # 0번째 결과값의 'name'을 보기

for user in all_users:       # 반복문 돌며 모든 결과값 출력
    print(user)
    
    
# 특정 결과 값 뽑아보기
user = db.users.find_one({'name':'bobby'})
print(user)

Update(update_one, updateMany)

# 하나의 값 수정
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})

# 다수의 값 수정
db.users.updateMany({'name':'홍길동'},{$set:{'age':23}})   # 홍길동 이라는 이름을 가진 모든 이들의 나이를 수정

Delete(delete_one, deleteMany)

# 특정 값 삭제
db.users.delete_one({'name':'bobby'})

# 다수의 값 삭제
db.users.deleteMany({'name':'홍길동'})      # 홍길동 이라는 이름을 가진 모든 데이터 삭제

3주차 공부하며 느낀점

드디어 python를 학습할 시간이 왔다!
전부터 한번쯤 배워보고 싶다고 생각하고 있었던 터라 굉장히 기대했던 강의였다.
웹개발 종합반 강의에서는 아주 기초적인 부분만 다루기 때문에 파이썬 또한 파이썬 기초문법 뽀개기강의를 통해 보충해줬다.

과연 들었던 대로 문법이 정말 간단해서 배우기 쉬웠다.
전에 자바를 배워서 기본적인 문법(반복문, if/else 등)을 알고 있어서 더 쉬웠는지도 모르겠다.
그런데 자바와는 달리 Tab을 통해 코드를 나누기 때문에 코드가 길어지면 조금 보기 어려웠다...
(자바에 너무 익숙해져있는 건가?)

그치만 자바에 비해 문법도 간단하고 다루기 쉽다고 느꼈다.
다음에 기회가 되면 본격적으로 파이썬 공부해보고 싶다!!

profile
느리더라도 꾸준하게

0개의 댓글