Извлечение текста без тегов / форматирование в HTML-файле с Robobrowser, Beautifulsoup в Python
<font color="white">
<b>Name:</b> USERNAME [585743] <br>
<b>Money:</b> $MONEY <br>
<b>Location:</b> CITY<br>
<b>Level:</b> 43<br>
<b>Gold:</b> 4706 / 5315<br>
</font>
У меня есть этот HTML внутри грязной страницы. Я хочу извлечь элементы между каждым </b>
а также <br>
, Это чистый текст, и я не могу использовать полезный класс или идентификатор.
Код, который я использовал до сих пор:
browser.open(bank_url)
soup = browser.parsed
result2 = re.search(r'</b> (.*?)<br/>', src).group(0)
print(result2)
Это привело к
</b> USERNAME [585743] <br>
печатать. Это хорошее начало, но по какой-то причине я не могу больше печатать элементы?
Есть ли способ просто извлечь конкретный фрагмент текста? например золотой текст 4706 / 5315?
Я использую robobrowser, Beautifulsoup в Python 3.6
2 ответа
Если вы используете BeautifulSoup, вы должны сначала создать объект BeautifulSoup:
from bs4 import BeautifulSoup
soup = BeautifulSoup('''<font color="white">)
<b>Name:</b> USERNAME [585743] <br>
<b>Money:</b> $MONEY <br>
<b>Location:</b> CITY<br>
<b>Level:</b> 43<br>
<b>Gold:</b> 4706 / 5315<br>
</font>''', 'html.parser')
Затем вы можете разобрать тексты вам нужно найти <b>
элементы и получать их next_sibling
:
>>> for i in soup.findAll('b'):
print(i.next_sibling)
USERNAME [585743]
$MONEY
CITY
43
4706 / 5315
Используя .next_sibling, вы можете получить значение рядом с Gold:
из элементов. Вот как выглядит этот подход:
from bs4 import BeautifulSoup
element = """
<font color="white">
<b>Name:</b> USERNAME [585743] <br>
<b>Money:</b> $MONEY <br>
<b>Location:</b> CITY<br>
<b>Level:</b> 43<br>
<b>Gold:</b> 4706 / 5315<br>
</font>
"""
soup = BeautifulSoup(element,"lxml")
item = [elem.next_sibling.strip() for elem in soup.select("font b") if "Gold" in elem.text]
print(' '.join(item))
Выход:
4706 / 5315