基本的に、Webページからデータを取得し、それを配列に入れて、その配列の内容を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つのサブ問題があります。
マコは最初のものであなたを助けることができます。 2つ目は、状況に応じてさまざまなソリューションを利用できます。
まず、テンプレートを決定する必要があります。つまり、データが入力される一般的なスケルトンを決定する必要があります。それ以上の情報なしでデータのみを表示したい場合は、謎の答えが機能しますが、より複雑になる場合は、マコとして何かを使うのに便利です。一般的なテンプレートはどのように見えますか?これは本当に単純なものです:
<html>
<body>
Hello world!
</body>
</html>
これはあまり効果がありません。まるで1本の弦のようです。それでは、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はもっと強力なことをすることができますが、単一のスタックオーバーフローポストはそのためのスペースがほとんどありません。 mor情報については、mako言語の 基本的な使用法 および/または 構文 ページを読むことができます。しかし、ここに提示された構造を使用すると、タスクを完了することができるはずです。
それでも、どういうわけかHTMLをWebまたは必要な場所に公開する必要があります。必要なものに応じて、複数の可能性があります。
データは静的ですか?つまり、データは近いうちに変更されますか?いいえの場合は、ローカルコンピューターでHTMLを生成してから、htmlを提供する単純なWebサーバーにhtmlをプッシュするだけです。
データは動的ですか?つまり、データは頻繁に変更されるため、ローカルマシンの電源を入れ、スクリプトを実行してからHTMLをプッシュするのは合理的ではありません。代わりに、データが変更されるたびにスクリプトを実行するようにWebページを提供するサーバーに指示する必要があります。これを行う可能性は複数あります。CGI(nginxやApacheなどのWebサーバーがpythonスクリプトを呼び出して出力を提供します)または Django などのwsgiフレームワークを使用できます。または flask またはその他。もちろん、これらは、Apacheやnginxなどの「一般的な」Webサーバー、または gunicorn などから提供する必要もあります。
LanまたはWWW?
LANでのみ使用可能にする必要がある場合は、ローカルコンピューターでWebサーバーを実行するだけです。多くのトラフィックを期待せず、セキュリティが問題にならない場合は、 python標準ライブラリのhttpサーバー を使用できます。
Webで利用できるようにする必要がある場合は、Webサーバーを探す必要があります。交通量が少ない場合は無料のサービスがいくつかあります。いくつか例を挙げると、 herok はPythonに重点を置いているため、動的なユースケースに適しています。 Github pages ここで、githubリポジトリからHTMLを直接提供できます。静的HTMLしか提供できないと思います。
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>