我正在使用BeautifulSoup创建和写入html文件。我可以为MWE创建一个简单的html,如下所示。但是,所有查找功能均不返回任何内容,因此无法执行进一步的操作(插入,追加)。
MWE:
head_soup = BeautifulSoup(open(nbheader_template),"html.parser")
head_soup.contents[0]
base_template = "<!DOCTYPE html><html></html>"
main_soup = BeautifulSoup(base_template,"html.parser")
main_soup.html.append(head_soup) # add nbconver header
# INSERT THE BODY AS IT IS
# bodies = [body.replace('<body>','').replace('</body>','') for body in bodies] # no need of body tags
bodies = ['<div>Test div' + str(i+1) + '</div>' for i in range(3)] # for MWE
body_tag = main_soup.new_tag('body')
for each_body in bodies:
body_tag.append(BeautifulSoup(each_body,'html.parser'))
main_soup.html.insert(1,body_tag)
with open(output_filename, "w") as file:
file.write(str(main_soup))
print(main_soup.find_all('head'))
print(main_soup.html.find_all('head'))
print(main_soup.find_all('body'))
print(main_soup.html.find_all('body'))
print(main_soup.find_all('div'))
print(main_soup.html.find_all('div'))
上下文:我正在尝试合并多个jupyter笔记本html文件。在此更新之后,我需要向与每个html(每个笔记本)文件相对应的单个div中添加样式。
Here是nbviewer头
答案 0 :(得分:1)
BeautifulSoup似乎没有正确地将新的可导航字符串添加为可导航字符串,而是添加为字符串。这样一来,他们的find函数就不能使用它了,但是,如果您使用main_soup.prettify()并将其反馈回漂亮的汤中,则可以按预期浏览输出。
main_soup
<!DOCTYPE html>
<html><body><div>Test div1</div><div>Test div2</div>
<div>Test div3</div></body></html>
>>> new_soup = BeautifulSoup(main_soup.prettify())
>>> new_soup.body
<body>
<div>
Test div1
</div><div>
Test div2
</div><div>
Test div3
</div>
</body>
>>> new_soup.html.find_all('div')
[<div>
Test div1
</div>, <div>
Test div2
</div>, <div>
Test div3
</div>]
要将样式设置为div之一,可以导航至该样式,然后添加要添加的样式的类。除非您只想在一个地方使用该样式,否则每个div具有不同的样式会变得很繁重。我建议将CSS与类一起使用,以在所需的div上定义样式。