인프런 커뮤니티 질문&답변

루키22님의 프로필 이미지
루키22

작성한 질문수

[2024 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)

데이터 추출하기 - not 선택자 활용

어떤 경우에 get_attribute 이걸 사용하나요?

작성

·

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_oneget_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은 동적 페이지에서 특정 요소의 속성 값을 가져올 때 사용됩니다. 선택하는 메서드는 작업하려는 페이지의 유형(정적 또는 동적)과 필요한 데이터의 특성에 따라 결정됩니다.

루키22님의 프로필 이미지
루키22

작성한 질문수

질문하기