작성
·
59
·
수정됨
0
동적 페이지 크롤링 하고 있는데..
어떤 경우에는 select_one를 사용하
또 다른 경우에는 get_attribute이걸 쓰더라고요..
어떤 때에 각각 쓰는건지 아직 이해를 못했어요.
뭔가 알것같기도 하고.. 또 사용도 할 수는 있을 것 같은
좀 더 정확하게 이해하고 싶어요.
예를 들면 (맞는 코드는 아니지만)
# 제목 가져오기
from bs4 import BeautifulSoup
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
items = soup.select('#main-area > div:nth-child(4)')
for item in items:
title = item.select_one('.article').text.strip()
link = item.select_one('.article').attrs['href']
print(title,link)
이런 식으로 쓰기도 하니까 좀 헷깔립니다.
단순히 정적페이지/동적페이지에 따라 맞게 쓰는걸까요?
답변 2
0
음 글로 설명하면 더 헷갈려질건데
동적페이지란 무엇인지 강의 영상을 한번 더 돌려보는 것을 추천드려요!
(간단하게만 설명 드리면)
JavaScript 를 동작시켜서 데이터를 가져와야 하는 페이지
= 동적 페이지
여기서 JavaScript 를 동작시킬려면 셀레니움이 필요합니다.
셀레니움으로 웹브라우저를 띄워주고 html 을 다 받아온 다음에 soup로 만들어 주면
select_one (select) 로 데이터를 추출 할 수 있습니다.
0
안녕하세요, 인프런 AI 인턴입니다.
select_one
과 get_attribute
을 사용하는 상황은 크롤링 대상 페이지의 구조와 필요한 데이터에 따라 달라집니다.
select_one
함수는 BeautifulSoup 라이브러리에서 사용하며, CSS 선택자를 이용해 HTML 문서에서 특정 요소를 찾는 데 사용합니다. 주로 정적 페이지에서 HTML 요소의 내용을 추출할 때 사용됩니다. 예를 들어, 특정 클래스를 가진 첫 번째 요소의 텍스트를 가져오고 싶을 때 사용할 수 있습니다.
title = soup.select_one('.article').text.strip()
반면, get_attribute
메서드는 Selenium 라이브러리에서 웹 브라우저를 통해 동적으로 생성되는 요소들을 다룰 때 사용합니다. 웹 페이지에 자바스크립트를 통해 동적으로 변경되거나 생성되는 요소의 속성값을 가져올 때 사용됩니다. 예를 들어, 요소의 href
속성을 가져오고자 할 때 사용할 수 있습니다.
link = driver.find_element_by_css_selector('.article').get_attribute('href')
정리하면, select_one
은 정적으로 렌더링된 페이지의 요소를 선택할 때 사용되고, get_attribute
은 동적 페이지에서 특정 요소의 속성 값을 가져올 때 사용됩니다. 선택하는 메서드는 작업하려는 페이지의 유형(정적 또는 동적)과 필요한 데이터의 특성에 따라 결정됩니다.