Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

Nonamed Develog

[TIL][240628] requests, 웹 스크래핑(크롤링), Flask, url_for, form, Database, SQLite 본문

WHAT I LEARN/TIL

[TIL][240628] requests, 웹 스크래핑(크롤링), Flask, url_for, form, Database, SQLite

노네임드개발자 2024. 6. 28. 22:40
어려웠던 부분

웹개발 종합반을 복습하길 잘했다는 생각이 들었던 게 복습하면서 어려운 부분이 상당히 많았기 때문이다. 그중에 Web Scraping과 Crawling 부분이 보기엔 쉬워 보이는데 직접 태그를 찾는 게 여간 쉬운 일이 아니었다. 연습이 필요하다고 느꼈다.  또한 Flask, DB, SQLite 등 4주차 수업은 내가 미니 프로젝트에서 활약을 많이 못한 이유를 여실히 보여줬다. (이해하지 못한 부분이 대부분) 아마도 시간이 남으면 미니 프로젝트 코드를 점검해 봐야겠다.

 

새로운 팀으로 편성이 되어 제비 뽑기를 통해 팀장이 되었다. 직전 프로젝트에서는 팀장의 역할을 제대로 하지 못했다고 스스로 생각했고 이 전 프로젝트의 2조 발표자 님의 소회가 참 감명 깊어 팀장으로서 새로운 팀에서 역할을 잘하고 싶었지만 뭔가 부드럽게 진행된 거 같진 않다. 아마도 협업에서 어떻게 행동해야 하는지 찾아도 보고 고민도 해봐야겠다.


느낀 점

오늘부터는 파이썬을 이용하는 프로그래밍 기초 주차가 시작되었다. 더불어 새로운 팀으로 시작했는데 이전 팀원들이랑 사전캠프 때부터 지내와서 정이 많이 들었는데 아쉬웠다. 새로운 팀에서 슬프게도 이번에 또 팀장이 되었다. 팀장으로서 도움이 되려고 노력했지만 새로운 팀원분들도 팀명, 규칙 등을 정할 때 좋은 아이디어를 많이 내주셔서 오히려 도움 받은 기분이다. 어떻게 행동해야 할지 고민을 더 해봐야겠다.

 

오늘 웹개발 종합반 4주차를 들었는데, 미니 프로젝트를 하기 전에 봤으면 내 지분이 조금은 더 있었겠다는 아쉬움이 남았다. 천천히 가는 것도 좋은데 공부 방법이 잘못된 건지 점검해야겠다는 생각이 들었다.


새로 알게 된 내용

Requests

  • 패키지 중 하나로 터미널에 pip install requests를 입력해 .venv라는 가상환경에 request라는 패키지를 설치
import requests # requests 라이브러리 설치 필요

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

print(rjson)
# 미세먼지 API를 웹 브라우저 주소창에 넣는 것처럼 데이터를 불러와서 가져오는 기능

 

웹 스크래핑(크롤링)

  • 웹 페이지의 많은 정보를 추출 정리하기 위해 웹 페이지의 정보를 가져오고(Crawling), 데이터를 추출(Scraping)하여 이용하는 것. (DB에 저장할 수 있다.)
  • Requests 라이브러리로 요청하고, Beautifulsoup 라이브러리로 필요한 정보만 추출하기 위해 pip install requests bs4 입력하면 웹 스크래핑 준비 끝
# 웹 스크래핑 기본코드
import requests
from bs4 import BeautifulSoup

URL = "https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=날씨"
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')
  • url: 웹 스크래핑 할 주소
  • User-Agent는 request header의 종류 중 하나 구조는 아래와 같다.
User-Agent: <product> / <product-version> <comment>
  • 개발자 도구를 이용해 원하는 정보를 웹 페이지에서 가져올 수 있다.
# 선택자를 사용하는 방법 (copy selector)
soup.select('태그명')
soup.select('.클래스명')
soup.select('#아이디명')

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

# 태그와 속성값으로 찾는 방법
soup.select('태그명[속성="값"]')

# 한 개만 가져오고 싶은 경우
soup.select_one('위와 동일')
  • 개발자 도구에서 해당하는 정보의 태그를 이용하여 위와 같이 원하는 정보를 얻을 수 있다.

Flask

  • 클라이언트 = 서버를 만들어 줘서 로컬 개발환경을 만들어 주는 것이다.
Flask 환경 구축 방법
1. app.py 파일 생성 후 같은 위치에 templates 폴더 생성
2. templates 폴더 안에 index.html 파일 생성
3 .venv 가상 환경 설치
4. pip install flask 입력하여 설치
  • templates나 app.py 같은 이름은 약속이기 때문에 바뀌면 안 된다.
  • 지금까지 .html 파일 같은 한 장짜리 웹 페이지를 만들었지만 Flask를 이용하면 app.py로 상호작용을 할 수 있다.

url_for

  • 보통 경로(위치)를 표현
  • EX) 이미지를 폴더에 저장한 후 불러올 때 아래와 같이 입력하면 이미지를 불러올 수 있다.
<img src="{{ url_for('폴더명', filename='이미지 경로') }}" alt="">

 

form

  • 회원 가입, 검색, 게시글 작성 등 데이터를 입력하고 전송 버튼을 누르면 입력한 데이터는 서버로 전송되게 한다.
  • 이때 url_for를 이용하여 데이터를 보낼 url을 설정하고 name 속성을 이용해 데이터에 이름을 붙여준다.
<form action="{{ url_for('movie') }}">
  <input type="text" name="query">
  <button type="submit">검색</button>
</form>

오늘 잘한 점

오늘은 집중력이 많이 떨어진 날이었음에도 목표한 공부량을 달성했다. 새로운 팀을 만나고 조장이 되었는데 이전보다는 조금 다르게 프로젝트를 진행해보려고 했다. 지난 며칠간 집중도 있게 복습한 내용이 이제는 쉬워진 느낌이라 자신감이 조금은 늘어난 것 같다.


내일 할 일

토요일은 휴식일로 정해놨는데 일요일의 부담을 덜기 위해 파이썬 심화반 강의를 수강할까 한다.