python - 如何解析在查看源代码中不显示代码的网站?

标签 python forms parsing mechanize

我不确定如何正确描述问题,但无论如何, 所以我想使用 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()

提前致谢, 理查德。

最佳答案

您尝试解析的网页无法直接访问。 当您访问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、时间..)
  2. 第二页会将您重定向到https://shb.ais.ucla.edu/shibboleth-idp/AuthnEngine
  3. 第三页会将您重定向到 https://shb.ais.ucla.edu/shibboleth-idp/Authn/RemoteUser
  4. 最后一页将以 200 响应并向您发送带有表单和几个隐藏输入字段的标记。表单将在加载时自行提交,只有在第五次响应时您才会获得实际的登录页面。

现在我不知道 python 是如何处理重定向 header 的。您可能需要查看收到的回复。在最好的情况下,它将是最后一个带有隐藏变量的页面,您需要解析这些并将 POST 请求发送到相同的 url 以获取真正的登录页面。在最坏的情况下,您需要从第一页开始一直关注标题。

关于python - 如何解析在查看源代码中不显示代码的网站?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8959176/

相关文章:

html - HTML 文件上传如何工作?

javascript - 动态创建字段/Id 中的 foreach 类似解决方案

使用变量 url 提交的 jQuery AJAX

c - 从 bison 语法文件中删除操作代码

php - PHP/Codeigniter 的 Printf 语法解析器?

python - 没有日期的 pandas.read_csv parse_dates

python - 展平 Spark DataFrame 中的嵌套数组

python - 为什么Python的Queue在qsize()中返回一个大概的大小?

python - 这个Python函数应该如何调用

python - 使用 elementtree 在 Python 中迭代子标签的 XML 子代