스파르타코딩클럽 내일배움단 웹페이지 개발 3주차

한선희·2022년 1월 15일
0

이름은 너무나도 많이 들어본 파이썬을 처음 접하게 되서 걱정반 설렘반이었다. 막상 수업을 시작하니 3주까지의 과정 중 가장 쉽게 이해할 수 있는 수업이었다. 직관적이라는 것이 얼마나 큰 강점인지를 느꼈다.

막막하기만 했던 데이터를 가져와 솎아내는 일과(자바스크립트로 가져오는 것은 아직도 더듬거린다...) 서버를 만들어 저장하는 일은 듣기만해도 어려움이 느껴졌지만, 막상해보니 재밌고 웹페이지 개발에대한 의지가 다시 살아났다. 아직 연습이 많이 필요하지만, 흥미와 즐거움을 느낀 과정이었다.

아래는 공부내용 요약

크롤링과 필요한 패키지

크롤링 : 검색엔진에서 퍼가는 행위를 의미 스크랩핑과 혼용해서 사용함
서버로부터 받아놓은 데이터를 원하는 정보를 솎아내는 것

크롤링에서 중요한 것 1. 코드를 따내서 요청하는 것 = requests
2. 내가 원하는 정보를 솎아내는 것 = bs4

BS4(BeautifulSoup)
1. select_one : 한 가지를 가져올 때
가져온 데이터의 텍스트를 가져올때는 title.text
태그의 속성을 가져올때는 ['href']
2. select : 여러 정보를 같이 가져올 때
결과가 리스트로 나온다.
웹사이트에서 가져올 데이테위에 오른쪽 버튼- 검사 - element를 통해 가져올 부분을 확인 - 오른쪽 버튼 -copy -copyselector - 파이참에 붙여넣기

예) trs = soup.select ('#old_content > table > tbody > tr')

크롤링은 사이트마다 전략을 다르게 가져가야한다.
예) for tr in trs:
a_tag = tr.select_one('td.title > div >a')
print(a_tag)
a_tag는 임의로 붙여준 태그 선택해서 가져온 데이터인 trs에서 한 가지를 또다시 가져올때 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('https://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=pnt&date=20200303',headers=headers)

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

trs = soup.select('#old_content > table > tbody > tr')

for tr in trs:
a_tag = tr.select_one('td.title > div >a')
if a_tag is not None:
r_tag = tr.select_one('td:nth-child(1) > img')['alt']
title = a_tag.text
score = tr.select_one('td.point').text
print(r_tag, title, score)

데이터베이스 사용이유)

데이터를 잘 가져다 쓰기위해 데이터베이스프로그램을 사용한다.
robo3T는 MongoDB가 돌아가는 것을 눈으로 보기위한 프로그램

SQL : 엑셀에 가까운, 정해진 포맷이 있는(열, 행을 미리 정해놓아야한다)
중간에 바꾸기가 어려우나 정형화된 데이터를 뽑아내고 분석하기 편리함
ex) MS-SQL, MY-SQL, 오라클

NoSQL : NOT ONLY SQL, 딕셔너리 형태로 한 줄 한 줄 들어가는 것
굉장히 유연함, 변화가 많은 스타트업이나 초기에 많이 사용
ex) MongoDB

pymongo

python으로 MongoDB를 조작하기 위해 만들어진 라이브러리
비슷한 데이터끼리 모이는데 이를 collection이라하고 db.users.에서 users는 collection 이름
1. insert : 데이터 넣기
예) db.users.insert_one(doc)

  1. find : 데이터 찾기
    예) same_ages = list(db.users.find({'age' : 21}))
    print(same_ages)
    same_ages는 임의로 만든 변수
    run을 하면 ,{'_id':False}가 자동 생성되는데 이는 유니크하게 생성되는 id는 표시하지 말라는 의미 데이터 한 줄만 가져오기
    예) user = db.users.find_one({'name':'bobby'},{'_id':False})
    print(user)
  2. update : 기존 데이터를 업데이트(일부 또는 전체 수정)
    예) db.users.update_one({'name':'bobby'},{'$set':{'age':19}})
    name이 bobby인 것을 찾아서 그것의 age를 19로 바꿔라
    update_many는 조건에 해당하는 것을 모두 바꾸는 것이라 잘 사용하지 않음
  3. delete : 데이터 삭제
    예) db.users.delete_one({'name':'bobby'})
    name이 bobby인 것을 찾아 삭제해라

pymongo 코드 요약

저장 - 예시

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

  
profile
코딩 비기너

0개의 댓글

관련 채용 정보