如何将我的 python 脚本与我的 HTML 文件连接起来?

How can I connect my python script with my HTML file?

基本上我从网页获取一些数据,并将其放入数组中,我想将该数组的内容输出到 HTML 文件中的 table 中。经过一些研究,我发现使用 mako 模板可能是最好的解决方案,但我不明白如何使用它?谁能指导我完成这些步骤或提供更好的解决方案来执行此 python 脚本并将其结果输出到网络上?

import urllib2
import mako
from bs4 import BeautifulSoup as BS

html = urllib2.urlopen("<link-to-web-page>")
soup = BS(html)
data = []


for each_course in soup.findAll('li',{'class':'<class-name>'}):
    inner_text = each_course.text
    data.append(inner_text)


for i in data:
    print (i+"\n")
data = [1, 2, 3, 4]


def data_to_html_table(data):
    html = '<table><tbody>'
    for item in data:
        html += '<tr><td>' + str(item) + '</td></tr>'
    html += '</tbody></table>'
    return html

print data_to_html_table(data)

结果 html 等同于

<table>
    <tbody>
        <tr>
            <td>1</td>
        </tr>
        <tr>
            <td>2</td>
        </tr>
        <tr>
            <td>3</td>
        </tr>
        <tr>
            <td>4</td>
        </tr>
    </tbody>
</table>

你的问题有两个子问题:

  • 生成 HTML 以显示您的数据
  • 发球 HTML

Mako 可以帮助您解决第一个问题。对于第二个,有不同的解决方案,具体取决于您的情况。

生成HTML

首先你必须决定一个模板,这意味着你的数据将在其中填充的一般框架。如果你只想显示你的数据而不需要任何进一步的信息,谜题答案将起作用,但如果它变得更加复杂,使用一些东西作为 mako 很有用。通用模板是什么样子的?这是一个非常简单的:

<html>
<body>
Hello world!
</body>
</html>

这没什么用。它就像一个单独的字符串。因此,让我们在其中添加一些 python:

<html>
<body>
${x}
</body>
</html>

此模板包含您需要提供的变量:

template = Template(filename="yourtemplate.template") # or how ever you named your template
print(template.render(x="Hello World!")

你至少需要循环:

% for a in [1,2,3]
${a}
% endfor

这是循环的基本语法。当然你可以做更复杂的事情。假设 mylist 是 Person 个具有名称和年龄的实例的列表:

% for person in mylist
Name: ${person.name}
Age: ${person.age}
% endfor

您可以在其中使用任意 HTML。当然 mako 可以做更强大的事情,但是一个单独的 Whosebug post 就太小了 space。您可以阅读 mako 语言的 basic usage and/or Syntax 页面以获取更多信息。但是有了这里介绍的结构,你应该能够完成你的任务。

发球HTML

您仍然需要以某种方式将 HTML 带到网络上或任何您想要的地方。你有多种可能性取决于你想要什么:

静态或动态

  • 你的数据是静态的吗?这意味着,您的数据会在近期发生变化吗?如果不是,那么您可以简单地在本地计算机上生成 HTML,然后将 html 推送到服务于 html.

    的简单网络服务器
  • 你的数据是动态的吗?这意味着您的数据经常更改,启动本地计算机、运行 您的脚本然后推送 HTML 是不合理的。相反,只要数据发生变化,您就必须告诉为您的网页提供服务的服务器 运行 您的脚本。有不止一种可能性可以做到这一点,您可以使用 CGI(像 nginx 或 apache 这样的网络服务器调用您的 python 脚本并提供输出)或像 django or flask or others. Of course these also need to be served, either from a "typical" webserver like apache or nginx or something like gunicorn

    这样的 wsgi 框架

局域网还是 WWW?

  • 如果您只需要它在 LAN 中可用,您只需 运行 本地计算机上的网络服务器即可。如果您不希望有太多流量并且安全性不是问题,您可以使用 http server in the python standard library.

  • 如果您需要它在网络上可用,您需要寻找一个网络服务器。有一些服务对于低流量是免费的。仅举几例:heroku which has a focus on python, so it's suited for the dynamic use case. Github pages 您可以在其中直接从 github 存储库提供 HTML。我认为它只能提供静态 HTML.