Как разобрать сайт, который не показывает коды в представлении источника? - PullRequest
4 голосов
/ 22 января 2012

Я не уверен, как правильно описать проблемы, но в любом случае, поэтому я хочу использовать mechanize, чтобы получить форму и получить имя для ввода.однако, когда я анализирую с использованием mechanize, он не показывает имя формы и имя ввода.и если я пытаюсь вручную просмотреть веб-сайт, я должен осмотреть элемент, чтобы я мог получить имя ввода, но, тем не менее, он динамический, поэтому каждый раз, когда я проверяю элемент, он дает мне другое имя.любая идея?кстати, сайт, который я пытаюсь разобрать, это https://www.ursa.ucla.edu/logon/logon.asp, если кому интересно.

Вот что я пробовал:

  br = mechanize.Browser(factory=mechanize.RobustFactory())     
  br.open("https://www.ursa.ucla.edu/logon/logon.asp/")
  br.select_form(nr=0)
  print br.response().read()

Заранее спасибо, Ричард.

1 Ответ

1 голос
/ 22 января 2012

Веб-страница, которую вы пытаетесь проанализировать, недоступна напрямую. Когда вы посещаете https://www.ursa.ucla.edu/logon/logon.asp, он будет делать следующее:

  1. Перенаправить вас на https://shb.ais.ucla.edu/shibboleth-idp/profile/Shibboleth/SSO?shire=https%3A%2F%2Fwww.ursa.ucla.edu%2FShibboleth.sso%2FSAML%2FPOST&time=1327213354&target=cookie%3Aa872692c&providerId=https%3A%2F%2Fwww.ursa.ucla.edu%2Fshibboeth-sp (как вы можете видеть, здесь есть несколько переменных - cookie, time ..)
  2. Вторая страница перенаправит вас на https://shb.ais.ucla.edu/shibboleth-idp/AuthnEngine
  3. Третья страница перенаправит вас на https://shb.ais.ucla.edu/shibboleth-idp/Authn/RemoteUser
  4. Последняя страница ответит 200 и отправит вам разметку с формой и парой скрытых полей ввода. Форма будет отправлена ​​сама по себе, и только после этого при пятом ответе вы получите реальную страницу входа.

Теперь я не знаю, как python обрабатывает заголовки перенаправления. Возможно, вам придется посмотреть на ответ, который вы получаете. В лучшем случае это будет последняя страница со скрытыми переменными, вам нужно будет проанализировать их и отправить запрос POST на тот же URL, чтобы получить реальную страницу входа. В худшем случае вам нужно будет следовать заголовкам с первой страницы.

...