Форум сайта python.su
Господа, осваиваю давно желаемое. Без задачи и нет стимула. нашел серьезное. не сплю вторые сутки. Прошу помощи в рекогнасцировке местности:
ЗАДАЧА:
есть некая страница, ее необходимо
* и заполнить и отправить
* и знать ее код, чтоб вынуть кусок
* не перечитывать, не обновлять
я, штудируя кучу доков понял, что первую часть проще делать на библитеках:
1* from ClientForm import ParseResponse # заполнение форм
2* import mechanize # назову эмуляцией браузера
Пример 1.
from ClientForm import ParseResponse
...
print '***START on url ', url
response = urllib2.urlopen(url)
response2 = response
body = response.read()
#response.close() #все таки считаю, что нужно закрыть, так как буфер может не слиться, хотя...
file(Local_Path + File_Name, 'wb').write(body)
print 'Записали файл с телом страницы для своих нужд. НАДО'
#парсим стандартным инструментом библиотеки
forms1 = ParseResponse(response, backwards_compat=False)
form = forms1[1]
print '***MAKE FORM', form
form['field1'] = MSG_1
form['field2'] = MSG_2
response3 = urllib2.urlopen(form.click())
print response3.read() #читаем что получилось
...
import mechanize
...
print '***START on url ', url
br = mechanize.Browser()
cj = mechanize.CookieJar()
br.set_cookiejar(cj)
response = br.open(url)
#print 'Добро пожаловать на ', br.title()
# assert(br.viewing_html()) # по русски расскажите чо это?
body = response.read()
response.close()
file(Local_Path + File_Name, 'wb').write(body)
print 'Записали файл с телом страницы для последующих действий'
#response1 = br.back() # back to cheese shop (same data as response1)
response.seek(0) # как декларируется похоже на файловый тип. посему пытаюсь указатель всунуть на начало
#br.select_form(name="addform") # смотрим строчку снизу - ни какой разницы нет
br.select_form(nr=1)
br['body1'] = MSG_1
br['body2'] = MSG_2
for form in br.forms(): # смотрим на форму
print form
return br.submit() # пытаемся комитить
br = mechanize.Browser()
br.viewing_html() # !!!??? ху из это
Офлайн
Тоже столкнулся с проблемой, когда используешь ParseResponse, то хтмл-код страницы уже не получить. Нашел следующий выход: использовать ParseFile. Для примера:
response = opener.open(req)
url = response.geturl()
the_page = response.read()
fl = StringIO.StringIO(the_page)
forms = ParseFile(fl, url, backwards_compat=False)
Офлайн