Форум сайта python.su
Здравствуйте. Что есть для сабжа? Есть автоматические модули?
А вот конкретный вопрос:
есть сайт со списком оборудования, конфигурацией и прочими прелестями. В адресной строке после логина на сайт отображается такой адрес: bla-bla/cgi_bin/pCComp.exe
На самом сайте есть ссылки. После клика по ссылке, открывается другая страничка с другими ссылками. Но в адреснойстроке по прежнему bla-bla/cgi_bin/pCComp.exe, веб-консоль показывает вот что: POST http://portal.arbyte.ru/cgi_bin/pCComp.exe
Внутри странички есть такого вида ссылки: a href=“/cgi_bin/pCComp.exe” onclick=“AdapterForm2.__act.value='ColId.1.2__id.35.wDm.DataSetAdapter2.GetNameActionCL__sp.13.PlatCompsPage__fp.13.PlatCompsPage';AdapterForm2.submit();return false;”
Как со всем этим быть?
Прошу обьяснять наиболее “детским” языком. Я впервые сталкиваюсь с парсингом сайта, а тут сразу такая вот загогулина.
UPD
Я догадался wireshark'ом посмотреть готовый POST. Вот он: __act=NextPage.9.LoginPage__id.33.LoginPage.LoginFormAdapter1.Login__sp.9.LoginPage__fp.9.LoginPage&UserName=username&Password=password&NextPage=ProductsPage
Теперь делаю так:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import urllib2
params = "__act=NextPage.9.LoginPage__id.33.LoginPage.\
LoginFormAdapter1.Login__sp.9.LoginPage__fp\
.9.LoginPage&UserName=name&Password=password&NextPage=ProductsPage"
req = urllib2.Request('http://79.143.70.100:80/cgi_bin/pCComp.exe', params)
f = urllib2.urlopen(req)
print req
for i in f:
print i
<urllib2.Request instance at 0xb786692c>
<html><body><h1>Internal Application Error</h1>
<p>'Login__sp' is not a valid integer value
<p><hr width="100%"><i></i></body></html>
Отредактировано (Апрель 12, 2011 14:45:58)
Офлайн
Похоже, тебе придется самому разбирать поля onlick=… и формировать данные для POST-запросов.
По поводу ошибки - может просто требуется соблюдать определенный порядок вызова?
И еще попробуй заменить LoginFormAdapter1 на LoginFormAdapter.1 (там чередование слов и цифр нарушено).
Чтобы использовать куки надо в urillib2 создать свой opener, чтобы тот включал HTTPCookieProcessor
Офлайн