오늘은 파이썬과 몽고, 플라스크에 대해 배웠다.
그동안 파이썬을 한 번쯤 써보고 싶었는데 크롤링도 해보고 재미있었다.
python
파이썬의 기본 문법은 간단했다.
print('hello sparta') # 출력
파이썬은 변수 선언 시 자바스크립트의 const, let이나 java의 String, int 같은 타입을 명시할 필요 없이 그냥 쓰면 된다.
a = 2
b = 3
print(a+b) # 5
리스트도 마찬가지!
a_list = ['사과', '배', '감']
print(a_list[0])
리스트에 추가는 아래와 같이 한다.
a_list.append('딸기')
객체는 다음과 같이 한다.
a_dict = {'name' : 'bob', 'age' : 27}
print(a_dict)
함수 선언은 def로 한다. 특이한 점은 파이썬에선 중괄호로 구분하지 않는다. : , 그리고 들여쓰기로 구분한다고 한다. 파이썬에서는 들여쓰기가 중요하다!
def sum(a, b) :
return a+ b;
if 문은 아래와 같이 한다.
def is_audult(age):
if age > 20:
print('어른입니다.')
else:
print('청소년입니다.')
is_audult(25)
for문은 주로 배열을 다루어 사용하기에 다음과 같이 사용한다고 한다.
fruits = ['사과','배','배','감','수박','귤','딸기','사과','배','수박']
for fruit in fruits:
print(fruit)
for문, if 문 합쳐 써보기
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'])
파이썬으로 크롤링
크롤링을 해보기에 앞서 프로젝트를 만들면 venv라는 폴더가 생긴다.
venv 폴더는 가상환경이다. 프로젝트별로 라이브러리를 모아놓을 수 있게 한 것이다.
프로젝트를 만들고 라이브러리를 추가하는 방법
preference → project → python interpreter → + 버튼
검색 후 install package 해주면 된다.
request 라이브러리를 먼저 사용 해 봤다.
import requests # requests 라이브러리 설치 필요
r = requests.get('<http://spartacodingclub.shop/sparta_api/seoulair>')
rjson = r.json()
rows = rjson['RealtimeCityAir']['row']
print(rows)
for row in rows:
gu_name = row['MSRSTE_NM']
gu_mise = row['IDEX_MVL']
if gu_mise < 40:
print(gu_name, gu_mise)
다음과 같이 requests 라이브러리를 사용해 요청을 보낼 수 있다.
크롤링 해보기
연습 사이트 - https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20210829
네이버 영화 사이트로 연습을 해 보았다.
방법은 다음과 같이 했다.
- html 가져오기 (requests 사용)
- 그리고 그 중에서도 제목들을 가져오려면 어떻게 하냐? → beautifulsoup이라는 라이브러리가 있다! 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.naver?sel=pnt&date=20210829>',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
# 코딩 시작
# print(soup)
title = soup.select_one('#old_content > table > tbody > tr:nth-child(5) > td.title > div > a')
# print(title['href'])
# print(title.text)
#old_content > table > tbody > tr:nth-child(5) > td.title > div > a
#old_content > table > tbody > tr:nth-child(4) > td.title > div > a
#old_content > table > tbody > tr:nth-child(3) > td:nth-child(1) > img
#old_content > table > tbody > tr:nth-child(2) > td.point
movies = soup.select('#old_content > table > tbody > tr')
for movie in movies:
a = movie.select_one('td.title > div > a')
b = movie.select_one('img')
c = movie.select_one('td.point')
if a is not None:
title = a.text
rank = b['alt']
star = c.text
print(rank, title, star)
다음과 같이 크롤링 코드가 나왔다.
headers에 브라우저에 콜을 날린 것과 같이 쓰기 위해 내용을 넣어주고, 크롤링 해올 사이트의 url을 넣는다.
soup에 html코드들이 잘 담겼는지 확인 후 사이트에서 내가 가져오고 싶은 정보를 개발자 도구를 통해 copy selector를 해온다.
해당 html 코드 안에 있는 내가 원하는 정보들을 가져올 수 있다.
python/mongodb
몽고디비를 사용하기 위해서는 pymongo 패키지가 필요하다.
from pymongo import MongoClient
client = MongoClient('몽고db 주소')
db = client.dbsparta
몽고 디비로 연결은 다음과 같이 한다.
# 저장 - 예시
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'})
몽고디비 쿼리는 다음과 같이 날리면 된다!
flask
Flask는 웹 애플리케이션 개발을 위한 파이썬 프레임워크다. 파이썬으로 웹 개발을 할 때 많이 쓰이는 프레임워크로 가장 유명한 것은 Django(장고)인데, Django는 너무 무겁고 기능이 많아서 복잡하다고한다. 필요한 기능만 최대한 라이트하게 개발을 하기 위해서는 Flask처럼 가벼운 프레임워크가 적합하다고 한다!
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return 'This is Home!'\\
@app.route('/mypage')
def mypage():
return 'This is Mypage!'
if __name__ == '__main__':
app.run('0.0.0.0',port=5000,debug=True)
간단한 코드로 플라스크를 이용해 서버를 띄워보았다.
잠시 설명하자면 프로젝트에서 templates 폴더, static 폴더를 만들게 되는데,
templates 폴더는 html이 담기는 디렉토리
static은 주로 이미지라던가 css 파일이 담기는 디렉토리다.
html 파일을 만든후 다음과 같이 하면 html이 뜨는것을 볼 수 있다.
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def home():
return render_template('index.html')
ajax로 get으로 다음과 같이 요청을 보내면
$.ajax({
type: "GET",
url: "/test?title_give=봄날은간다",
data: {},
success: function(response){
console.log(response)
}
})
파이썬 서버에서 다음과 같이 요청을 받은 후 response를 던져준다.
@app.route('/test', methods=['GET'])
def test_get():
title_receive = request.args.get('title_give')
print(title_receive)
return jsonify({'result': 'success', 'msg': '이 요청은 GET!'})
ajax로 post로 다음과 같이 요청을 보내면
$.ajax({
type: "POST",
url: "/test",
data: { title_give:'봄날은간다' },
success: function(response){
console.log(response)
}
})
파이썬에서 다음과 같이 요청을 받은 후 response를 던져준다.
@app.route('/test', methods=['POST'])
def test_post():
title_receive = request.form['title_give']
print(title_receive)
return jsonify({'result':'success', 'msg': '이 요청은 POST!'})
휴 오늘은 너무 많은걸 공부해서 정신이 없었다. 그래도 반복적으로 학습하게 해주니 조금은 머리에 들어오고있다.
'내일배움캠프 > TIL' 카테고리의 다른 글
2022.11.7 TIL / 자바 설치 및 jenv 세팅 (0) | 2022.11.07 |
---|---|
2022.11.4 TIL / URL, URI (0) | 2022.11.04 |
2022.11.3 TIL (0) | 2022.11.03 |
2022.11.2 TIL / 서버 세팅 (0) | 2022.11.02 |
2022.10.31 TIL / git, ajax (4) | 2022.10.31 |