使用Robobrowser,Python中的Beautifulsoup,在HTML文件中提取没有标签/格式的文本

时间:2018-05-06 18:05:48

标签: python-3.x beautifulsoup robobrowser

<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>之间提取元素。它们是纯文本,没有我可以使用的有用类或ID。

我到目前为止使用过的代码:

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,python 3.6中的beautifulsoup

2 个答案:

答案 0 :(得分:1)

如果你正在使用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

答案 1 :(得分:1)

使用.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