주니어 데이터 엔지니어 우솨's 개발일지

데이터 엔지니어링 8일차 TIL 본문

데브코스

데이터 엔지니어링 8일차 TIL

우솨 2024. 4. 3. 15:23

학습내용

BeautifulSoup
requests 모듈 사용시 아주 긴 텍스트이 정보를 가져오기 때문에 분석이 힘든 점을 보완하여 HTML코드를 분석해주는 HTML Parser를 이용할 수 있다.

res = requests.get('https://www.example.com')
soup = BeautifulSoup(res.text, 'html.parser')
- response의 body를 텍스트로 받고, html로 분석

soup.prettify()
-보기 편한 형태로 만들어준다.

폼 가져오기
-soup.title()
-soup.head()
-soup.body()

태그로 감싸진 특정요소 하나 찾기
- h1=soup.find('h1")
태그로 감싸진 특정요소 모두 찾기
-soup.find_all('p')
태그 이름 가져오기
-h1.name
태그 내용 가져오기
-h1.text

특정 태그를 타겟팅하는 방법
가장 간단하지만 가장 좋지 않은 방법이다.
- 웹사이트의 구조가 바뀌는 경우 다시 해야하기 때문

HTML의 Locator로 원하는 요소 찾기
태그는 자신의 이름 뿐만 아니라 고유한 속성 또한 가질 수 있다.
id와 class는 Lcator로서, 특정태그를 지칭하는데에 사용된다.
tagname : 태그의 이름
id : 하나의 고유 태그를 가리키는 라벨
class : 여러 태그를 묶는 라벨

id=results인 div태그 찾기
soup.find('div', id='results')

class=page-header인 div태그 찾기
find_result = soup.find('div','page-header')
-class검색시엔 class=을 붙이지 않고 바로 사용한다.
strip() : 공백제거

페이지네이션(Pagination)
많은 정보를 인덱스로 구분하는 기법
스크래핑시에 매 페이지마다 찾아야하기 때문에 불편하다.
반복을 통해 여러 페이지에서 정보 스크래핑이 가능하다.
한번에 여러 페이지에 대한 과도한 요청을 보내지 않기위해 time.sleep을 활용한다.
time.sleep(i) : i초 마다 요청을 함



정적 웹 사이트
HTML 내용이 고정된 정적(static)웹 사이트
- 같은 주소로 요청을 보내면 항상 같은 대답을 받을 수 있다.
- HTML문서가 완전하게 응답된다.

동적 웹 사이트
- HTML 내용이 변하는 동적(dynamic)웹 사이트
- 응답 후 HTML이 렌더링이 될 때까지의 지연시간이 존재한다.
ex)인스타그램, 유튜브

동적 웹 브라우저에선 JavaScript가 비동기 처리를 통해서 필요한 데이터를 채운다.
- 불완전한 응답을 받게됨 -> 임의로 시간을 지연한 후, 데이터 처리가 끝난 후의 정보를 가져온다.

Selenium
웹 브라우저를 자동화하는 라이브러리
- 응답 후 시간을 지연시킬 수 있다
- UI와의 상호작용이 가능하다(키보드 입력과 마우스 클릭등의 상호작용이 가능)

 

느낀 점

아직까지는 학부 때 배운내용이라 큰 어려움 없이 복습한다는 생각이 강하게 들었다.

하지만 다음부터 배울 Selenium부터는 다 처음하는 내용이라 쉽지 않을 것 같다는 생각이 든다.

정적, 동적 웹브라우저에 대해선 생각해본 적이 없었는데 인스타그램,유튜브 등 동적 웹브라우저가 강세를 띄는 만큼 점점 더  중요하게 생각해야 할 내용인 것 같다.