我有這樣與結構的文檔:如何在兩個其他標籤之間找到一個標籤?
<tag1>some_text_1</tag1>
<tag2>text_1</tag2>
<tag3>....</tag3>
<tag2>text_2</tag2>
<tag1>some_text_2</tag1>
<tag2>text_3</tag2>
...
,我需要得到所有tag2
實例是tag1
與some_text_1
後先下一tag1
。
我有這樣與結構的文檔:如何在兩個其他標籤之間找到一個標籤?
<tag1>some_text_1</tag1>
<tag2>text_1</tag2>
<tag3>....</tag3>
<tag2>text_2</tag2>
<tag1>some_text_2</tag1>
<tag2>text_3</tag2>
...
,我需要得到所有tag2
實例是tag1
與some_text_1
後先下一tag1
。
from bs4 import BeautifulSoup
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>'''
soup = BeautifulSoup(html,"html.parser")
def findalltags(tag1,tag2,soup):
# tag1 is between which tag
# tag2 get info of which tag
a = soup.find(tag1)
lis = []
while True:
a = a.find_next()
if(str(a.name) == tag1):
break
elif(str(a.name) == tag2):
lis.append(a)
return lis
if __name__ == '__main__':
print findalltags('tag1','tag2',soup)
希望這會解決問題,但我不認爲這是一種有效的方法。如果你熟悉它們,你可以使用正則表達式。
'a.name'是一個字符串,parens也不需要。 –
我們將在Unicode中得到它我不知道它是否可以與字符串相等,以避免它我轉換爲字符串 – Sandeep
'u「foo」==「foo」'將會正常工作,如果沒有ascii字符的名稱然後調用str會出錯。 –
您的描述我需要獲取tag1後面的所有tag2與some_text_1,並在下一個tag2之前。基本上等同於在文本some_text_
的任何tag1之後獲得第一個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> text_2之前或之前 some_text_2 因爲tag2在下一個tag2之前的所有實例都沒有意義。因爲只會有一個tag2。 –
Sandeep
tag2可以在任何地方之後或之後?您的示例輸入不適合您的問題描述。 –
是的,我的不好,應該是在指定文本的tag1之後,在下一個tag1之前 – GhostKU