Crawling할때는 정보를 찾아서 활용한다는 점에서 재밌었지만 flask는 조금 복잡한게 없지않아 있어 이해하는데에 시간이 오래 걸렸다.
Crawling
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')
title = soup.select_one('경로 copy > copy selector')
title = soup.select_one('경로').text # -> 출력에서 text만 가져온다.
title = soup.select_one('경로')['href'] # -> href 값을 가져온다. (다른것도 가능)
title = soup.select('경로') # -> 리스트 형식으로 가져온다(여러개 가져옴)
2.Pymongo
from pymongo import MongoClient
client = MongoClient('localhost', 27017) # 내 컴퓨터에서 돌아가고있는 mongoDB에 접속 할 겁니다.
db = client.dbsparta # dbsparta 라는 db 이름으로 접속 할 겁니다.
1) insert -> 딕셔너리 만들어서 몽고에 넣는다.
doc = {'name':'bobby','age':21}
db.users.insert_one(doc) # 위 doc(딕셔너리)를 users에 넣어준다.(db > users > insert_one(doc))
2) find
user = db.users.find_one({'name':'bobby'},{}) # 한개만 찾기
same_ages = list(db.users.find({'age':21},{'_id':False})) # age:21 인값 표시 하지만 _id는 표시하지 않는다.
same_ages = list(db.users.find({},{'_id':False})) # find{}값을 비워둔경우 모든 값을 가져온다.
3) update
db.users.update_one({'name':'bobby'},{'$set':{'age':19}}) # name이 bobby인 것을 찾아 age를 19로 바꿔라.
db.users.update_many({'name':'bobby'},{'$set':{'age':19}}) # name이 bobby인 것을 모두 찾아 age를 19로 바꿔라.(위험해서 잘 쓰지 않는다.)
4) delete
db.users.delete_one({'name':'bobby'}) # 해당 값 하나 지우기
db.users.delete_many({'name':'bobby'}) # 해당 값 다 지우기 (위험해서 잘 쓰지 않는다.)
3.Flask
작업 순서
1. app.py파일, static,templates(index.html)폴더 생성
2. app.py파일과 index.html 파일이 잘 연결 되어있는지 확인
3. app.py의 post 부분 작업시작
1) 읽어올 값 갯수 파악 및 설정
sample1_receive = request.form['sample1_give']
sample2_receive = request.form['sample2_give']
sample3_receive = request.form['sample3_give']
2) 딕셔너리 만들어서 db에 저장
doc = {
'sample1': sample1_receive,
'sample2': sample2_receive,
'sample3': sample3_receive
}
db.clientName.insert_one(doc)
4. index.html의 type:'post' 부분 작업
1) $.ajax 위에 읽어올 값 정의해준다
let sample1 = $("#sample-name").val()
let sample2 = $("#sample-count").val()
letsample3 = $("#sample-address").val()
2) 위에서 읽어온 값을 app.py의 post에서 저장 할 수 있게 보내준다.
data: {'sample1_give': sample1, 'sample2_give': sample2,'sample3_give': sample3}
3) 필요에 의해 type:'post' 부분 마지막에 초기화를 추가해 준다.
window.location.reload();
5. app.py의 GET 부분 작업시작
1) 저장된 값을 전부 가져와 잠시 원하는 key값에 넣어준다.
samples = list(db.clientName.find({}, {'_id': False}))
return jsonify({'all_samples': samples})
6. index.html의 type:'GET' 부분 작업
1) success:function 안에 앞에서 저장 한 값을 가져와 원하는 위치에 출력해 준다.
success: function(response){
let sample = response['all_samples']
for (let i=0; i < sample.length; i++){
let name = sample[i]['name']
let count = sample[i]['count']
let address = sample[i]['address']
let temp_html = ` < tr >
< th > ${name} < / th >
< td > ${count} < / td >
< td > ${address} < / td >
< / tr > `
$("#samples-box").append(temp_html)
}
}
7. 직접 입력해 보면서 구동 확인하고 ROBO 3T로 잘 저장 되는지 확인한다.