如何使用美丽汤和烧瓶从循环打印所有字典值


def search():
query = "xxx"
r = requests.get('website?q=' + query)
soup = BeautifulSoup(r.content, 'lxml')
results=[]
for row in soup.findAll('li', attrs = {'class':'res'}):
result = {}
result['urltext'] = row.a.text
result['url'] = row.cite.text
results.append(result)
return render_template('site.html', urll = result['url'], urltext = result['urltext'])
else:
return render_template('start.html')

当这样使用时,我在 site.html 中得到单个结果,就像循环停止并获得第一个结果并将其传递给站点.html。我希望它找到的所有结果都通过。

def search():
query = "xxx"
r = requests.get('website?q=' + query)
soup = BeautifulSoup(r.content, 'lxml')
results=[]
for row in soup.findAll('li', attrs = {'class':'res'}):
result = {}
result['urltext'] = row.a.text
result['url'] = row.cite.text
results.append(result)
print (result['url'])

使用打印可以给我所有的结果。 但这毫无意义,除非我会放弃render_template的想法并以某种方式打印带有结果['url']result['urltext']的整个HTML。

你的问题是return它总是立即结束函数,所以下一个循环永远不会被执行。所以不要在 -loop 中使用forreturn

elsefor一起使用也是错误的想法,因为只有当您在for-loo 中使用breakelse才会执行。for/else不像if/else那样工作.

另一个问题是result['url']result['urltext']render_template- 它只有最后一个值。您拥有results中的所有值,而不是result['url']result['urltext']。也许你应该把它作为

return render_template('site.html', results=results)

和内部模板使用

{% for row in results %}
<a href="{{ row.url }}">{{ row.ulrtext }}</a>
{% endfor %}

def search():
query = "xxx"
r = requests.get('website?q=' + query)
soup = BeautifulSoup(r.content, 'lxml')
results = []
for row in soup.findAll('li', attrs={'class': 'res'}):
result = {}
result['urltext'] = row.a.text
result['url'] = row.cite.text
results.append(result)
if results:
return render_template('site.html', results=results)
else:
return render_template('start.html')

最新更新