Извлечение текста без тегов / форматирование в HTML-файл с Robobrowser, Beautifulsoup в Python - PullRequest
0 голосов
/ 06 мая 2018
<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 ]

0 голосов
/ 06 мая 2018

Используя .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
0 голосов
/ 06 мая 2018

Если вы используете 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
...