BeautifulSoup에서 특정 태그의 내용을 가져오는 방법 자세히 보기

다음은 개인이 beautifulSoup을 배우는 과정에서 정리한 것이다. 현재 내가 파충류 데이터를 사용할 때 사용하는 방법은 다음과 같다. 먼저find_all () 필요한 내용이 있는 태그를 찾아서 필요한 내용이 하나라면find_all () 만족하지 못하면 두 개 혹은 여러 개를 사용하세요.다음에find_all의 결과, get_로txt (), get ('href'), 텍스트나 링크를 얻고 각자의 목록에 넣습니다.이렇게 하면 txt의 데이터는 하나의 단독 목록이고 링크된 데이터도 하나의 단독 목록이다. 한편으로는 이러한 데이터 간의 구조성을 나타낼 수 없고, 다른 한편으로는 더 많은 내용을 얻으려면 더 많은 빈 목록을 만들어야 한다.
모든 태그를 반복합니다.

soup.find_all('a')
모든 페이지에 라벨 a가 포함된 html 문장을 찾아서 목록 형식으로 저장합니다.찾은 탭은 for로 결과를 훑어보거나purify로 링크, 문자 등 결과를 얻을 수 있습니다.

#  
links=[] 
txts=[]
tags=soup.find_all('a')
for tag in tags:
  links.append(tag.get('href')
  txts.append(tag.txt)         # txts.append(tag.get_txt())
html의 속성명을 획득:

atr=[]
tags=soup.find_all('a')
for tag in tags:
  atr.append(tag.p('class')) #  a  , p class  
find_all () 의 관련 사용 사례:
실례BeautifulSoup 중국어 문서
1. 문자열
가장 간단한 필터는 문자열이다.검색 방법에 문자열 매개 변수를 입력하면 Beautiful Soup은 문자열과 일치하는 내용을 찾습니다. 다음 예는 문서의 모든 태그를 찾는 데 사용됩니다.

soup.find_all('b')
# [<b>The Dormouse's story</b>]
2. 정규 표현식
정규 표현식을 매개 변수로 전송하면 Beautiful Soup은 정규 표현식의 match()를 통해 내용을 일치시킵니다.다음 예에서는 b로 시작하는 모든 태그를 찾습니다. 이 표시와 태그는 모두 찾아야 합니다.

import re
for tag in soup.find_all(re.compile("^b")):
  print(tag.name)
# body
# b
다음 코드는 모든 이름에't'가 포함된 태그를 찾아냅니다.

for tag in soup.find_all(re.compile("t")):
  print(tag.name)
# html
# title
3. 목록
목록 매개 변수가 전송되면 Beautiful Soup은 목록의 요소와 일치하는 내용을 반환합니다.다음 코드는 문서의 모든 태그와 태그를 찾습니다.

soup.find_all(["a", "b"])
# [<b>The Dormouse's story</b>,
# <a class="sister" href="http://example.com/elsie" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" id="link1">Elsie</a>,
# <a class="sister" href="http://example.com/lacie" rel="external nofollow" rel="external nofollow" rel="external nofollow" id="link2">Lacie</a>,
# <a class="sister" href="http://example.com/tillie" rel="external nofollow" rel="external nofollow" rel="external nofollow" id="link3">Tillie</a>]
4. 메서드(사용자 정의 함수, find_all 전송)
적절한 필터가 없으면 요소 매개 변수만 받아들일 수 있는 방법을 정의할 수 있습니다 [4]. 이 방법이 True로 돌아가면 현재 요소가 일치하고 발견되고, 그렇지 않으면 False로 되돌아옵니다.
다음 방법은 현재 요소를 검증했습니다. 만약class 속성을 포함하지만 id 속성을 포함하지 않으면 True로 돌아갑니다.

def has_class_but_no_id(tag):
  return tag.has_attr('class') and not tag.has_attr('id')```
반환 결과 중
라벨은 라벨이 없습니다. 라벨은'id'를 정의했기 때문에 되돌려주지 않았습니다.'class'속성이 정의되어 있지 않기 때문입니다.
다음 코드는 문자에 포함된 모든 노드 내용을 찾습니다.

from bs4 import NavigableString
def surrounded_by_strings(tag):
  return (isinstance(tag.next_element, NavigableString)
      and isinstance(tag.previous_element, NavigableString))

for tag in soup.find_all(surrounded_by_strings):
  print tag.name
# p
# a
# a
# a
# p
5. CSS로 검색
CSS 클래스 이름에 따라 tag를 검색하는 기능은 매우 실용적이지만, CSS 클래스 이름을 표시하는 키워드 class는 Python에서 보존된 글자이며,class를 매개 변수로 사용하면 문법 오류를 초래할 수 있습니다.Beautiful Soup의 4.1.1 버전부터 class_매개변수 검색에 지정된 CSS 클래스 이름이 있는 태그:

soup.find_all("a", class_="sister")
# [<a class="sister" href="http://example.com/elsie" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" id="link1">Elsie</a>,
# <a class="sister" href="http://example.com/lacie" rel="external nofollow" rel="external nofollow" rel="external nofollow" id="link2">Lacie</a>,
# <a class="sister" href="http://example.com/tillie" rel="external nofollow" rel="external nofollow" rel="external nofollow" id="link3">Tillie</a>]
또는:

soup.find_all("a", attrs={"class": "sister"})
# [<a class="sister" href="http://example.com/elsie" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" id="link1">Elsie</a>,
# <a class="sister" href="http://example.com/lacie" rel="external nofollow" rel="external nofollow" rel="external nofollow" id="link2">Lacie</a>,
# <a class="sister" href="http://example.com/tillie" rel="external nofollow" rel="external nofollow" rel="external nofollow" id="link3">Tillie</a>]
6. text 매개 변수에 따라 찾기
텍스트 매개 변수를 통해 문서의 문자열 내용을 찾을 수 있습니다.name 매개 변수의 선택 가능한 값과 같이text 매개 변수는 문자열, 정규 표현식, 목록, True를 받아들입니다.예:

soup.find_all(text="Elsie")
# [u'Elsie']

soup.find_all(text=["Tillie", "Elsie", "Lacie"])
# [u'Elsie', u'Lacie', u'Tillie']

soup.find_all(text=re.compile("Dormouse"))
[u"The Dormouse's story", u"The Dormouse's story"]

def is_the_only_string_within_a_tag(s):
  ""Return True if this string is the only child of its parent tag.""
  return (s == s.parent.string)

soup.find_all(text=is_the_only_string_within_a_tag)
# [u"The Dormouse's story", u"The Dormouse's story", u'Elsie', u'Lacie', u'Tillie', u'...']

텍스트 파라미터는 문자열을 검색하는 데 사용되지만, 다른 파라미터와 혼합하여 태그를 필터할 수 있습니다.뷰티풀 수프가 찾을 거예요.string 방법과text 매개 변수 값이 일치하는 tag.다음 코드는 내용에'Elsie'가 포함된 태그를 검색하는 데 사용됩니다.

soup.find_all("a", text="Elsie")
# [<a href="http://example.com/elsie" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="sister" id="link1">Elsie</a>]
7. 현재 레이블의 하위 노드만 찾기
tag 호출find_all () 방법으로 Beautiful Soup은 현재 tag의 모든 자손 노드를 검색합니다. tag의 직접 자손 노드만 검색하려면 매개 변수recursive=False를 사용할 수 있습니다.
간단한 문서:

<html>
 <head>
 <title>
  The Dormouse's story
 </title>
 </head>
...
recursive 매개 변수의 검색 결과를 사용할지 여부:

soup.html.find_all("title")
# [<title>The Dormouse's story</title>]

soup.html.find_all("title", recursive=False)
# []
이 글은 BeautifulSoup에서 특정 태그의 내용을 얻는 방법에 대한 상세한 설명입니다. 더 많은 관련 BeautifulSoup에서 특정 태그의 내용을 얻으려면 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기