亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從包含在 HTML 標記和不帶標記的字符串中的一系列字符串中提取文本

從包含在 HTML 標記和不帶標記的字符串中的一系列字符串中提取文本

慕尼黑5688855 2022-07-12 15:25:55
考慮以下 HTML:<li>  <a href="url">    <b>This</b>    " is "    <b>a</b>    " test "    <b>string</b>    "!"  </a></li>我想提取<a>標簽之間的所有文本,除了"!". 換句話說,包含在第一個開頭<b>和最后一個結尾之間的文本</b>: This is a test string。from bs4 import BeautifulSouphtml = '''<li><a href="url"><b>This</b>" is "<b>a</b>" test "<b>string</b>"!"</a></li>'''soup = BeautifulSoup(html)anchor = soup.a請注意,<b>沒有標簽的標簽和字符串的數量會有所不同,next或者next_sibling不起作用。有沒有更簡單的方法來做到這一點?編輯: 理想情況下,我想要一種方法,即使我在最后一個</b>.
查看完整描述

2 回答

?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

試試下面的代碼


result = ''.join([i.strip().replace('"', '') for i in anchor.strings if i.strip()][:-1])

print(result)

輸出


'This is a test string'


查看完整回答
反對 回復 2022-07-12
?
斯蒂芬大帝

TA貢獻1827條經驗 獲得超8個贊

根據您的問題和評論,我認為獲取子字符串的索引并對 HTML 的整個子集進行操作可以滿足您的需求。


讓我們首先創建一個函數來檢索子字符串的所有索引(參見@AkiRoss 的回答):


def findall(p, s):

    i = s.find(p)

    while i != -1:

        yield i

        i = s.find(p, i+1)

然后使用它來查找<b>和的出現</b>。


opening_b_occurrences = [i for i in findall('<b>', html)]

# has the value of [21, 40, 58]

closing_b_occurrences = [i for i in findall('</b>', html)]

# has the value of [28, 44, 67]

現在您可以使用該信息來獲取 HTML 的子字符串來進行文本提?。?/p>


first_br = opening_b_occurrences[0]

last_br = closing_b_occurrences[-1] # getting the last one from list

text_inside_br = html[first_br:last_br]

中的文本text_inside_br現在應該是'<b>This</b>\n" is "\n<b>a</b>\n" test "\n<b>string'. 您現在可以清理它,例如通過附加</br>回它并使用 BeautifulSoup 提取值或僅使用正則表達式來執行此操作。


查看完整回答
反對 回復 2022-07-12
  • 2 回答
  • 0 關注
  • 121 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號