Как объединить twill и python в один код, который можно запустить на «Google App Engine»? - PullRequest
0 голосов
/ 27 апреля 2010

Я установил twill на свой компьютер (ранее установил Python 2.5) и недавно использовал его.

Python установлен на диске C на моем компьютере: C: \ Python25

И папка саржа («twill-0.9») находится здесь: E: \ tmp \ twill-0.9

Вот код, который я использовал в твилле:

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

Этот код помогает мне войти на один веб-сайт, на котором у меня есть учетная запись, записать HTML-код какой-либо другой страницы этого веб-сайта (доступ к которой я могу получить только после входа в систему) и сохранить его в файле с именем «Result.txt» (конечно, перед использованием этого кода мне сначала нужно заменить «мой логин» на мой реальный логин, «мой пароль» на мой реальный пароль, «URL-адрес страницы входа на какой-либо веб-сайт» и «URL-адрес некоторых»). другая страница с этого веб-сайта »с реальными URL-адресами этого веб-сайта и номером 2 с номером формы на этом веб-сайте, которая используется в качестве формы для входа на странице входа на этот веб-сайт)

Этот код я храню в файле «test.twill», который находится в моей папке «twill-0.9»: E: \ tmp \ twill-0.9 \ test.twill Я запускаю этот файл из командной строки: python twill-sh test.twill

Теперь я также установил «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.

Теперь, как мне соединить эти два куска кода в один скрипт на Python, который я мог бы запустить в «Google App Engine»?

Допустим, я хочу, чтобы мой код входил на веб-сайт из «Google App Engine», переходил на другую страницу этого веб-сайта, записывал его HTML-код (именно так поступает мой код Twill) и затем преобразовывал этот HTML-код в его дайджест MD5 (это то, что делает мой второй код). Итак, как я могу объединить эти два кода в один код Python?

Полагаю, это нужно как-то импортировать с помощью твилла, но как это сделать? Может ли код на Python, который запускает «Google App Engine», импортировать твил из Интернета? Или, возможно, саржа уже установлена ​​в «Google App Engine»?


Обновление 1:

(это обновление - мой ответ на ответ Вубла)

Вот список всех папок (в моей папке «twill-0.9»), которые содержат __init __. Py файлы. (некоторые папки в этом списке находятся внутри других папок, которые также упомянуты в этом списке):

E: \ саржа-0,9 \ сборка \ Lib \ саржевого \ расширений \ match_parse

E: \ саржа-0,9 \ сборка \ Lib \ саржевого \ расширения

E: \ саржа-0,9 \ сборка \ Lib \ саржа \ other_packages \ _mechanize_dist

E: \ саржа-0,9 \ сборка \ Lib \ саржевого \ other_packages

E: \ twill-0.9 \ build \ lib \ twill

E: \ саржа-0,9 \ саржа \ расширения \ match_parse

E: \ саржа-0,9 \ саржа \ расширения

E: \ саржа-0,9 \ саржа \ other_packages \ _mechanize_dist

Е: \ саржевой-0,9 \ саржа \ other_packages * * тысяча пятьдесят-один

E: \ саржа-0,9 \ саржа

Ответы [ 4 ]

2 голосов
/ 20 мая 2010

Вот пример использования Twill для запуска поиска Google, если это помогает. Он показывает использование twill и beautifulsoup вместе для разбора веб-страниц:

>>> 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>
>>>  
1 голос
/ 27 апреля 2010

Полагаю, вы ищете способ импортировать модуль twill в App-Engine. Вам нужно будет выяснить, где находятся файлы Python Twill или как получить их исходный пакет, чтобы упаковать его вместе с вашим сайтом, но похоже, что импорт сторонних модулей может быть выполнен за несколькими исключениями, см. Ниже. 1001 *

Попробуйте ZipImport , следуя указаниям с сайта Google здесь и здесь .

со страницы сторонней библиотеки Google:

App Engine использует пользовательскую версию функции zipimport вместо стандартной реализации. Обычно это работает обычным образом: добавьте Zip-архив в sys.path, затем импортируйте как обычно. С этими исключениями: zipimport может импортировать только модули, хранящиеся в архиве, как исходные файлы .py. Он не может импортировать модули, хранящиеся в виде файлов .pyc или .pyo. zipimport реализован на чистом Python и не использует собственный код для распаковки (код C).

1 голос
/ 27 апреля 2010

Чтобы использовать сторонние библиотеки в проектах App Engine, вы просто должны включить их в свое приложение при развертывании. Скопируйте папку twill (содержащую __init__.py) в папку вашего приложения и разверните ее.

Глядя на проект Google Code в twill, кажется, что twill включает в него свои зависимости (pyparsing, mechanize и т. Д.), Поэтому вам, возможно, не нужно ничего включать.

1 голос
/ 27 апреля 2010

Понятия не имею, что делает твил (ну, гуглил), но AppEngine предлагает fetch() функцию , которую можно использовать для извлечения веб-страниц. Он также поддерживает метод POST, например для логинов.

(Я сомневаюсь, что twill работает в AppEngine, потому что AppEngine имеет ограниченное количество библиотек python, доступных по соображениям безопасности. Но только предположение.)

...