私は、BS4オブジェクトを持っており、使用してその一部を選択findAll
してfind_next_sibling
。私が「兄弟」と呼ぶこの部分から、次のようなforループを使用してすべての行にアクセスします。
for cursor in sibling:
index = sibling.index(cursor)
print(index) # works until here
next_cursor = sibling[index+1]
print(next_cursor) # breaks with KeyError
誰かが私がここで欠けているものを知っていますか?
私があなたの状況を理解していると仮定すると、私はこれについてもっと簡単な方法を提案することができます。
このようなHTMLがあるとします。
<span id="first">I'm first</span>
<span>first sibling</span>
<span>second sibling</span>
<span>third sibling</span>
<span>fourth sibling</span>
<span>fifth sibling</span>
次に、最初のspan
要素を見つけて、次のようなコードを使用してそのすべての兄弟を識別できます。
>>> import bs4
>>> soup = bs4.BeautifulSoup(open('temp.htm').read(), 'lxml')
>>> first = soup.select('#first')
>>> first
[<span id="first">I'm first</span>]
この行は、findNextSiblings
メソッドが提供するものを表示することだけを目的としています。
>>> first[0].findNextSiblings()
[<span>first sibling</span>, <span>second sibling</span>, <span>third sibling</span>, <span>fourth sibling</span>, <span>fifth sibling</span>]
これは、最初の兄弟へのポインターを取得すると、1つのfor
ステートメントで他のすべてを取得できることを意味します。
>>> for sib in first[0].findNextSiblings():
... sib.text
...
'first sibling'
'second sibling'
'third sibling'
'fourth sibling'
'fifth sibling'
別の方法でfetchNextSiblings
は、上記で使用したものと同じ結果が得られます。
>>> first[0].fetchNextSiblings()
[<span>first sibling</span>, <span>second sibling</span>, <span>third sibling</span>, <span>fourth sibling</span>, <span>fifth sibling</span>]
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加