항해99 사전 학습 요약

임찬수·2021년 10월 26일
0

파이썬을 통해서 크롤링(스크랩핑) 하기

@ 필요 라이브러리

  • requests
  • bs4

@ 기본 코드

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

@ 원하는 정보 출력하기

@ 하나만 가져오기
logo = soup.select_one('#header > div.special_bg > div > div.logo_area > h1 > a > span')
print(logo)

@ 여러개 가져오기
lists = soup.select('#old_content > table > tbody > tr')

for item in lists:
    print(item)

MongoDB 사용하기

@ MongoDB 설치확인
localhost:27017 접속 시 페이지에

"It looks like you are trying to access MongoDB over HTTP on the native driver port."

위와 같이 화면이 나온다면 OK

@ 필요 라이브러리

  • pymongo

@ 기본코드

from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta

# 저장 - 예시
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'})

Flask로 서버구현하기

@ 필요 프레임워크

  • flask

@ 기본 폴더 구조

project
ㄴ venv
ㄴ static
	ㄴ css
    	ㄴ images
ㄴ templates
	ㄴ index.html
ㄴ app.py

@ 기본 코드

from flask import Flask, render_template
app = Flask(__name__)

@app.route('/')
def home():
   return render_template('index.html')

if __name__ == '__main__':  
   app.run('0.0.0.0',port=5000,debug=True)

API 구현하기

@ 필요 라이브러리

  • flask
  • request
  • jsonify

@ 기본코드

from pymongo import MongoClient

from flask import Flask, render_template, jsonify, request

app = Flask(__name__)

client = MongoClient('localhost', 27017)
db = client.dbsparta


# HTML 화면 보여주기
@app.route('/')
def home():
    return render_template('index.html')


# API 역할을 하는 부분
@app.route('/api/list', methods=['GET'])
def show_stars():
    // request.args.get('title_give') // 해당 변수로 들어온 값 받기
    movie_star = list(db.mystar.find({}, {'_id': False}).sort('like', -1))
    return jsonify({'movie_stars': movie_star})


@app.route('/api/like', methods=['POST'])
def like_star():
    name_receive = request.form['name_give']
    target_star = db.mystar.find_one({'name': name_receive})
    current_like = target_star['like']

    new_like = current_like + 1
    db.mystar.update_one({'name': name_receive}, {'$set': {'like': new_like}})

    return jsonify({'msg': '좋아요 완료!'})


@app.route('/api/delete', methods=['POST'])
def delete_star():
    name_receive = request.form['name_give']
    db.mystar.delete_one({'name': name_receive})
    return jsonify({'msg': '삭제되었습니다!'})


if __name__ == '__main__':
    app.run('0.0.0.0', port=5000, debug=True)

AWS로 배포하기

@ 대시보드 링크

https://ap-northeast-2.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-2#Home:

  1. 인스턴스 생성
  • aws 가입
  • EC2 인스턴스 생성 (Ubuntu server 18.04 LTS)
    *인스턴스 생성시 키 페어 다운로드 해둘것
  1. 원격 접속하기
  • git bash 실행
원격 접속 시도
$ ssh -i 키페어경로 ubuntu@서버IP
  1. 서버 세팅하기
  • filezilla로 프로젝트 파일 업로드 하기
  • shell script로 서버 환경 세팅하기위해 initial_ec2.sh 파일을 서버에 업로드
initial_ec2 파일권한 부여하기
$ sudo chmod 755 initial_ec.sh

파일 실행하기
파일경로/initial_ec.sh
  1. 서버 환경에 모듈 추가하기
방법)
pip install 모듈명

예시)
pip install flask
pip install pymongo
  1. 포트 열기
  • 해당 인스턴스의 보안탭 -> 보안그룹 -> Inbound rules의 Edit inbound rules 클릭
  1. nohup으로 서버 항상 돌아가게 설정하기
실행하기
nohup python app.py &

종료하기
ps -ef | grep 'app.py' 중 해당파일을
kill -9 해당파일번호
profile
프론트엔드 개발자가 되기 위한 정보를 정리합니다.

0개의 댓글

관련 채용 정보