본문 바로가기
파이썬

파이썬 BeautifulSoup : 중첩 된 <ul>을 포함하는 <ul> 목록에서 모든 <li>를 어떻게 추출합니까?

by º기록 2020. 10. 21.
반응형

내 소스 코드는 다음과 같습니다.

<h3>Header3 (Start here)</h3>
<ul>
    <li>List items</li>
    <li>Etc...</li>
</ul>
<h3>Header 3</h3>
<ul>
    <li>List items</li>
    <ul>
        <li>Nested list items</li>
        <li>Nested list items</li></ul>
    <li>List items</li>
</ul>
<h2>Header 2 (end here)</h2>

모든 중첩 된 li 태그를 포함하여 첫 번째 "h3"태그 다음에 오는 모든 "li"태그와 다음 "h2"태그에서 멈추기를 원합니다.

firstH3 = 수프 .find ( 'h3')

시작하고 싶은 장소를 정확하게 찾습니다.

firstH3 = soup.find('h3') # Start here
uls = []
for nextSibling in firstH3.findNextSiblings():
    if nextSibling.name == 'h2':
        break
    if nextSibling.name == 'ul':
        uls.append(nextSibling)

각각 필요한 LI 컨텐츠가있는 UL 목록을 제공합니다.

"uls"목록의 일부 :

<ul>
...



<li>Air Bud series: <ul>





</ul> </li>


... </ul>


최신 정보:

최종 코드 :

lis = []
    for ul in uls:
        for li in ul.findAll('li'):
            if li.find('ul'):
                break
            lis.append(li)

    for li in lis:
        print li.text.encode("utf-8")

If-> break는 중첩 된 LI가 이제 복제되었으므로 UL을 포함하는 LI를 버립니다.

인쇄 출력은 다음과 같습니다.

  • 102 명의 달마시안 (2000)
  • 10th & Wolf(2006)
  • 11:14 (2006)
  • 12:08 East of Bucharest (2006)
  • 13 년 30 일 (2004)
  • 1408 (2007)
  • ...

감사

 

해결 방법

 

.findAll () 은 중첩 된 li 요소에서 작동합니다.

for ul in uls:
    for li in ul.findAll('li'):
        print(li)

산출:

<li>List items</li>
<li>Etc...</li>
<li>List items</li>
<li>Nested list items</li>
<li>Nested list items</li>
<li>List items</li>

 

참조 페이지 https://stackoverflow.com/questions/4362981

 

 

반응형

댓글