반응형

 

beautifulsoup : 뷰티풀수프

 

 

전에 작업한 my_flask.py 파일을 이용한다.

해당 파일을 실행 후 localhost로 확인 > 켜 놓은 상태로 추가 파일을 만들어 진행한다.

 

my_flask.py

from flask import Flask,request,render_template
from day08.daoemp import Daoemp

app = Flask(__name__)

@app.route('/')
@app.route('/emp_list')
def emp_list():
    de = Daoemp()
    list = de.selectList()
    return render_template("emp_list.html", list=list)

@app.route('/emp_detail')
def emp_detail():
    e_id = request.args.get('e_id')
    de = Daoemp()
    vo = de.select(e_id)
    return render_template("emp_detail.html", vo=vo)

@app.route('/emp_mod')
def emp_mod():
    e_id = request.args.get('e_id')
    de = Daoemp()
    vo = de.select(e_id)
    return render_template("emp_mod.html", vo=vo)

@app.route('/emp_mod_act', methods=['POST']) # post 선언하지 않을 시 오류남
def emp_mod_act():
    e_id = request.form['e_id']
    e_name = request.form['e_name']
    gen = request.form['gen']
    addr = request.form['addr']
    
    de = Daoemp()
    cnt = de.update(e_id, e_name, gen, addr)
    return render_template("emp_mod_act.html", cnt=cnt)

@app.route('/emp_add')
def emp_add():
    return render_template("emp_add.html")

@app.route('/emp_add_act', methods=['POST'])
def emp_add_act():
    e_id = request.form['e_id']
    e_name = request.form['e_name']
    gen = request.form['gen']
    addr = request.form['addr']
    
    de = Daoemp()
    cnt = de.insert(e_id, e_name, gen, addr)
    return render_template("emp_add_act.html", cnt=cnt)

@app.route('/emp_del', methods=['POST'])
def emp_del():
    e_id = request.form['e_id']
    print(e_id)
    de = Daoemp()
    cnt = de.delete(e_id)
    return render_template("emp_del.html", cnt=cnt)

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

 

결과 화면1

 

 

mybs01.py

import requests
from bs4 import BeautifulSoup
 
res = requests.get('http://127.0.0.1')
html = res.text
print(html)

 

위의 방식대로 볼때 아래와 같은 코드를 확인할 수 있음

 

결과 화면2

 

 

 

DOM 객체 가져오기 : find, find_all

 

 

find와 find_all은 비슷하지만

find는 가장 처음 하나만 찾아오고

find_all은 전부를 찾아온다. (배열 형태로 가져옴)

 

 

mybs01.py

import requests
from bs4 import BeautifulSoup
 
res = requests.get('http://127.0.0.1')

soup = BeautifulSoup(res.text, "lxml")

print(res.text)
print("--------------------------------------------------------")
print(soup)
print("--------------------------------------------------------")
print(soup.find('table'))
# print(soup.find_all('table')[0]) # 같음
print("--------------------------------------------------------")
print(soup.find('table').find('tr'))
# print(soup.find_all('table')[0].find_all('tr')[0]) # 위와 같음
print("--------------------------------------------------------")
print(soup.find_all('table'))

 

res.text와 soup 비교 : 상단이 res.tex, 하단이 soup

 

결과 화면3-1 : BeautifulSoup 사용(soup)

 

결과 화면3-2 : soup.find('table') 사용

 

결과 화면5 : soup.find('table').find('tr')

 

결과 화면3-3 : soup.find_all('table') / 배열 형태로 출력

 

 

 

  • 데이터 값인 이름과 주소만 출력하기

mybs02.py

import requests
from bs4 import BeautifulSoup
 
res = requests.get('http://127.0.0.1')

soup = BeautifulSoup(res.text, "lxml")

print(res.text)
print("--------------------------------------------------------")
trs = soup.find_all('tr')
print(trs)
print("--------------------------------------------------------")

for idx,tr in enumerate(trs):
    if idx == 0 :
        continue
    tds = tr.find_all('td')
    myname = tds[1].text
    addr = tds[3].text
    print("{}\t{}".format(myname,addr))

 

결과 화면4

 

 

 

DOM 객체 가져오기 : select

 

 

find_allselect가 비슷하며

findselect_one와 비슷하다.

 

 

mybs03.py

import requests
from bs4 import BeautifulSoup
 
res = requests.get('http://127.0.0.1')

soup = BeautifulSoup(res.text, "lxml")

# print(res.text)

# print("--------------------------------------------------------")
# print(soup.select_one('tr')) #아래와 같음
# print(soup.find_all('tr'))

print("--------------------------------------------------------")
trs = soup.select('tr')
print(trs)
print("--------------------------------------------------------")

for idx,tr in enumerate(trs):
    if idx == 0 :
        continue
    tds = tr.select('td')
    myname = tds[1].text
    addr = tds[3].text
    print("{}\t{}".format(myname,addr))

 

결과 화면5

 

 

반응형