1
<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 ?

我在python 3.6中使用robobrowser,beautifulsoup

4

2 回答 2

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
于 2018-05-06T20:06:46.490 回答
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
于 2018-05-06T20:03:30.837 回答