首页 > 解决方案 > Flask 没有显示我的全部列表

问题描述

我正在创建一个 Web 应用程序,它从我的学校网站上抓取课程代码、名称和学分。当我“返回 render_template(...)”时,我只取回最后的课程名称。但是当我自己运行 for 循环并告诉它打印时,我得到了一切。

我尝试将输出更改为等于其他值,但这只是给了我一个列表列表,我希望数据显示为字符串。

这就是代码本身的样子。我吐出我想要的信息:

from bs4 import BeautifulSoup 
import csv
import requests 

source = requests.get('https://bulletins.psu.edu/undergraduate/colleges/behrend/digital-media-arts-technology-ba/#programrequirementstext') 

soup = BeautifulSoup(source.text, 'lxml') 
course_list = []

for td in soup.find_all("td")[12:162]:
    courseinfo = td.text
    print(courseinfo)

这是我的代码在烧瓶中的样子:

@app.route('/digit/')
def digit():
    try:
        source = requests.get('https://bulletins.psu.edu/undergraduate/colleges/behrend/digital-media-arts-technology-ba/#programrequirementstext') 

        soup = BeautifulSoup(source.text, 'lxml') 
        course_list = []

        for td in soup.find_all("td")[12:162]:
            coursename = td.text
            course_list.append(coursename.split())
            print(coursename)

        coursename = coursename
        return render_template("digit.html", coursename = coursename)
    except Exception as e:
        return render_template("500.html", error = e)

这是html文件:

{% extends "header.html" %}

{% block body %}

    <p>{{coursename}}</p>

{% endblock %}

每当我查看我的网站并转到特定页面 /digit/ 时,我只会显示“国会和总统”,这是列表中最后可能出现的内容。我对烧瓶仍然很缺乏经验,所以我不知道从哪里开始。

标签: pythonhtmlflaskbeautifulsouppython-requests

解决方案


coursename仅保留 list 中的最后一个值soup.find_all("td")[12:162]:

print(coursename)只显示一个元素 - 但你循环运行它,这样你就可以在屏幕上看到所有元素。


您必须发送course_list到模板

return render_template("digit.html", coursename=course_list)

然后你可以显示它

<p>{{coursename}}</p>

或者你可以使用循环来格式化它

{% for item in coursename %} 
   <p>{{ item }}</p>
{% endfor %]

推荐阅读