문제
여기에는 코드를 HTML 파일 내가 탐험 아름다운 스프입니다.
<td width="50%">
<strong class="sans"><a href="http:/website">Site</a></strong> <br />
하고 싶을 얻 <a href>
을 위해 모든 라인가 <strong class="sans">
과 내부에 있는 <td width="50%">
.
그것은 가능한 쿼리 HTML 파일을 사람들을 위해 여러 조건을 사용하여 아름다운 스프?
해결책
BeautifulSoup 의 검색 메커니즘을 받아들일 가능는 문서를 표시하는 추천에 대한 귀하의 경우:"필요하신 경우에는 부과하는 복잡하거나 연동에 대한 제한이 태그의 특성,전달 가능한 객체 이름,...".(ok...그들이 말하는 특성에 대한 구체적으로,그러나 조언을 반영한 근본적인 정신을 BeautifulSoup API).
을 원하는 경우에 한 줄:
soup.findAll(lambda tag: tag.name == 'a' and \
tag.findParent('strong', 'sans') and \
tag.findParent('strong', 'sans').findParent('td', attrs={'width':'50%'}))
내가 사용한 람다 이 예제에서는,하지만 실제로 정의할 수도 있습 호출 가능한 기능이 있는 경우 여러 체인 요구 사항을 이 람다는 두 개의 findParent('strong', 'sans')
을 방지하기 위해 통화를 올리는 예외 경우 <a>
태그가 없 strong
부모입니다.를 사용하여 적절한 기능을 만들 수 있는 테스트를 더욱 효율적입니다.
다른 팁
>>> BeautifulSoup.BeautifulSoup("""<html><td width="50%">
... <strong class="sans"><a href="http:/website">Site</a></strong> <br />
... </html>""" )
<html><td width="50%">
<strong class="sans"><a href="http:/website">Site</a></strong> <br />
</td></html>
>>> [ a for a in strong.findAll("a")
for strong in tr.findAll("strong", attrs = {"class": "sans"})
for tr in soup.findAll("td", width = "50%")]
[<a href="http:/website">Site</a>]
제휴하지 않습니다 StackOverflow