2014-05-24 2 views
1
<!DOCTYPE html> 

<html class="client-nojs" dir="ltr" lang="en"> 
<body> 
<h2><span class="mw-headline" id="Danish">Danish</span></h2> 
<h3><span class="mw-headline" id="Noun">Noun</span><span class="mw-editsection"> 
</h3> 
<p><strong class="Latn headword" lang="da">bringen</strong>blabla</span></p> 
<ol> 
<li><span class="form-of-definition">blabla</span></li> 
</ol> 
<hr/> 
<h2><span class="mw-headline" id="German">German</span>blabla</span></h2> 
<h3><span class="mw-headline" id="Noun">Noun</span><span class="mw-editsection"> 
    </h3> 
<h3><span class="mw-headline" id="Etymology">blabla</span></h3> 
<p>From <span class="etyl"></p> 
<h3><span class="mw-headline" id="Pronunciation">Pronunciation</span></h3> 
<ul> 
</body> 
</html> 

까지 모든 것을 무시하려면 BS가 필요합니다. 스프레드를 만들 때 스프레드를 분할하는 것이 바람직합니다. id="German" 부분은 가변적이지 않으며 그 밖의 모든 부분은 가변적입니다.BeautifulSoup을 사용하면 내 html .. 섹션을 건너 뜁니다. 또는 분할합니다.

내장형 분할 기능을 사용해 보았지만 작동하지 않았습니다. 또한 여기에 몇 가지 답변을 보았지만 나는 그들에게서 현명한 사람을 얻지 못했습니다. 팁?

편집 : 보시다시피, '명사'ID가있는 두 개의 범위가 있습니다. 나는 '독일'바로 뒤에 오는 것이 필요합니다. 나는 BeautifulSoup이 어떻게 두 번째 것을 발견 할 수 있을지 확신하지 못한다. 이 목록에 Noun로 설정된 id 속성을 가진 모든 스팬을 찾을 수 있습니다

start = soup.select('h2 span#German')[0] 
headlines = start.find_all_next('span', id='Noun') 

:

+0

당신은 "나는 ... 모든 것을 통해 볼 BS 필요"무엇을 의미합니까? DOM을 반복 할 수 있으며, "봤다"면이 시점에서 반복을 멈출 수 있습니다. 시도한 내용, 출력 내용 및보고 싶은 출력을 보여줄 수 있습니다. –

+2

일반적으로 사람들이 나무에서 물건을 변경/삭제하는 방법을 묻는다면 실제로 원하는 것을 찾기 위해 검색을 수행하는 방법을 묻는 것입니다. 목표를 달성하는 방법을 묻는 대신 [시도한 솔루션] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)에 대해 질문했습니다. – roippi

+0

죄송합니다. 제 질문에 완전히 명확하지 않았습니다. 특정 지점까지 모든 것을 무시하고 반복 만 시작해야합니다. – wasmachien

답변

2

당신은 아마 당신이 후 지정된 요소를 전체 트리 를 검색 할 수있는의 Element.find_all_next() method으로 원하는 것을 찾을 수 있습니다 다음에 독일 <h2> 태그.

모두 대신 첫 번째 다음 일치 항목을 찾는 방법은 Element.find_next()입니다.

, find_all_next()find_next() 작업 정확히find_all()find() 만 주어진 출발점 과거 트리를 검색있다. 다른 방향으로 검색하려면 find_all_previous() and find_previous() methods이 있습니다.

데모 :

>>> soup = BeautifulSoup('''\ 
... <!DOCTYPE html> 
... 
... <html class="client-nojs" dir="ltr" lang="en"> 
... <body> 
... <h2><span class="mw-headline" id="Danish">Danish</span></h2> 
... <h3><span class="mw-headline" id="Noun">Noun</span><span class="mw-editsection"> 
... </h3> 
... <p><strong class="Latn headword" lang="da">bringen</strong>blabla</span></p> 
... <ol> 
... <li><span class="form-of-definition">blabla</span></li> 
... </ol> 
... <hr/> 
... <h2><span class="mw-headline" id="German">German</span>blabla</span></h2> 
... <h3><span class="mw-headline" id="Noun">Noun</span><span class="mw-editsection"> 
...  </h3> 
... <h3><span class="mw-headline" id="Etymology">blabla</span></h3> 
... <p>From <span class="etyl"></p> 
... <h3><span class="mw-headline" id="Pronunciation">Pronunciation</span></h3> 
... <ul> 
... </body> 
... </html> 
... ''') 
>>> start = soup.select('h2 span#German')[0] 
>>> start.find_all_next('span', id='Noun') 
[<span class="mw-headline" id="Noun">Noun</span>] 
관련 문제