복붙노트

[PYTHON] 아름다운 수프에 중첩 된 요소를 얻는 방법

PYTHON

아름다운 수프에 중첩 된 요소를 얻는 방법

나는 td에서 몇몇 HREF를 얻기 위해 필요한 문법으로 고심하고있다. 테이블, tr 및 td 요소에는 클래스 나 ID가 없습니다.

이 예제에서 앵커를 잡고 싶다면 무엇이 필요합니까?

     ...

감사

해결법

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

    1.문서별로, 먼저 구문 분석 트리를 만듭니다.

    문서별로, 먼저 구문 분석 트리를 만듭니다.

    import BeautifulSoup
    html = "<html><body><tr><td><a href='foo'/></td></tr></body></html>"
    soup = BeautifulSoup.BeautifulSoup(html)
    

    직접 부모가 인 태그의 경우와 같이 검색합니다.

    for ana in soup.findAll('a'):
      if ana.parent.name == 'td':
        print ana["href"]
    
  2. ==============================

    2.이 같은?

    이 같은?

    from BeautifulSoup import BeautifulSoup
    soup = BeautifulSoup(html)
    anchors = [td.find('a') for td in soup.findAll('td')]
    

    그것은 당신이 제공하는 html의 각 "td"안에있는 첫 번째 "a"를 찾아야합니다. 좀 더 구체적으로하기 위해 td.find를 조정할 수도 있고, 각 TD 내에 여러 개의 링크가있는 경우 findAll을 사용할 수도 있습니다.

    업데이트 : Daniele의 덧글입니다. 목록에 아무 것도 없음을 확인하려면 다음과 같이 목록 이해를 수정할 수 있습니다.

    from BeautifulSoup import BeautifulSoup
    soup = BeautifulSoup(html)
    anchors = [a for a in (td.find('a') for td in soup.findAll('td')) if a]
    

    기본적으로 td.find ( 'a')가 반환 한 실제 요소가 있는지 확인하기위한 검사를 추가합니다.

  3. from https://stackoverflow.com/questions/1058599/how-to-get-a-nested-element-in-beautiful-soup by cc-by-sa and MIT license