들어가며

 

드디어! 내가 코딩에 처음 관심을 갖게 된 계기였던 파이썬을 배웠다. (파이썬에 대해 알던 것: 직관적이구나. 모르던 것: 띄어쓰기 하나에도 영향을 받는다고? 갈수록 정말 도서편집 같아지는군...) 지난 주차들에서는 사이트의 뼈대를 만들고서는 그 위에 피부를 씌웠고, 동작을 추가했다. 그리고 정보를 요청할 수 있게 되었다. 그럼 이번주에서는? 가져온 정보를 어딘가에 저장하고, 내보일 수 있어야 한다는 뜻이다. 마치 사람의 뇌 같다.

 

시작 전에

지난주차에 API를 이용해 ajax GET 방식으로 API에서 정보를 불러오기를 배웠는데 이 기능을 이용해 '영화 볼 결심'에 학원에서 제공하는 API 영화 정보를 카드에 넣었다. 아래의 이미지를 보면 예전에 임의대로 단순히 '입력'해둔 카드가 아니라, API에서 가져온 정보값들이 붙어 있는 것을 볼 수 있다. 즉 내가 영화를 '직접' 기록해서 데이터베이스에 넣고, 그 기록한 정보를 데이터베이스로부터 불러온 것이 아니다. 웹개발 종합반은 방금 설명한 기술을 완성하는 게 목적이었다.

 

배운 것

1. 파이썬 기초

 

파이썬의 기초 문법인 변수와 기본연산, 자료형, 함수, 조건문, 반복문을 배웠다. 1) 변수는 말 그대로 어떤 변수에 값을 입력해주는 것이고, 이 이름은 자유롭게 지을 수 있다. 2) 자료형이란 문자 혹은 숫자(true 혹은 false가 들어갈 수도 있다), 리스트, 딕셔너리, 딕셔너리+리스트에 값을 넣는 것이다. 3) 함수란 말 그대로 함수를 정의(def)하여 그 답을 반환(return)하는 것이다. 4) 조건문이란 if와 else를 이용해 알고리즘을 실현한다. 5) 반복문이란 말 그대로 '반복'하면서 리스트에 있는 값을 하나하나 꺼내 쓰는 형식이다. 딕셔너리에 있는 값을 반복문으로 돌리면 딕셔너리의 모든 값이 찍히고, 여기에 조건문을 사용하면 원하는 값만을 출력할 수 있다.

 

이런 것들을 배우고 파이썬을 설치했다. (가장 좋은 시간. 설치하는 시간.)

 

2. 웹스크래핑(크롤링) 기초

 

requests, bs4라는 패키지를 설치하여 크롤링을 해보기로 했다. 웹에서 크롤링하고 싶은 정보가 있을 때 그 부분에 마우스 오른쪽 커서를 누른 후 검사 - copy - copy selector를 하는 방식으로 진행했다.

 

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

# alphabet의 copy selector 값이 다음과 같이 나왔다.

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

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

 

3. DB 클라우드 서비스 가입 및 내 DB 만들기

먼저 DB 사용법을 보자면, 아래와 같다.

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

# 한 개 찾기 - 예시
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'})

내가 듣는 수업에서는 mongoDB를 사용했다. 주어진 영화 api를 DB에 저장했고, 그 DB를 이용해 값을 불러냈다.

import requests
from bs4 import BeautifulSoup

from pymongo import MongoClient
client = MongoClient('내DB주소')
db = client.dbsparta

# 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:
    # movie 안에 a 가 있으면,
    a_tag = movie.select_one('td.title > div > a')
    if a_tag is not None:
        rank = movie.select_one('td:nth-child(1) > img')['alt'] # img 태그의 alt 속성값을 가져오기
        title = a_tag.text                                      # a 태그 사이의 텍스트를 가져오기
        star = movie.select_one('td.point').text                # td 태그 사이의 텍스트를 가져오기
        doc = {
            'rank': rank,
            'title': title,
            'star': star
        }
        db.movies.insert_one(doc)

 

이 주차에서부터는 html 문서와 python 파일을 왔다갔다 하면서 코드를 입력해줘야 했기 때문에 헷갈렸던 기억이 난다. 그래도 특히 bs4를 이용하면서 원하는 값을 긁어오는, 즉 크롤링 하는 기능이 재미있었다. 

'개발일지 > 웹개발 종합' 카테고리의 다른 글

웹개발 종합반 2회차 5주  (0) 2022.09.11
웹개발 종합반 2회차 4주  (0) 2022.09.10
웹개발 종합반 2회차 2주  (0) 2022.09.09
웹개발 종합반 2회차 1주  (0) 2022.09.09

+ Recent posts