Python 3.x 使用Robobrowser、Python中的Beautifulsoup在HTML文件中提取无标记/格式的文本 名称:用户名[585743] 金钱:$Money 地点:城市 级别:43 黄金:4706/5315

Python 3.x 使用Robobrowser、Python中的Beautifulsoup在HTML文件中提取无标记/格式的文本 名称:用户名[585743] 金钱:$Money 地点:城市 级别:43 黄金:4706/5315,python-3.x,beautifulsoup,robobrowser,Python 3.x,Beautifulsoup,Robobrowser,我把这个HTML放在一个凌乱的页面里。我想提取每个和之间的元素。它们是纯文本,没有有用的类或ID可以使用 到目前为止我使用的代码: <font color="white"> <b>Name:</b> USERNAME [585743] <br> <b>Money:</b> $MONEY <br> <b>Location:</b> CITY<br>

我把这个HTML放在一个凌乱的页面里。我想提取每个

之间的元素。它们是纯文本,没有有用的类或ID可以使用

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

<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>
browser.open(银行url)
soup=browser.parsed
result2=re.search(r'(.*)
',src).group(0) 打印(结果2)
这导致了

browser.open(bank_url)

soup = browser.parsed


result2 = re.search(r'</b> (.*?)<br/>', src).group(0)
print(result2)
用户名[585743]
正在打印。这是一个很好的开始,但由于某种原因,我不能得到更多的元素得到打印

有没有一种方法可以只提取一段特定的文本?例如,金色文本4706/5315


我正在使用python 3.6中的robobrowser和beautifulsoup

如果您正在使用beautifulsoup,您应该首先创建beautifulsoup对象:

</b> USERNAME [585743] <br> 
使用可以从元素中获取
Gold:
旁边的值。这就是该方法的样子:

>>> for i in soup.findAll('b'):
     print(i.next_sibling)

 USERNAME [585743] 
 $MONEY 
 CITY
 43
 4706 / 5315

我想你可以直接使用
soup.find('b',text='Gold:')。下一个兄弟姐妹
。是的,我一开始就注意到了这一点,但问题是:上面粘贴的元素是一大块分散的portion。因此,如果有另一个容器具有另一个标记名(而不是
font
)并将
Gold:
作为项目,那么代码将给出错误的结果。谢谢。谢谢你的回复,是的,这个网站是一个没有div标签的烂摊子。这只是一堆,几乎没有任何课程。我试试你说的。我还有一个问题,我使用robobrowser登录该网站,soup.find文件会让我继续登录吗?我是新来的。我遇到的一个问题是,如果我运行html请求,它会获取已注销的站点。
BeautifulSoup
在登录过程中不起任何作用。它是目前可用的最好的解析器之一。它可以帮助您从任何浏览器模拟器或http请求生成的元素中获取文本。因此,它不应该与您的登录内容有任何冲突。谢谢。我不明白,代码块是一个大型站点的一小部分。我的问题是我没有一个好的方法告诉beautifulsoup选择什么。我如何告诉它选择你在那里复制的所有内容?你可以使用字体标记,如果你确定块总是在它里面,我已经尝试了字体标记,但由于某种原因,我在多行上做了很多困难。如何在不使用正则表达式的情况下进行字体标记?
>>> for i in soup.findAll('b'):
     print(i.next_sibling)

 USERNAME [585743] 
 $MONEY 
 CITY
 43
 4706 / 5315
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