복붙노트

[PYTHON] Beautifulsoup - nextSibling

PYTHON

Beautifulsoup - nextSibling

다음 내용을 사용하여 "My home address"내용을 가져 오려고하지만 AttributeError가 있습니다.

address = soup.find(text="Address:")
print address.nextSibling


    <td><b>Address:</b></td>

    <td>My home address</td>

td 태그를 탐색하고 콘텐츠를 가져 오는 좋은 방법은 무엇입니까?

해결법

  1. ==============================

    1.문제는 가 아닌 NavigableString을 발견 한 것입니다. 또한 nextSibling은 다음 NavigableString 또는 Tag를 찾을 수 있으므로 를 사용하더라도 예상대로 작동하지 않습니다.

    문제는 가 아닌 NavigableString을 발견 한 것입니다. 또한 nextSibling은 다음 NavigableString 또는 Tag를 찾을 수 있으므로 를 사용하더라도 예상대로 작동하지 않습니다.

    이것이 당신이 원하는 것입니다 :

    address = soup.find(text="Address:")
    b_tag = address.parent
    td_tag = b_tag.parent
    next_td_tag = td_tag.findNext('td')
    print next_td_tag.contents[0]
    

    또는보다 간결하게 :

    print soup.find(text="Address:").parent.parent.findNext('td').contents[0]
    

    사실 당신은 할 수 있어요.

    print soup.find(text="Address:").findNext('td').contents[0]
    

    findNext는 next를 반복해서 호출하기 때문에 next는 다음 요소를 매칭 될 때까지 반복해서 파싱합니다.

  2. ==============================

    2.bs4를 사용한다면 이것을 시도하십시오 :

    bs4를 사용한다면 이것을 시도하십시오 :

    print soup.find(string="Address:").find_next('td').contents[0]
    
  3. ==============================

    3.findChildren을 사용하면 table에 있다고 가정하고 테이블에서 td를 반복 할 수 있습니다. 이상적으로 먼저 표를 찾을 수 있습니다.

    findChildren을 사용하면 table에 있다고 가정하고 테이블에서 td를 반복 할 수 있습니다. 이상적으로 먼저 표를 찾을 수 있습니다.

    table = soup.find('table')
    >>> for td in table.findChildren('td'):
    ...:     print td.text
    ...:     
    ...:     
    Address:
    My home address
    

    또는 주소를 검색하고 테이블 컨테이너를 가져올 수 있습니다.

    >>> import re
    >>> search = re.compile('Address')
    >>> table = soup.find(text=search).parent.parent.parent
    
  4. from https://stackoverflow.com/questions/5999747/beautifulsoup-nextsibling by cc-by-sa and MIT license