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

bkh*_*msi 5 html python dom mako

基本上我从网页中获取一些数据,并将其放入一个数组中,我想将该数组的内容输出到 HTML 文件中的表格中。经过一番研究,我发现使用 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")
Run Code Online (Sandbox Code Playgroud)

syn*_*nym 5

你的问题有两个子问题:

  • 生成 HTML 以显示您的数据
  • 提供该 HTML

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

生成 HTML

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

<html>
<body>
Hello world!
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

这并没有多大作用。它就像一个单一的字符串。所以让我们在其中加入一些python:

<html>
<body>
${x}
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

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

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

您至少需要 for 循环:

% for a in [1,2,3]
${a}
% endfor
Run Code Online (Sandbox Code Playgroud)

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

% for person in mylist
Name: ${person.name}
Age: ${person.age}
% endfor
Run Code Online (Sandbox Code Playgroud)

您可以在其中使用任意 HTML。当然 mako 可以做更强大的事情,但是单个 stackoverflow 帖子的空间很小。您可以阅读mako 语言的基本用法和/或语法页面以获取更多信息。但是使用这里介绍的结构,您应该能够完成您的任务。

提供 HTML

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

静态或动态

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

  • 你的数据是动态的吗?这意味着您的数据经常更改,启动本地机器、运行脚本然后推送 HTML 是不合理的。相反,您必须告诉为您的网页提供服务的服务器在数据发生变化时运行您的脚本。这样做的可能性不止一种,您可以使用 CGI(像 nginx 或 apache 这样的网络服务器调用您的 python 脚本并提供输出)或像djangoflask或其他这样的 wsgi 框架。当然,这些也需要提供服务,要么来自像 apache 或 nginx 这样的“典型”网络服务器,要么像gunicorn

局域网还是万维网?

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

  • 如果您需要它在网络上可用,则需要寻找网络服务器。有一些服务对于低流量是免费的。仅举几例:heroku专注于 Python,因此适用于动态用例。Github 页面,您可以在其中直接从 github 存储库提供 HTML。我认为它只能提供静态 HTML。