首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BeautifulSoup成功地写入html,但find_all没有返回任何内容。

问BeautifulSoup成功地写入html,但find_all没有返回任何内容。
EN

Stack Overflow用户
提问于 2018-12-04 13:45:16
回答 1查看 135关注 0票数 2

我正在使用BeautifulSoup创建和编写html文件。我能够为MWE创建一个简单的html,如下所示。但是,所有find函数都不返回任何内容,因此无法执行进一步的操作(插入、追加)。

  1. 这是怎么回事?
  2. 我如何为其中一个迪夫单独设置风格?(例如,div2和div3应该有显示:没有,我计划稍后通过脚本启用)

MWE:

代码语言:javascript
复制
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'))

输出:

​

文件输出:

​

Context:我正在尝试合并多个jupyter笔记本html文件。在此更新之后,我需要向每个html (每个笔记本)文件对应的各个div添加样式。

这里是nbviewer的头

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-04 17:07:20

看起来,BeautifulSoup并没有正确地将新的可导航字符串添加为可导航字符串,而是将其添加为字符串。这使得他们的find函数不能在上面工作,但是如果您接受main_soup.prettify()并将其反馈到漂亮的汤中,您就能够像预期的那样导航输出。

代码语言:javascript
复制
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上的样式。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53614327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档