説明tag1の後にあるすべてのtag2インスタンスをsome_text_1で取得し、次のタグ2より前に取得する必要があります。は、基本的には、some_text_
というテキストのタグ1の後に最初のtag2
を取得することと同じです。
のでtag1's
は、特定のテキストを検索し、それがTAG2を引っ張っている場合は次の兄弟タグは、tag2
であるかどうかを確認:
html = """<tag1>some_text_1</tag1>
<tag2>text_1</tag2>
<tag3>....</tag3>
<tag2>text_2</tag2>
<tag1>some_text_2</tag1>
<tag2>text_3</tag2>"""
def get_tags_if_preceded_by(soup, tag1, tag2, text):
for t1 in soup.find_all(tag1, text=text):
nxt_sib = t1.find_next_sibling()
if nxt_sib and nxt_sib.name == tag2:
yield nxt_sib
soup = BeautifulSoup(html, "lxml")
print(list(get_tags_if_preceded_by(soup, "tag1", "tag2", "some_text_1")))
それが直接の後である必要はありません場合は、それが実際に可能それは単純に、あなただけの特定のtag2
兄弟を検索する必要があります。
def get_tags_if_preceded_by(soup, tag1, tag2, text):
for t1 in soup.find_all(tag1, text=text):
nxt_sib = t1.find_next_sibling(t2)
if nxt_sib:
yield nxt_sib
あなたは本当に、特に二つのタグの間のタグを検索したい場合は、あなたがthis answerのロジックを使用することができます。
次の前にtag2のすべてのインスタンスが意味をなさないため、< tag2>テキスト2の前か、 some_text_2 の意味ですか?タグ2が1つしかないためです。 –
Sandeep
タグ2はどこからでも、直後からでもどこからでもアクセスできますか?あなたの入力例は、あなたの問題の説明に役立たない。 –
はい、私は悪いのは、指定されたテキストと、次のタグ1の前にtag1の後にする必要があります – GhostKU