Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 데브코스
- 데이터엔지니어링
- Docker
- S3
- 데이터베이스
- 데이터 엔지니어링
- 컴퓨터네트워크
- PYTHON
- 가상환경
- dockerfile
- redshift
- airflow
- AWS
- airflow.cfg
- 종류
- 운영체제
- HADOOP
- sql
- TIL
- TCP
- Go
- http
- 데이터 파이프라인
- 파이썬
- 데이터 웨어하우스
- Django
- 자료구조
- 정리
- linux
- 컴퓨터 네트워크
Archives
- Today
- Total
홍카나의 공부방
[DE 데브코스] 04.19 TIL - Beautifulsoup, Locater, 알고리즘 문제 본문
Data Engineering/프로그래머스 데브코스
[DE 데브코스] 04.19 TIL - Beautifulsoup, Locater, 알고리즘 문제
홍문관카페나무 2023. 4. 19. 14:32BeautifulSoup Library
- response로 가져오는 HTML 문서를 parsing하는 파이썬의 라이브러리.
- 주요 활용법 중 일부는 아래 코드로 소개한다.
- 파고들면 파고들수록 사용할 수 있는 기능이 많은 라이브러리다. 이는 bs4 document 등을 참고하면 좋다.
import requests
from bs4 import BeautifulSoup
res = requests.get("https://www.example.com")
# 첫 번째 인자로 resquest의 body를 텍스트로 전달하기
# 두 번째 인자로 parser 종류 입력해주기
soup = BeautifulSoup(res.text, "html.parser")
print(soup.title) # soup에 담긴 text중 title TAG 가져오기
print(soup.find("h1")) # h1 요소를 하나 찾기 위하여 find method 사용
print(soup.find_all("meta")) # 해당 태그로 감싸진 요소들 모두
# 원하는 요소 가져오기 예시
res = requests.get(
"http://books.toscrape.com/catalogue/category/books/travel_2/index.html")
soup = BeautifulSoup(res.text, "html.parser")
s = soup.find_all("h3")
for i in s:
print(i.a["title"]) # 태그의 속성을 딕셔너리 key처럼 활용
HTML Locater
- 태그의 id와 class를 이용하여 요소를 가져오는 법을 알아보자. 역시나 코드 예시로 살펴본다.
import requests
from bs4 import BeautifulSoup
import time
res = requests.get(
"http://books.toscrape.com/catalogue/category/books/sports-and-games_17/index.html")
soup = BeautifulSoup(res.text, "html.parser")
# class가 price_color인 요소를 찾는다.
# id로 찾을 때는 파라미터에 id= 를 붙이면 된다.
s = soup.find_all("p", "price_color")
for i in s:
print(i.text[1:])
# https://qna.programmers.co.kr/ 질문 제목 가져오기 예시
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
for p in range(1, 6):
res = requests.get(
f'https://qna.programmers.co.kr/?page={p}', headers=headers)
soup = BeautifulSoup(res.text, "html.parser")
s = soup.find_all("li", "question-list-item")
for q in s:
print(q.find("div", "question").find("div", "top").h4.text)
time.sleep(0.5)
정적 웹사이트와 동적 웹사이트
- 정적 웹사이트는 HTML 내용이 사실상 고정되어있는 웹 사이트다. HTTP 요청을 할 때마다 서버가 똑같은 HTML을 가져다준다.
- 동적 웹사이트는 HTML 내용이 동적인 웹 사이트다. 유튜브 메인 페이지 처럼 응답 이후 렌더링 되기까지 지연 시간을 가진다.
- 그 이유는 비동기 처리 때문이다. 동기 처리 방식은 렌더링이 끝난 이후 데이터 처리가 동기적으로 진행 되는데
- 비동기는 우선 응답 -> 데이터 처리 진행이 "비동기"적으로 진행된다. 즉 렌더링이 끝나지 않아도 데이터 처리를 같이 실행한다.
- 요즘 웹 사이트들은 이런 비동기 처리를 하는 경우가 상당히 많다.
- 다음 시간에 Selenium Library를 살펴보며 동적 웹사이트도 스크래핑 하는 방법을 알아본다.
- 동기와 비동기는 이 글을 참고하면 이해에 도움될 수 있다. https://hongcana.tistory.com/37
오늘도..
- 오늘 수업 진도도 코어 타임 동안 충분히 학습하고도 남을 분량이라, 남는 시간엔 알고리즘 문제를 풀었다.
- 오늘 해결한 문제는 다음과 같다. https://www.acmicpc.net/problem/7562
- 굉장히 쉬운 BFS 문제다.
- https://school.programmers.co.kr/learn/courses/30/lessons/1844 만만한 BFS 하나 더 팼다.
- 프로그래머스의 <게임 맵 최단거리>로 레벨 2 문제인데, 백준으로 치면 한 실버2~3 정도 되는 것 같다.
- https://school.programmers.co.kr/learn/courses/30/lessons/43164 DFS 하나 팼다.
- 스택을 이용해서 풀었다.
- 이거는 예전에 프로그래머스 스쿨에서 풀었던 문제인데, 역시 다시 보니까 까먹고 완벽하게 풀이 및 접근하지 못했다.
- 내 기억력이 완벽함을 바랄 수 없는 법.. 다시 복습하고, 다시 풀었다.
- https://school.programmers.co.kr/learn/courses/30/lessons/42885 그리디 문제 하나 풀었다.
- level 2이고, 백준 체감으로는 실버 1~3 정도 되는 문제인듯하다.
- 문제를 읽고 그리디 인가 생각했는데, 단순하게 그리디로 접근하면 풀리지 않는 문제다.
- 약간의 투 포인터 접근 방식을 섞어준다면 풀 수 있는 문제다.
오늘 공부하며 어려웠던 내용
- 수업 내용에서는 없었고 코테에서 대부분 어려움을 느꼈다.
- 코테 문제 풀이를 도중에 1주일 정도 쉬었다가 다시 돌아온 것 때문인지, 골드 이상 문제는 접근법 자체를 생각하기가 어려웠다.
- 그래서 실버 문제로 재활을 했다지만, 골드 이상의 문제를 어렵게 느끼므로 도전해야할 필요가 있다.
- 특히 이분 탐색은 내가 실버 문제도 풀이법을 빠르게 생각하지 못하므로 난이도를 굳이 높게 가져갈 필요가 없다.
- DFS/BFS는 쉬운 난이도의 경우 충분히 해결법을 떠올릴만큼 익숙해진것 같으므로 골드 이상의 문제를 도전할 필요가 있다.
반응형
'Data Engineering > 프로그래머스 데브코스' 카테고리의 다른 글
[DE 데브코스] 04.21 TIL - 야구 잘하는 팀 시각화, Seaborn, WordCloud (0) | 2023.04.21 |
---|---|
[DE 데브코스] 04.20 TIL - 좋은 코드를 작성하려면?, Selenium (0) | 2023.04.20 |
[DE 데브코스] 04.18 TIL - 웹 스크래핑을 위한 HTTP 기초 (0) | 2023.04.18 |
[DE 데브코스] 04.17 TIL - HTML (0) | 2023.04.17 |
[DE 데브코스] 04.15 TIL - 팀미팅 1차, 반성.., 코딩테스트 문제 풀이(Heap, DFS/BFS, DP) (0) | 2023.04.15 |