【问题标题】:How can I connect my python script with my HTML file?如何将我的 python 脚本与我的 HTML 文件连接起来?
【发布时间】:2015-06-26 08:54:29
【问题描述】:

基本上我从网页中获取一些数据,并将其放入一个数组中,我想将该数组的内容输出到 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")

【问题讨论】:

  • 您只想生成 html 还是希望它在互联网上可用?
  • 我希望它也可以在互联网上使用
  • 您有网络服务器吗?还是您只希望您和您局域网上的其他人可以使用它?数据是静态的还是每次查询网站时都需要生成?

标签: python html dom mako


【解决方案1】:

您的问题中有两个子问题:

  • 生成 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 循环:

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

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

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

您可以在其中使用任意 HTML。当然 mako 可以做更强大的事情,但是一个单独的 stackoverflow 帖子是没有空间的。您可以阅读 mako 语言的 basic usage 和/或 Syntax 页面以获取更多信息。但是使用此处介绍的结构,您应该能够完成您的任务。

提供 HTML

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

静态或动态

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

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

局域网还是万维网?

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

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

【讨论】:

    【解决方案2】:
    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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-08
      • 1970-01-01
      • 2019-10-02
      • 2021-03-18
      • 1970-01-01
      • 2021-11-01
      • 2016-04-07
      • 2018-03-17
      相关资源
      最近更新 更多