基本上我从网页获取一些数据并将其放入数组中,我想将该数组的内容输出到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")
答案 0 :(得分:3)
您的问题有两个子问题:
Mako可以为您提供第一个帮助。对于第二个,有不同的解决方案可供选择,具体取决于您的情况。
首先你必须决定一个模板,这意味着你的数据将被填入的一般框架。如果你只想显示你的数据而没有任何进一步的信息,那么答案将起作用,但如果它得到更多复杂的是使用某些东西作为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的简单Web服务器。
您的数据是否动态?这意味着您的数据经常更改,启动本地计算机,运行脚本然后推送HTML是不合理的。相反,您必须告诉服务于您网页的服务器,以便在数据发生变化时运行您的脚本。有一种可能性,你可以使用CGI(像nginx这样的网络服务器或apache调用你的python脚本并提供输出)或者像django或flask或其他的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>