python-53: 网页跳转

  • Post author:
  • Post category:python


首先还是看那两张图

访问的网址

215648_1gzu_2429887.png

点击访问后出现的网址

215752_Vmy9_2429887.png

我们看到,前后两个网址已经发生了变化,而且第二个还显示出了一些错误的信息,这是为什么呢?

首先是网页的跳转,或者说,重定向,在我们访问浏览器的过程中,网页重定向是很常见的,我们来看看百度百科上的解释


网域名称转址



英语



URL redirection

,或称

网址重定向



URL重定向

),是指当用户浏览某个网址时,将他导向到另一个网址的技术。常用在把一串很长的

网站


网址

,转成较短的网址。因为当要传播某网站的网址时,常常因为网址太长,不好记忆;又有可能因为换了网络的免费网页空间,网址又必须要变更,不知情的用户可能会认为网站关闭了。这时就可以用网络上的转址服务了。这个技术使一个网页是可借由不同的

统一资源定位符

(URL)链接。

这是维基百科的解释,其实我们只需要知道重定向就是把你想要访问的某一个网址转接到另外一个网址上的一种技术,所以很显然,我们这里是遇到了重定向,这就意味着,我们前面写入的网址是不对的,那是post数据的网址,并不是登陆界面的网址,所以我们不能从源码中获得我们想要的数据,我们还是需要找到登陆界面的网址,这又怎么找呢?

于是我又跑去凤凰网的首页登陆看看能不能找的到登陆界面的网址,但是我发现它是弹出式的窗口,我们是看不到它的网址的,这该怎么办呢?

“loginsuccess?&c=0&m=验证码错误” 这是上面的第二张图片网址的一部分,它引起了我的注意,这个”?” 和 “&” 不就是前面我们说的url查询字符串吗?反正现在也没事可做,我们把它删除试试看

222136_2Ilv_2429887.png

好了,这就是我们的登陆界面,那这个凤凰网的登陆流程是怎样的呢?为了便与分析我们来看看登陆界面的源码

143720_GVww_2429887.png

我框出了两个框,第一个框的内容是

<form id="login_form" name="login_form" action="https://id.ifeng.com/api/sitelogin" method="POST" target="LoginFrame">

这里有个网址,还有一个 method=”POST”,结合我们前面通过httpfox抓包的结果我们不难发现这个网址是post数据的网址,那么理所当然,第二个框框里面的<img src……就是验证码图片的网址

那么,整个流程就很简单了,首先说明两个网址


  1. http://id.ifeng.com/allsite/login

    这是登陆界面的网址,用来显示输入界面和接受登陆结果的信息


  2. https://id.ifeng.com/api/sitelogin

    这是post数据的网址,js脚本,用来向服务器发送数据

登陆界面的网址用来显示一个窗口,并接受用户的输入,当用户点击”登陆”按钮之后,网页跳转到post数据的网址,并向服务器提交数据,服务器将数据比对之后,并将结果返回到给登陆界面,由登陆界面显示登陆成功或者不成功

好了,整个流程大概明白了,登陆界面的网址也找到了,我们把前面的源码修改看看输出结果是什么吧

#!/usr/bin/env python
# -*- coding:UTF-8 -*-
__author__ = "217小月月坑"

'''
获取源码并获取验证码的数据
'''

import urllib2
import re
# 新的登陆界面网址
login_url = 'http://id.ifeng.com/allsite/login'
headers = {'User-Agent':'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:39.0) Gecko/20100101 Firefox/39.0',}

pattern = re.compile(r'<img src="(.*?)".*?',re.S)
request = urllib2.Request(login_url,headers=headers)
response = urllib2.urlopen(request)
contents = response.read()

items = re.findall(pattern,contents)
for item in items:
    print item

222502_CVqV_2429887.png

好,可以看到输出的这个网址就应该是我们验证码图片的网址,为了保险起见,我们还是打开这个网址确认一下


转载于:https://my.oschina.net/u/2429887/blog/543379