<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
答案 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