728x90
프로그래머스 인공지능 데브코스 2주차 강의를 정리한 글입니다.
DOM (Document Object Model)
- 웹 문서 (html)를 로드한 후, 파싱을 진행한 문서를 DOM이라고 한다.
- 각 노드를 객체로 생각하면 문서를 더욱 편리하게 관리할 수 있다
- 브라우저가 HTML을 DOM으로 바꾸는 이유
- 원하는 요소를 동적으로 변경해줄 수 있다.
- 원하는 요소를 쉽게 찾을 수 있다.
→ 우리는 파이썬으로 html을 파싱해줄 수 있는 HTML parser가 필요하다!
Beautiful Soup
- HTML 코드를 분석해주는 HTML parser
import requests
res = requests.get("http://www.example.com")
# Beautiful Soup 불러오기
from bs4 import BeautifulSoup
soup = BeautifulSoup(res.text, "html.parser") # res.text를 파싱한 객체 생성
print(soup.prettify()) # 분석한 HTML을 보기 편하게 리턴
→ 들여쓰기가 포함되어 보기 편하게 출력된다.
이 파싱된 soup
객체를 통해 html의 요소들에 편하게 접근할 수 있다.
# html의 특정 요소들 가져오기
soup.title
soup.head
soup.body
특정 태그로 감싸진 요소를 찾기 위해서는 아래와 같이 find
, find_all
을 사용하고, 태그의 내용만 가져올 때는 .text
를 사용한다.
# <h1> 태그로 감싸진 요소 하나 찾기
h1 = soup.find("hi")
# <p> 태그로 감싸진 요소들 찾기
soup.find_all("p")
# 태그 이름 가져오기
h1.name
# 태그 내용 가져오기
h1.text
# 객체로 여러 번 접근할 수 있다.
soup.find("li","question-list-item").find("div","question").find("div","top").h4.text
Beautiful Soup 실습
- for loop로 모든 h3 태그 속 a 태그 가져오기
soup = BeautifulSoup(res.text, "html.parser")
h3_results = soup.find_all("h3")
for x in h3_results:
print(x.a.text) # 태그를 객체처럼 사용할 수 있다
# 속성에도 딕셔너리처럼 접근 가능
for x in h3_results:
print(x.a["title"])
HTML의 Locator로 원하는 요소 찾기
tagname
: 태그의 이름id
: 하나의 고유 태그를 가리키는 라벨, 중복 없음class
: 여러 태그를 묶는 라벨
id없이 태그 이름으로만 검색하면 모든 태그들을 찾아온다.
→ id를 설정하면 내가 원하는 태그만 가져올 수 있다!
# id를 이용해서 가져오기
soup.find("div", id="results") # div태그의 results
# class를 이용해서 가져오기
soup.find("div", "page-header")
📝참고: Pagenation
get
으로 html 문서를 가져올 때 여러 페이지의 내용을 가져오고 싶은 경우page={}.format()
처럼 format문을 이용해서 가져올 수 있다.for i in range(1,5): # 1-4쪽 res = requests.get("https://hashcode.co.kr/?page={}".format(i), user_agent) soup = BeautifulSoup(res.text, "html.parser") questions = soup.find_all("li","question-list-item")
728x90
'인공지능 데브코스 6기' 카테고리의 다른 글
[인공지능 데브코스 TIL] 0831 웹 스크래핑 기초 (4): Seaborn, WordCloud (0) | 2023.09.08 |
---|---|
[인공지능 데브코스 TIL] 0830 웹 스크래핑 기초 (3): Selenium (0) | 2023.09.07 |
[인공지능 데브코스 TIL] 0828 웹 스크래핑 기초 (1): HTTP 요청 주고받기 (0) | 2023.09.02 |
파이썬을 무기로, 코딩테스트 광탈을 면하자! 정리 (2) (0) | 2023.08.30 |
파이썬을 무기로, 코딩테스트 광탈을 면하자! 정리 (1) (0) | 2023.08.27 |