TwillとPythonを「Google App Engine」で実行できる1つのコードに組み合わせる方法は?
-
01-10-2019 - |
質問
Twillをコンピューターにインストールし(以前にPython 2.5をインストールした)、最近使用しています。
Pythonは私のコンピューターのディスクCにインストールされています:c: python25
Twillフォルダー(「Twill-0.9」)はここにあります:e: tmp twill-0.9
これが私がTwillで使用してきたコードです:
go “some website’s sign-in page URL”
formvalue 2 userid “my login”
formvalue 2 pass “my password”
submit
go “URL of some other page from that website”
save_html result.txt
このコードは、アカウントを持っている1つのWebサイトにログインし、そのWebサイトの他のページのHTMLコード(ログイン後にのみアクセスできる)を記録し、「結果という名前のファイルに保存するのに役立ちます。 txt」(もちろん、このコードを使用する前に、まず「ログイン」を実際のログイン、「私のパスワード」、「いくつかのウェブサイトのサインインページURL」、および「他のページのURL」に置き換える必要があります。そのウェブサイトは、そのウェブサイトの実際のURLと、そのウェブサイトのログインページのサインインフォームとして使用されるそのウェブサイトのフォームの番号を備えた2番目の2番目の2番目の番号が付いています)
このコードは、「Twill-0.9」フォルダーにある「test.twill」ファイルに保存します。E: tmp twill-0.9 test.twillコマンドプロンプトからこのファイルを実行します:python twill-sh test。ツイル
現在、「Google App Engine SDK」を「Google App Engine」からインストールし、しばらく使用しています。
たとえば、このコードを使用しています。
import hashlib
m = hashlib.md5()
m.update("Nobody inspects")
m.update(" the spammish repetition ")
print m.hexdigest()
このコードは、「誰もスパムッシュの繰り返しを検査しない」というフレーズをMD5ダイジェストに変換するのに役立ちます。
さて、これらの2つのコードを「Google App Engine」で実行できる1つのPythonスクリプトにまとめるにはどうすればよいですか?
たとえば、「Google App Engine」からWebサイトにコードをログインし、そのWebサイトの別のページに移動し、HTMLコード(Twillコードが行うこと)を記録し、このHTMLコードをMD5 Digestに変換することを望みます。 (それが私の2番目のコードが行うことです)。それでは、これらの2つのコードを1つのPythonコードに組み合わせるにはどうすればよいですか?
Twillをインポートすることで何らかの形で行う必要がありますが、どうすればできますか? 「Google App Engine」によって実行されているPythonコード - インターネット上のどこかからTwillをインポートできますか?または、おそらく、Twillはすでに「Google App Engine」にインストールされていますか?
更新1:
(この更新は、Woobleの答えに対する私の応答です)
これがすべてのフォルダー(私の「Twill-0.9」フォルダー)のリストです。 __init
__.pyファイル。 (このリストの一部のフォルダーは、他のフォルダー内にあり、このリストにも記載されています):
e: twill-0.9 build lib twill extensions match_parse
e: twill-0.9 build lib twill extensions
e: twill-0.9 build lib twill other_packages _mechanize_dist
e: twill-0.9 build lib twill other_packages
e: twill-0.9 build lib twill
E: Twill-0.9 Twill Extensions match_parse
E: Twill-0.9 Twill Extensions
e: twill-0.9 twill other_packages _mechanize_dist
e: twill-0.9 twill other_packages
E: Twill-0.9 Twill
解決
アプリエンジンプロジェクトでサードパーティライブラリを使用するには、展開時にアプリケーションにそれらを含める必要があります。 Twillフォルダーをコピーします(1つを含むもの __init__.py
)アプリケーションのフォルダーに展開します。
Twill Googleコードプロジェクトを見ると、Twillにはパッケージにその依存関係(パイピング、機械化など)が含まれているため、他のものを含める必要がない場合があります。
他のヒント
これが役立つ場合、Twillを使用してGoogle検索を実行する例を示します。 TwillとBeautifulSoupを使用してWebページを解析することを示しています。
>>> import twill.commands
>>> import BeautifulSoup
>>>
>>> class browser:
... def __init__(self, url="http://www.google.com",log = None):
... self.a=twill.commands
... self.a.config("readonly_controls_writeable", 1)
... self.b = self.a.get_browser()
... self.b.set_agent_string("Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14")
... self.log = log
... self.b.clear_cookies()
... self.url=url
... def googleQuery(self, query="python code"):
... self.b.go(self.url)
... #self.b.showforms()
... f = self.b.get_form("f")
... #print "form is %s" % f
... f["q"] = query
... self.b.clicked(f, "btnG")
... self.b.submit()
... pageContent = self.b.get_html()
... soup=BeautifulSoup.BeautifulSoup(pageContent)
... ths = soup.findAll(attrs={"class" : "l"})
... for a in ths:
... print a
...
>>> t=browser()
>>> t.googleQuery("twill queries")
==> at http://www.google.ie/
Note: submit is using submit button: name="btnG", value="Google Search"
<a href="http://pyparsing.wikispaces.com/WhosUsingPyparsing" class="l" onmousedown="return clk(this.href,'','','res','1','','0CBMQFjAA')">pyparsing - WhosUsingPyparsing</a>
<a href="http://www.mail-archive.com/twill@lists.idyll.org/msg00048.html" class="l" onmousedown="return clk(this.href,'','','res','2','','0CBcQFjAB')">Re: [<em>twill</em>] <em>query</em>: docs, and web site.</a>
<a href="http://www.mail-archive.com/twill@lists.idyll.org/msg00050.html" class="l" onmousedown="return clk(this.href,'','','res','3','','0CBkQFjAC')">Re: [<em>twill</em>] <em>query</em>: docs, and web site.</a>
<a href="http://www.genealogytoday.com/surname/finder.mv?Surname=Twill" class="l" onmousedown="return clk(this.href,'','','res','4','','0CB4QFjAD')"><em>Twill</em> Genealogy and Family Tree Resources - Surname Finder</a>
<a href="http://a706cheap-apparel.hobby-site.com/ladies-cotton-faded-twill-le-chameau-breeks-42" class="l" onmousedown="return clk(this.href,'','','res','5','','0CCEQFjAE')">Ladies Cotton Faded <em>Twill</em> Le Chameau Breeks 42</a>
<a href="http://twill.idyll.org/examples.html" class="l" onmousedown="return clk(this.href,'','','res','6','','0CCMQFjAF')"><em>twill</em> Examples</a>
<a href="http://panjiva.com/Sri-Lankan-Manufacturers-Of/twill+capri" class="l" onmousedown="return clk(this.href,'','','res','7','','0CCcQFjAG')">Sri-Lankan <em>Twill</em> Capri Manufacturers | Sri-Lankan Suppliers of <b>...</b></a>
<a href="http://c586cheap-apparel.dyndns.ws/twill-beige-blazer" class="l" onmousedown="return clk(this.href,'','','res','8','','0CCoQFjAH')"><em>Twill</em> beige blazer</a>
<a href="http://stackoverflow.com/questions/2267537/how-do-you-use-relative-paths-for-twill-tests" class="l" onmousedown="return clk(this.href,'','','res','9','','0CCwQFjAI')">How do you use Relative Paths for <em>Twill</em> tests? - Stack Overflow</a>
<a href="http://mytextilenotes.blogspot.com/2010/01/introduction-to-twill-weave.html" class="l" onmousedown="return clk(this.href,'','','res','10','','0CC8QFjAJ')">My Textile Notes: Introduction to <em>Twill</em> Weave</a>
>>>
Twillが何をするのかわからない(まあ、グーグル)が、Appengineが提供する fetch()
働き Webページを取得するために使用できます。また、ログインのPOSTメソッドなどをサポートしています。
(Appengineにはセキュリティ上の理由で利用可能なPythonライブラリが限られているため、TwillがAppengineで機能するのは疑わしいです。ただし、推測だけです。)
Twillモジュールをアプリエンジンにインポートする方法を探していると思います。 Twill Pythonファイルがどこにあるか、またはWebサイトでパッケージ化するソースパッケージを取得する方法を把握する必要がありますが、サードパーティモジュールをインポートすることは、いくつかの例外を除いて実行できるようです。
試す zipimport Googleのサイトからの指示に従ってください ここ と ここ.
Googleのサードパーティライブラリページから:
App Engineは、標準の実装ではなく、Zipimport機能のカスタムバージョンを使用します。通常、通常の方法で機能します。ZIPアーカイブをSys.Pathに追加し、通常どおりインポートします。これらの例外を除いて、Zipimportは、アーカイブに保存されているモジュールのみを.pyソースファイルとしてインポートできます。 .pycまたは.pyoファイルとして保存されているモジュールをインポートすることはできません。 Zipimportは純粋なPythonで実装されており、減圧にネイティブコードを使用しません(Cコード)。