【发布时间】:2020-12-03 12:50:33
【问题描述】:
我有漂亮的汤可以在网上搜索信息。我想将结果发送到带有渲染模板的 html 和带有 JINJA 的 html 循环中。美丽的汤给了我 bs.tag 格式类型的结果。我无法删除不需要的标签,只能以这种格式保存搜索到的数据,所以我决定将其转换为字符串,然后替换不需要的字符:
.py
title = soup.find_all(class_="BNeawe vvjwJb AP7Wnd")
for v in title:
r1 = str(v)
r2 = r1.replace('<div class="BNeawe vvjwJb AP7Wnd">', "")
return render_template('test.html', r2=r2)
.html
{% for item in title %}
<div>{{ r2 }}</div>
{% endfor %}
奇怪的是,虽然我在 render_template 和 html 中提供 r2,但我正在使用 <div.. 获取数据,因为我不应该在 r2 中已将其替换为“”。系统似乎以某种方式采用 r1 或 v 变量而不是 r2。我无法使用 print() 测试在控制台中测试了哪些数据我得到了所有变量的正确值...
【问题讨论】:
-
您在循环中重复分配给
r2;您传递给模板的值是循环最后一次迭代中的值,所有先前的值都将丢失。至于为什么替换不起作用,您确定 HTML 包含确切的文本<div class="BNeawe vvjwJb AP7Wnd">,没有一个字符不同吗?特别是,实际标记可能使用单引号而不是双引号,或者可能具有除class之外的某些属性。 -
Jason,我正在替换我用作soup.find_all 键的相同类值,因此我认为它必须相同。据我了解,如果它以正确的方式在控制台中打印,则相同的结果应该在 html 模板中......我按照你的建议搞乱了引号,但没有任何结果......