web-dev-qa-db-ja.com

pythonスクリプトをHTMLファイルに接続するにはどうすればよいですか?

基本的に、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")
4
bkhmsi

問題には2つのサブ問題があります。

  • データを表示するHTMLを生成する
  • そのHTMLを提供する

マコは最初のものであなたを助けることができます。 2つ目は、状況に応じてさまざまなソリューションを利用できます。

HTMLを生成する

まず、テンプレートを決定する必要があります。つまり、データが入力される一般的なスケルトンを決定する必要があります。それ以上の情報なしでデータのみを表示したい場合は、謎の答えが機能しますが、より複雑になる場合は、マコとして何かを使うのに便利です。一般的なテンプレートはどのように見えますか?これは本当に単純なものです:

<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を提供する

それでも、どういうわけか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しか提供できないと思います。

3
syntonym
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>
0
enigma