CodeGym /행동 /Python SELF KO /find와 find_all 메소드로 원하는 요소 스크레이핑하기

find와 find_all 메소드로 원하는 요소 스크레이핑하기

Python SELF KO
레벨 32 , 레슨 1
사용 가능

1. findfind_all를 왜 사용할까?

오늘은 HTML 문서에서 특정 요소를 효과적으로 추출하기 위해 사용할 수 있는 두 가지 주요 메소드 findfind_all에 대해 이야기해 볼게.

코드를 작성하기 전에, 왜 이 메소드들이 필요한지 얘기해보자. 웹 페이지를 거대한 도서관이라고 상상해 봐. 모든 단어나 문장은 HTML 요소로 되어 있어. 이런 정보들을 찾는 건 어떤 맛의 아이스크림인지 모르고 맞추는 것과 같을 수 있어. findfind_all 메소드는 너의 "맛 탐지기" 같은 역할을 해줄 거야. 이걸로 필요한 정보를 정확히 찾을 수 있어.

  • find: 이 메소드는 아침에 첫 커피 한 잔을 찾는 것처럼 빠르게 특정 조건에 맞는 첫 번째 요소를 찾아줘.
  • find_all: 이건 좀 더 여유롭고 철저한 방식인데, 조건에 맞는 모든 요소의 리스트를 반환해. 여러 개의 정보를 얻고 싶을 때 딱이야 (예를 들어 하루 종일 여러 잔의 커피처럼).

2. find 사용하기

find 메소드는 첫 번째로 일치하는 요소를 빠르게 추출해야 할 때 쓸 수 있어. 이 메소드는 태그 이름, 속성, 함수 같은 다양한 매개변수를 받을 수 있지.

find 메소드 시그니처


find(name=None, attrs={}, recursive=True, string=None, **kwargs)

find 메소드 매개변수

  • name: 찾고 싶은 태그 이름이야. div, p, h1, a 등 HTML 태그라면 뭐든 될 수 있어.
  • attrs: 태그 속성의 딕셔너리. 예를 들어 {'class': 'example'} 또는 {'id': 'main'}. 이 매개변수로 검색을 좁힐 수 있어.
  • recursive: 이 메소드는 태그를 모든 중첩 수준에서 검색할지 여부를 결정하는 부울 매개변수야. 기본값은 True로, 모든 중첩 수준에서 검색이 이루어진다는 뜻이야.
  • string: 특정 텍스트 포함 요소를 검색해. 텍스트 내용으로 필터링할 때 유용하지.
  • kwargs: 속성을 기준으로 검색할 때 추가적인 매개변수를 사용할 수 있어. class_ 같은 걸 지정하면 attrs={'class': 'value'}로 해석돼.

예제

Python

from bs4 import BeautifulSoup

html_doc = """

    The Dormouse's story
    
        

The Dormouse's story

Once upon a time there were three little sisters; and their names were Elsie, Lacie and Tillie; and they lived at the bottom of a well.

""" soup = BeautifulSoup(html_doc, 'html.parser') first_link = soup.find('a') # 첫 번째 태그 찾기. print(first_link) # 출력: Elsie

보다시피, find 메소드는 문서 내 첫 번째 <a> 태그를 찾아냈고, 우리는 필요한 정보를 찾은 상태에서 탐색을 계속할 수 있어.

3. find_all 사용하기

find_all 메소드는 지정된 조건에 맞는 모든 요소의 리스트를 반환해. 특정 유형의 태그나 클래스가 있는 모든 요소를 가져와야 할 때 매우 유용해.

find_all 메소드 시그니처


find_all(name=None, attrs={}, recursive=True, string=None, limit=None, **kwargs)

find_all 메소드 매개변수

  • name: 찾고자 하는 태그 이름이야. 태그 이름 문자열(div, a, p 등)이거나 태그 리스트(["div", "p"])일 수 있어.
  • attrs: 태그를 필터링하기 위한 속성 딕셔너리. 예: {'class': 'example'}.
  • recursive: 검색을 중첩된 태그까지 수행할지 결정해. 기본값은 True.
  • string: 지정된 텍스트를 포함한 태그를 찾아.
  • limit: 반환된 결과의 최대 개수를 제한해. 지정되면 메소드는 최대 limit 개의 요소를 반환해.
  • kwargs: 태그 속성을 필터링하기 위한 추가적인 매개변수야.

find_all 사용 예제

find가 필요한 책 한 권을 빨리 찾는 것과 같다면, find_all은 섹션별로 모든 제목을 확인하며 더 깊이 파고드는 것과 같아.

Python

all_links = soup.find_all('a')  # 모든  태그 찾기.

for link in all_links:
    print(link.get('href'))  # 링크 출력: http://example.com/elsie, http://example.com/lacie, http://example.com/tillie

이 예제에서는 모든 <a> 태그를 검색한 후, 각 태그에서 링크를 추출했어. 페이지에서 모든 링크를 수집하는 데 유용하지.

중요! find()find_all() 메소드는 soup 객체뿐만 아니라 find(), select() 등으로 반환된 모든 하위 요소에서도 호출할 수 있어.

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION