본문 바로가기

내일배움캠프_개발일지/웹개발 종합반

웹개발 종합반 3주차 일지

3-3 강. 파이썬 시작하기.

 

폴더 : sparta -> pythonprac

 

새 프로젝트 만들기.

파이참이 켜진 상태에서 상단 메뉴바의 ‘파일’ -> ‘새 프로젝트’ 선택. -> ‘위치(L)’로 폴더 선택. 이 경우 pythonprac.

-> 새 환경 위치로 경로 마지막에 ‘venv’ 가 들어가는지 확인 -> 기본 인터프리터로 3.8 버전 선택. -> mainl.py 웰컴 스크립트 생성 체크 해제.  -> 생성

 

 

 

 

pythonprac -> python 파일 생성 -> hello.py  생성.

 

 

코드를 입력 후 파이참 코딩 화면에 우클릭 -> 실행 클릭.

=> 파이참 하단에 실행창이 뜨며 코드를 실행.

 

 

 

 

=== 3-4강. 파이썬의 변수, 자료형, 함수, 조건문, 반복문을 공부해보자.

 

파일 : pythonprac -> hello.py

 

 

 

 

 

______________________________________________________________________________________________________________

 

 

3-6강. 크롤링을 위한 파이썬 패키지 설치.

 

파이썬에서 패키지는 모듈을 모아 놓은 단위. 이런 패키지의 묶음을 라이브러리 라고 불러. 여기서는 외부 라이브러리를 사용하기 위해 패키지를 설치하여야 해.

즉 여기서는 패키지 설치 = 외부 라이브러리 설치.

 

**** 파이썬 프로젝트를 생성할 경우 생기는 폴더 ‘venv’ 는 virtual environment 이라는 가상 환경.

프로젝트별로 라이브러리를 모아 둘 수 있도록 해 둔 공간.

 

——

패키지 설치하기.

파이참 상단 메뉴 ‘Pycharm’ -> preferences -> 좌측 카테고리 중 ‘프로젝트: pythonprac(프로젝트이름)’ 선택

-> 하위 메뉴 중 ‘Python 인터프리터’ 선택 -> + 버튼 클릭 -> 검색창에 ‘requests’ 입력 -> requests 선택 후 하단 ‘패키지 설치’ 클릭.

——

 

여기서 requests 는 자바스크립트로 치면 ajax 같은 친구.

 

——

import requests # requests 라이브러리 설치 필요

 

r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair')

rjson = r.json()

——

=> requests 라이브러리를 설치했으면, 기능에 접근하기 위해 hello.py 파일에 리퀘스츠를 import

get으로 데이터를 가져오고 json()을 사용하여 response에 담긴 데이터를 원래의 데이터 타입으로 되돌려서 사용.

requests.get은 요청한 주소의 데이터들을 가져오고자 하는 것이고, 이것이 성공적으로 response 되면

내가 원하는 데이터들이 리턴되는 거지.

 

 

 

 

3-8강. 웹스크래핑(크롤링) 해보기.

——

https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20210829

——

네이버 영화 페이지에서 영화 제목들을 크롤링해서 가져와 볼거야.

 

크롤링을 하기 위해선 크게 두 가지 일을 해야 해. 

첫 번째는 우선 원하는 페이지에 요청해서 해당 페이지의 html을 가져오는 것. 이건 requests 로 가능.

두 번째로, html 안에서 내가 원하는 데이터만 찾아내는 것.

 

——

beautifulsoup 라이브러리. 

——

해당 라이브러리가, html 코드 안에서 내가 원하는 특정 키워드들을 쉽게 찾을 수 있도록 도와줘.

 

——

패키지 설치하기.

파이참 상단 메뉴 ‘Pycharm’ -> preferences -> 좌측 카테고리 중 ‘프로젝트: pythonprac(프로젝트이름)’ 선택

-> 하위 메뉴 중 ‘Python 인터프리터’ 선택 -> + 버튼 클릭 -> 검색창에 ‘bs4’ 입력 ->bs4 선택 후 하단 ‘패키지 설치’ 클릭.

——

 

아래는 크롤링 기본 셋팅

——

import requests

from bs4 import BeautifulSoup

 

