requests
모듈을 사용해서 페이지의 내용을 긁어왔지만 원하는 태그의 내용까지 긁어오기엔 힘들었다. 이를 해결하기 위해 BeatifulSoup4
모듈을 사용한다.time.sleep()
을 사용한다.# 필요한 라이브러리 import
import requests
from bs4 import BeatifulSoup
# 웹 페이지 파싱
## requests.get()의 두 번째 인자는 header에 들어갈 내용.
## 지정해주고 싶은 header를 객체로 작성하여 넘겨준다.
res = requests.get('url', user_urgent)
## BeatifulSoup 첫 번째 인자에는 requests로 받아온 body를 넘겨준다.
## 두 번째 인자는 html을 파싱하는 것이라고 명시해야한다.
## why? xml과 같은 다른 마크업 언어도 파싱해주기 때문
soup = BeatifulSoup(res.text, 'html.parser')
# 태그로 감싸진 요소 찾기
soup.find('p') # p 태그 중 가장 첫 번째 내용만 반환
## >> <p> ~~~ </p>
soup.find_all('p') # 모든 p 태그의 내용을 리스트로 묶어서 반환
## >> [<p> ~~~ </p>, <p> ~~~ </p>, <p> ~~~ </p>, ...]
# 태그 이름과 내용 가져오기
## <p> 안녕 </p> 이 있다고 가정
p = soup.find('p')
p.name
## >> 'p'
p.text
## >> '안녕'
# 태그 안에 속성의 값 가져오기
## <div title="제목"> 안녕 </div> 이 있다고 가정
div = soup.find('div')
div["title"]
## >> '제목'
# 특정 id, class의 내용 가져오기
## <div id="hi"> 안녕 </div>
## <li class="many-list"> ~~~ </li> 가 있다고 가정
soup.find("div", id="hi")
## >> <div id="hi"> 안녕 </div>
soup.find("li", "many-list")
## >> <li class="many-list"> ~~~ </li>
requests
요청 시 동적 웹 사이트에 적용이 어렵고, UI 상호 작용이 어렵기 때문에 이를 해결하기 위해 Selenium
이라는 웹 브라우저 자동화하는 라이브러리를 사용한다.오랜만에 보는 BS4 라이브러리가 반갑게 느껴졌다.
오늘 배운 간단한 메소드를 제외하고 더 간편하게 사용할 수 있는 메소드들이 많았던 것 같은데 따로 정리하는 시간을 가지는 것도 좋을 것 같다.
Stack에 대해 글을 정리했는데 후위 표현식 전환하는 과정이 재미있었다. stack을 적용하는 다른 상황들도 풀어보고 싶다.