soup.find_all
은 단일 태그의 모든 발생에 대해 BeautifulSoup 문서를 검색합니다. 중첩 태그의 특정 패턴을 검색 할 수있는 방법이 있습니까?아름다운 스프 : 중첩 패턴을 찾으십니까?
예를 들어,이 패턴의 모든 항목을 검색하고 싶습니다 :
<div class="separator">
<a>
<img />
</a>
</div>
soup.find_all
은 단일 태그의 모든 발생에 대해 BeautifulSoup 문서를 검색합니다. 중첩 태그의 특정 패턴을 검색 할 수있는 방법이 있습니까?아름다운 스프 : 중첩 패턴을 찾으십니까?
예를 들어,이 패턴의 모든 항목을 검색하고 싶습니다 :
<div class="separator">
<a>
<img />
</a>
</div>
는 패턴을 찾을 수있는 여러 가지 방법이 있지만 가장 쉬운 방법은 하나는 CSS selector
사용하는 것입니다 :
for img in soup.select('div.separator > a > img'):
print img # or img.parent.parent to get the "div"
데모 :
>>> from bs4 import BeautifulSoup
>>> data = """
... <div>
... <div class="separator">
... <a>
... <img src="test1"/>
... </a>
... </div>
...
... <div class="separator">
... <a>
... <img src="test2"/>
... </a>
... </div>
...
... <div>test3</div>
...
... <div>
... <a>test4</a>
... </div>
... </div>
... """
>>> soup = BeautifulSoup(data)
>>>
>>> for img in soup.select('div.separator > a > img'):
... print img.get('src')
...
test1
test2
내가 엄밀히 말하면, 이해 마십시오 솔루션을 div
에 하나 이상의 a
자식이 있거나 a
태그 내부에 img
태그를 제외한 다른 요소가있는 경우 작동하지 않습니다. 이 경우 추가 점검을 통해 솔루션을 개선 할 수 있습니다 (필요한 경우 해답을 편집합니다).
체크 아웃 docs의이 부분을. 다음과 같은 함수를 원할 것입니다 :
def nested_img(div):
child = div.contents[0]
return child.name == "a" and child.contents[0].name == "img"
soup.find_all("div", nested_img)
P .: 이것은 테스트되지 않았습니다.
이것은 완벽합니다. 감사합니다! 내 특정 응용 프로그램에서는 img.parent를 사용하여 동봉 된 을 수정합니다. –