# 타겟 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)

 

#headers는, 우리가 requests.get 요청을 코드파일에서 하고 있는데, 마치 브라우저에서 하고 있는 것 처럼 가장해주는 기능.

 

# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦

# soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨

# 이제 코딩을 통해 필요한 부분을 추출하면 된다.

 

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

 

#############################

# (입맛에 맞게 코딩)

#############################

——

 

 

——

title = soup.select_one('#old_content > table > tbody > tr:nth-child(2) > td.title > div > a')

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

——

select 와 select_one 의 사용법 숙지. 전자는 html 태그 하나만, 후자는 그 태그들이 배열로.

 

——

# 선택자를 사용하는 방법 (copy selector)

soup.select('태그명')

soup.select('.클래스명')

soup.select('#아이디명')

 

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

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

 

# 태그와 속성값으로 찾는 방법

soup.select('태그명[속성="값"]')

 

# 한 개만 가져오고 싶은 경우

soup.select_one('위와 동일')

——

=> 항상 정확하지는 않으니, 검사창의 element 를 확인하면서 비교해보기.

 

 

 

 

 

————————————————————————————————————————————————————————————

 

3-10 mongoDB 몽고DB 데이터베이스 설치 및 사용해보기.

 

——

https://account.mongodb.com/account/register.  => 몽고DB 회원가입 사이트. 설치 과정은 PDF 3주차 가이드 참고하기.

——

 

파이썬 프로젝트에서 mongoDB 에 접속하기 위해선 두 가지 패키지가 필요해.

——

pymongo, dnspython

——

 

보안 관련 문제가 있을 수 있어서, 추가로 하나 더 설치해야.

——

certifi

 

설치 후 기본 코드.

 

import certifi

ca = certifi.where()

——

 

 

 

 

 

 

pythonparc -> dbprac.py

파이썬 몽고DB 연습용 파일.

 

——

from pymongo import MongoClient

client = MongoClient('여기에 URL 입력')

db = client.dbsparta

——

pymongo 기본코드 사용.

 

Url 에는 몽고db 커넥트 url 을 사용.

——

mongodb+srv://msdou46:<password>@cluster0.n5ofnw1.mongodb.net/?retryWrites=true&w=majority

——

=> mongodb+srv://msdou46:<password>@cluster0.n5ofnw1.mongodb.net/?retryWrites=true&w=majority

비밀번호 부분을 내 아이디 설정에 맞춰서 바꿔주기.

 

 

 

 

certifi 도 import 하면 최종적으로는 다음과 같아.

 

——

from pymongo import MongoClient

 

import certifi

ca = certifi.where()

 

client = MongoClient('mongodb+srv://msdou46:klh17dj5a8@cluster0.n5ofnw1.mongodb.net/Cluster0?retryWrites=true&w=majority', 

tlsCaFile=ca)

db = client.dbsparta

——

<아이디>:<비밀번호>@cluster0.n5ofnw1.mongodb.net/<DB이름>?retry

 

 

Insert 예시.

——

db.users.insert_one({'name': 'bobby', 'age': 27})

 

Or

doc = {

    'name': 'bob',

    'age': 27

}

db.users.insert_one(doc)

——

=> DB의 ‘users’ 라는 ‘콜렉션’ 에 데이터를 insert 한다.

 

 

파이썬에서 mongoDB SQL문 예시.

——

# 저장 - 예시

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

——

 

 

 

 

파일 : pythonprac -> hello.py

 

 

3-14 웹스크래핑(크롤링) 결과를 DB에 저장하기.

파일 : pythonprac -> hello.py

 

for문을 사용하여 DB에 insert 하기.

——

for movie in movies:

    a = movie.select_one('td.title > div > a')

    if a is not None:

        rank = movie.select_one('td:nth-child(1) > img')['alt']

        # old_content > table > tbody > tr:nth-child(2) > td:nth-child(1) > img

        star = movie.select_one('td.point').text

        # old_content > table > tbody > tr:nth-child(2) > td.point

        print(rank, a.title, star)

 

        doc = {

            'title': a.text,

            'rank': rank,

            'star': star

        }

        db.movies.insert_one(doc)

——