好了,我们前面已经讲解了怎么找到登陆界面以及从登陆界面源码中获取验证码图片的网址,我们再来回顾一下前面设定的流程,并开始编写代码
先手动登陆,在登陆过程中找到post数据的内容,向哪个网站post数据
使用urlopen 将登陆界面的源码下载下来,并将验证码图片的网址找出来
点击验证码的图片找到要输入的验证码,构建请求,加入post数据,并将所有数据发送到实际登陆的网站
使用cookielib获取cookies,并构造opener自动携带cookies访问其他的页面
#!/usr/bin/env python # -*- coding:UTF-8 -*- __author__ = "217小月月坑" ''' 验证码登陆try-1 ''' import urllib import urllib2 import re import cookielib # 获取登陆界面的源码并将验证码图片的网址抽取出来 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) contents = urllib2.urlopen(request).read() items = re.findall(pattern,contents) for item in items: print item # 提示用户输入验证码 captcha = raw_input("请输入验证码:") # 构造post数据 data = { 'u': '[email protected]', 'k': 'xxxxxxxxxxxxxxxxx', 'auth': captcha, 'auto': 'on', 'comfrom':'', 'type': '2', } post_data = urllib.urlencode(data) # 将post 信息发送到接受信息的网址 response = urllib2.urlopen("https://id.ifeng.com/api/sitelogin",post_data) print response.read() # cookies处理 cookieJar = cookielib.CookieJar() handler = urllib2.HTTPCookieProcessor(cookieJar) opener = urllib2.build_opener(handler) response2 = opener.open("http://blog.ifeng.com/16441366.html") print response2.read()
来看看结果
这又是为什么呢?