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

时间:2015-04-19 18:42:59

标签: python html html5 dom mako

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

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")

2 个答案:

答案 0 :(得分:3)

您的问题有两个子问题:

  • 生成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可以做更强大的事情,但是单个stackoverflow帖子对于那个空间很小。您可以阅读mako语言的basic usage和/或Syntax页面以获取mor信息。但是通过这里介绍的结构,你应该能够完成你的任务。

提供HTML

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

静态或动态

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

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

  • 之类的东西

Lan还是WWW?

  • 如果您只需要在局域网中使用它,您只需在本地计算机上运行网络服务器即可。如果您不期望有太多流量和安全性,则可以使用http server in the python standard library

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

答案 1 :(得分:0)

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>