BeautifulSoup - 在两个标签

时间:2017-08-08 16:29:29

标签: python html beautifulsoup

我想使用BeautifulSoup捕获两个HTML标记之间的所有内容。

这是我关注的HTML代码片段:

<br>NEFS VII &amp; VIII Manager<br>

因此,即使我对HTML的理解很少,我也可以看到我需要捕获<br>标记并获取它们之间的内容。我的问题似乎与此问题类似(Python HTML Parsing Between two tags),其中解决方案是使用soup.find('br').next_sibling,但我自己尝试自己遇到错误:

AttributeError: 'ResultSet' object has no attribute 'next_sibling'

以下是我的相关代码:

with open(file_path) as in_f:
    msg = email.message_from_file(in_f) 

html_msg = msg.get_payload(1)   

body = html_msg.get_payload(decode=True)    

html = body.decode()   



br_tags = BeautifulSoup(html).find_all('br')
print("br_tags:", br_tags)
new_tags = BeautifulSoup(html).find_all('br').next_sibling
print("new_tags:", new_tags)
content = br_tags.string
print("content:", content)

命令print("br_tags:", br_tags)只打印出7 <br/>个,全部在列表中。尝试.next_sibling命令以及.string命令都会导致上面的属性错误。

我可能误解了BeautifulSoup是如何被使用的,因为我是一个新手,但我很感激任何帮助解决这个问题,谢谢。

编辑:

大量的HTML:

$0.30</span><o:p></o:p></p></td><td style='padding:0in 0in 0in 0in;height:15.0pt'></td><td style='padding:0in 0in 0in 0in;height:15.0pt'><p class=MsoNormal align=right style='text-align:right'><span style='font-size:10.0pt'>$492.30</span><o:p></o:p></p></td></tr><tr style='height:15.0pt'><td style='padding:0in 0in 0in 0in;height:15.0pt'><p class=MsoNormal><span style='font-size:10.0pt'>GB WINTER FLOUNDER</span><o:p></o:p></p></td><td style='padding:0in 0in 0in 0in;height:15.0pt'></td><td style='padding:0in 0in 0in 0in;height:15.0pt'></td><td style='padding:0in 0in 0in 0in;height:15.0pt'><p class=MsoNormal align=right style='text-align:right'><span style='font-size:10.0pt'>95,659</span><o:p></o:p></p></td><td style='padding:0in 0in 0in 0in;height:15.0pt'></td><td style='padding:0in 0in 0in 0in;height:15.0pt'><p class=MsoNormal align=right style='text-align:right'><span style='font-size:10.0pt'>$0.25</span><o:p></o:p></p></td><td style='padding:0in 0in 0in 0in;height:15.0pt'></td><td style='padding:0in 0in 0in 0in;height:15.0pt'><p class=MsoNormal align=right style='text-align:right'><span style='font-size:10.0pt'>$23,914.75</span><o:p></o:p></p></td></tr></table><p style='margin-bottom:12.0pt'><span style='font-family:"Arial","sans-serif";color:black'><o:p>&nbsp;</o:p></span></p><div><p class=MsoNormal><span style='font-family:"Arial","sans-serif";color:black'>Linda McCann<br>NEFS VII &amp; VIII Manager<br>

1 个答案:

答案 0 :(得分:1)

错误本身会告诉您'ResultSet' object has no attribute 'next_sibling'ResultSet是使用find_all()时获得的类型。

出现AttributeError,因为您还在脚本find_all()中使用而不是find()

new_tags = BeautifulSoup(html).find_all('br').next_sibling # yours
new_tags = BeautifulSoup(html).find('br').next_sibling # correct

要使用所有br标记文本,例如,这个:

br_list = []
for i in soup.find_all('br'):
    br_list.append(i.next_sibling)