Как объединить саржу и питон в один код, который можно было бы запускать на Google App Engine?

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

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

А папка саржи («твил-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. саржа

Теперь я также установил «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-код (это то, что делает мой твил-код), а затем преобразовывал этот HTML-код в его дайджест md5. (это то, что делает мой второй код). Итак, как я могу объединить эти два кода в один код Python?

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


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

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

Вот список всех папок (в моей папке «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 \ extension

E: \ twill-0.9 \ twill \ other_packages \ _mechanize_dist

E: \ twill-0.9 \ twill \ other_packages

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


person brilliant    schedule 26.04.2010    source источник


Ответы (4)


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

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

person Wooble    schedule 26.04.2010
comment
Привет, Вубл !!!! Большое Вам спасибо за Ваш ценный ответ! Я только что заглянул в свою папку twill-0.9 (ту, которую я извлек из загруженного пакета twill .zip) и обнаружил, что в ней есть несколько папок, содержащих файл __init__.py. Итак, теперь я немного запутался, так как не знаю, какой из них развернуть. Пожалуйста, обратитесь к разделу «Обновление 1» в моем вопросе, где я разместил список всех этих папок. Если Вы можете, пожалуйста, скажите мне, просматривая этот список, какую папку мне нужно выбрать. Спасибо. - person brilliant; 27.04.2010
comment
Вам нужен файл верхнего уровня, который следует называть саржевым, включая все его подпапки. Это весь пакет. - person Wooble; 27.04.2010
comment
Привет, Вубл !!! Извините, что снова беспокою Вас, но, похоже, что-то так не работает. Если у вас есть время и желание помочь, посетите эту страницу, на которой я задал новый вопрос о сарже и питоне: stackoverflow.com/questions/3621432/ - person brilliant; 02.09.2010

вот пример использования саржи для поиска в 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/[email protected]/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/[email protected]/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>
>>>  
person amadain    schedule 20.05.2010

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

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

person jholster    schedule 26.04.2010
comment
Привет Ягго !!!! Спасибо за ваш ответ. Да, я знаю об этой функции выборки, но проблема заключалась в том, что я не мог войти с ней, поскольку я не знаком со всеми принципами работы заголовков и другими спецификациями, которые вам нужно знать, когда вы пытаетесь войти на веб-сайт. с использованием кода Python, который запускается из «Google App Engine». - person brilliant; 27.04.2010
comment
Здесь (stackoverflow.com/questions/1899259/) и здесь (stackoverflow.com/questions/1914275/) Мне посоветовали использовать саржевую ткань, поскольку саржа выполняет все это автоматически, поэтому мне не нужно вдаваться во все эти детали. Так я и познакомился с саржевой. - person brilliant; 27.04.2010

Я полагаю, вы ищете способ импортировать модуль twill в App-Engine. Вам нужно будет выяснить, где находятся файлы twill python или как получить их исходный пакет, чтобы упаковать его на свой веб-сайт, но похоже, что импорт сторонних модулей может быть выполнен с несколькими исключениями, см. Ниже.

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

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

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

person winfred    schedule 26.04.2010
comment
Спасибо, Винфред, за этот вклад. Сначала я попробую способ, предложенный здесь Вублом. если тот не сработает, я прибегну к Вашему. Еще раз спасибо. - person brilliant; 27.04.2010