Python, 웹 스크랩핑(크롤링) 그리고 DB(mongoDB) (웹 개발 종합반 3주차)

황원준·2023년 1월 6일

hanghae99

목록 보기
3/24

1. Python 문법

다른 프로그래밍 언어에 비해 굉장히 직관적 이다.

- 변수 & 기본연산

a = 1 // 변수는 값을 저장하는 박스예요.       
b = 2									 
print(a+b) // 3 출력

name1 = 'won'
name2 = 'jun'	
print(name1+name2) // wonjun 출력

- 리스트 & 딕셔너리

a_list = []  // 리스트를 선언. 변수 이름은 역시 아무렇게나 가능!

// 또는,
fruits = ['사과','배','감','수박','귤','딸기'] // 선언 가능
print(b_list[1]) // 배를 출력
print(b_list[2]) // 감 출력

// 딕셔너리 : 키(key)-밸류(value)값의 묶음
a_dict = {}  // 딕셔너리 선언!

// 또는,
b_dict = {
	'name':'Bob','age':21
}                      // 선언 가능, 'key':'value'형식
print(b_dict['name']) // 'Bob'을 출력
print(b_dict['age']) // 21을 출력

- 함수

// 두 숫자를 입력받으면 더한 결과를 돌려주는 함수
def sum(a, b) :
	return(a+b)	// 줄을 잘 맞춰야 한다. 못 맞추면 가동X
result = sum(1, 2)
print(result) // 3 출력

- 조건문

// 20살보다 위면 성인, 20살 아래면 청소년
def is_adult(age)
	if age > 20:
		print('성인이에요')
	  else: 
		print('청소년 이에요')

- 반복문

fruits = ['사과','배','감','수박','귤','딸기']

for fruit in fruits:
	print(fruit) // 사과 배 감 수박 귤 딸기 출력
people = [{'name': 'bob', 'age': 20}, {'name': 'carry', 'age': 38}, {'name': 'john', 'age': 7}, {'name': 'smith', 'age': 17}, {'name': 'ben', 'age': 27}]

for person in people:
    if person['age'] > 20:
        print(person['name']) // carrry ben 출력

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

파이썬 패키지

- 파이썬 패키지 설치 = 외부 라이브러리 설치

웹 스크랩핑, 크롤링을 하는데 두가지 패키지를 import 해야한다.

  • 1) requests 패키지
  • 2) bs4(beautifulsoup4) 패키지

처음에는 헷갈렸다. 이게 파이썬 문법인지 아니면 다른 것인지

근데 새로운 뭔가 프로그램을 쓰는거 같았다.

import requests
from bs4 import BeautifulSoup // requests, bs4 패키지 import

// URL을 읽어서 HTML를 받아오고,
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.naver?sel=pnt&date=20210829',headers=headers)

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

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

// movies (tr들) 의 반복문을 돌리기
for movie in movies:
    a_tag = movie.select_one('td.title > div > a')
    if a_tag is not None:
         print (a_tag.text)

3. DB(Database)

  • 나만의 DB정의로 그냥 "데이터 저장소" 라고 생각한다.

데이터를 구조화 하고, 효율적 처리를 할 수 있도록 관리 해준다.

DB의 종류로 두가지가 있는데, RDBMS랑 No-SQL이 있다

  • 1) RDBMS(SQL) : 행/열의 생김새가 정해진 엑셀에 데이터를 저장하는 것과 유사합니다. 데이터 50만 개가 적재된 상태에서, 갑자기 중간에 열을 하나 더하기는 어려울 것입니다. 그러나, 정형화되어 있는 만큼, 데이터의 일관성이나 / 분석에 용이할 수 있습니다.
    ex) MS-SQL, My-SQL 등
    - 나만의 정의 : 엑셀
  • 2) No-SQL : 딕셔너리 형태로 데이터를 저장해두는 DB입니다. 고로 데이터 하나 하나 마다 같은 값들을 가질 필요가 없게 됩니다. 자유로운 형태의 데이터 적재에 유리한 대신, 일관성이 부족할 수 있습니다.
    ex) MongoDB
    - 나만의 정의 : 클라우드

4. mongoDB 연결하기

mongoDB를 연결하기 위해선 "pymongo", "dnspython"이라는 2개의 패키지를 설치 해야한다.

// pymongo 패키지 연결
from pymongo import MongoClient
client = MongoClient('연결할 mongoDB URL')
db = client.dbsparta

pymongo를 어떻게 사용하는지 사용법과 쿼리들은

// 저장 - 예시
doc = {'name':'bobby','age':21}
db.users.insert_one(doc) // 여기서 'users'는 mongoDB에 저장된 컬렉션을 지칭 

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

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

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

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

완벽하진 않지만, 배우는 입장이기에 차분히 따라가면서 추가해 나가야 겠다.

profile
좋은 개발자가 되기 위해 노력 하는 개린이

0개의 댓글