Python 如何使用BeautifulSoup和Flask打印循环中的所有字典值
当像这样使用时,我在site.html中得到一个结果,就像循环停止,得到第一个结果并将其传递给site.html。我希望它找到的所有结果都能通过Python 如何使用BeautifulSoup和Flask打印循环中的所有字典值,python,flask,beautifulsoup,jinja2,Python,Flask,Beautifulsoup,Jinja2,当像这样使用时,我在site.html中得到一个结果,就像循环停止,得到第一个结果并将其传递给site.html。我希望它找到的所有结果都能通过 def search(): query = "xxx" r = requests.get('website?q=' + query) soup = BeautifulSoup(r.content, 'lxml') results=[] for row in soup.findAll('li', attrs = {
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')
使用打印可以获得所有结果。
但这是毫无意义的,除非我放弃了呈现模板的想法,并以某种方式打印整个HTML,其中包含结果['url']和结果['urltext']。您的问题是
返回
,它总是立即结束函数,所以下一个循环永远不会执行。因此,不要在中使用返回,用于循环
而将else
与for
一起使用也是错误的想法,因为只有在for
-loo中使用break
时才会执行else
for/else
与if/else
不同
另一个问题是render\u template
中的result['url']
和result['urltext']
——它将只有最后一个值。所有值都在results
中,而不是result['url']
和result['urltext']
中。也许你应该把它作为
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'])
和内部模板的使用
return render_template('site.html', results=results)
澄清您的问题,尝试打印(结果)以获得帮助?您的代码缩进已损坏,因此很难确定任何内容。@AMC已修复。结果要么是单个url,要么是所有url(在打印结果['url']时),不在for
-循环中使用return
return
立即结束函数,这样它就永远不会从findAll
获取下一个值。
{% 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')