나는 <a>
자식 인 모든 태그 를 얻고 싶다.<li>
.
<div>
<li class="test">
<a>link1</a>
<ul>
<li>
<a>link2</a>
</li>
</ul>
</li>
</div>
다음과 같은 특정 클래스의 요소를 찾는 방법을 알고 있습니다.
soup.find("li", { "class" : "test" })
그러나 나는 모든 것을 찾는 방법을 모른다 <a>
<li class=test>
다른 사람이 아닌 모든 자녀 .
내가 선택하고 싶은 것처럼 :
<a>link1</a>
답변
이 시도
li = soup.find('li', {'class': 'text'})
children = li.findChildren("a" , recursive=False)
for child in children:
print child
답변
DOC에는 직계 자식 을 찾고 / 찾는 방법을 보여주는 매우 작은 섹션이 있습니다.
https://www.crummy.com/software/BeautifulSoup/bs4/doc/#the-recursive-argument
귀하의 경우 첫 번째 직계 자식 인 link1을 원하면 :
# for only first direct child
soup.find("li", { "class" : "test" }).find("a", recursive=False)
직계 자녀를 모두 원하는 경우 :
# for all direct children
soup.find("li", { "class" : "test" }).findAll("a", recursive=False)
답변
아마도 당신은
soup.find("li", { "class" : "test" }).find('a')
답변
이 시도:
li = soup.find("li", { "class" : "test" })
children = li.find_all("a") # returns a list of all <a> children of li
기타 알림 :
find 메소드는 처음 발생하는 자식 요소 만 가져옵니다. find_all 메소드는 모든 하위 요소를 가져와 목록에 저장됩니다.
답변
“모든 a
자녀 를 찾는 방법<li class=test>
다른 사람이 아닌 모든 ?”
아래의 HTML을 감안할 때 (내가 다른 추가 <a>
사이 테 차이를 보여 select
과 select_one
) :
<div>
<li class="test">
<a>link1</a>
<ul>
<li>
<a>link2</a>
</li>
</ul>
<a>link3</a>
</li>
</div>
해결책은 두 CSS 선택자 사이에 배치 된 자식 결합 자 ( >
) 를 사용 하는 것입니다.
>>> soup.select('li.test > a')
[<a>link1</a>, <a>link3</a>]
첫 번째 자녀 만 찾고 싶은 경우 :
>>> soup.select_one('li.test > a')
<a>link1</a>
답변
또 다른 방법- True
원하는 모든 태그에 대해 반환하는 필터 함수를 만듭니다 .
def my_filter(tag):
return (tag.name == 'a' and
tag.parent.name == 'li' and
'test' in tag.parent['class'])
그런 다음 find_all
인수로 호출 하십시오.
for a in soup(my_filter): # or soup.find_all(my_filter)
print a