Python模拟登陆(urllib2)

原创 2015年11月17日 16:19:34
欢迎转载,转载请注明原文地址:http://blog.csdn.net/majianfei1023/article/details/49888757

最近需要做个自动化工具,需要自动登录某个网站然后自动进行某些操作,免除人工一个一个操作的烦恼。
第一步就是要登录网站,而目前主流网站的登陆过程大同小异。于是乎,我就拿了人人网(www.renren.com)来试手。至于为什么用它,因为很多网站的登陆过程太复杂了,它稍微简单点。

主要用python实现了对网站的模拟登录。需要自己构造数据接口,这就需要抓包看登陆的时候到底发了什么数据。
firefox有一个很好用的工具HTTPfox来抓取http数据包,主要看url,postdata,header,cookie,user-agent等数据。

我们要构造自己的HTTP数据包,并发送给指定url。我们通过urllib2等几个模块提供的API来实现request请求的发送和相应的接收。
大部分网站登录时需要携带cookie,所以我们还必须设置cookie处理器来保证cookie。


#!/usr/bin/python 
# -*- coding:utf-8 -*-

import urllib
import urllib2
import cookielib

#登录的主页面
hosturl = 'http://www.renren.com/'

#post数据接收和处理的页面,点登陆的时候http POST的链接
posturl = 'http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=20151021027896'

#设置一个cookie处理器,它负责从服务器下载cookie到本地,并且在发送请求时带上本地的cookie
cj = cookielib.LWPCookieJar()
cookie_support = urllib2.HTTPCookieProcessor(cj)
opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)
urllib2.install_opener(opener)
  
#打开登录主页面(他的目的是从页面下载cookie,这样我们在再送post数据时就有cookie了,否则发送不成功)
h = urllib2.urlopen(hosturl)
  
#构造header,一般header至少要包含一下两项。这两项是从抓到的包里分析得出的。
headers = {
			'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0',
			'Referer' : 'http://www.renren.com/'
		   }

#抓包获取参数,password一般会通过某种方式加密。
postData = {
	'email':'xxxxxx',
	'icode':'',
	'origURL':'http://www.renren.com/home',
	'domain':'renren.com',
	'key_id':1,
	'captcha_type':'web_login',
	'password':'xxxxxx',
	'rkey':'70153f87e588d34f588cccecdd878d66',
	'f':''
	} 

postData = urllib.urlencode(postData)

#通过urllib2提供的request方法来向指定Url发送我们构造的数据,并完成登录过程  
request = urllib2.Request(posturl, postData, headers)

print request
response = urllib2.urlopen(request)
text = response.read()
text = text.replace("true","1").replace("false","0")
text = eval(text)
url = text.get('homeUrl')  # 这个才是你人人主页的真实url
if not url:
	print "error"

response = urllib2.urlopen(url)

result = response.read().decode("utf-8").encode("gbk")
print result


注:
1.登陆一般都会先有一个http GET。用于拉取一些信息及获得Cookie,然后再http POST登陆。
2.http POST登陆的链接有可能是动态的,从GET返回的信息中获取。
3.PASSWORD有些是明文发送,有些是加密后发送,腾讯的更牛逼,动态加密的,里面有很多其他数据的加密信息,不只是密码。不过好像能通过查看JS源码获得加密算法。
4.大多数网站的登陆整体流程类似,可能有些细节不一样。所以不能保证其他网站登陆成功,还有待研究。

Python爬虫之模拟登录总结

备注:python 2.7.9,32位 有些网站需要登录后才能爬取所需要的信息,此时可以设计爬虫进行模拟登录,原理是利用浏览器cookie。 一、浏览器访问服务器的过程:     (1)浏览器(客...
  • churximi
  • churximi
  • 2016年03月17日 21:48
  • 21347

python爬虫之模拟登陆csdn

python模拟登陆网页主要使用到urllib、urllib2、cookielib及BeautifulSoup等基本模块,当然进阶阶段我们还可以使用像requests等更高级一点的模块。其中Beaut...
  • yanggd1987
  • yanggd1987
  • 2016年08月05日 12:28
  • 4911

Python使用requests库模拟登陆网站的方式--以豆瓣为例

初次接触爬虫的时候,总会看到模拟登录网站的字眼,然后又是get、post等一堆不知道什么意思的字眼。百度get、post之后也不太清楚什么意思,只知道好像是打开网址的时候顺便提交一些数据。然后又在想:...
  • u011659379
  • u011659379
  • 2015年08月31日 14:04
  • 37649

Python爬虫----爬虫入门(4)---urllib2 模拟登陆

开发环境,ubuntu 14.0.1自带python 2.7.6接下来要开始抓取需要登陆才能抓取的页面: 这里先抓一个不需要验证的网站:学校的官网: 找到登陆框,输入密码账号,登陆。(先打开开发者...
  • lw_zhaoritian
  • lw_zhaoritian
  • 2016年04月22日 13:12
  • 4617

python爬虫之urllib2登录并抓取HTML页面

Http协议相关知识 验证码实现机制与session的工作原理 urllib2库的使用
  • Idiot_xue
  • Idiot_xue
  • 2017年05月22日 15:05
  • 3389

urllib2 登录 login

#!/usr/bin/python #coding=utf-8 import urllib import urllib2 def post(url, data): req = urllib2....
  • u010145988
  • u010145988
  • 2013年12月31日 10:49
  • 1176

Python入门:模拟登录(一)urllib

我们很多时候需要用python写测试web的脚本,但现在很多网站都需要登录才能进行下一步操作的,所以python模拟登录在我们的日常操作中很重要,下来我给大家简单介绍一下python是怎样实现web登...
  • foryouslgme
  • foryouslgme
  • 2016年05月21日 12:53
  • 2656

Python爬虫实现自动登录、签到

前几天女朋友跟我说,她在一个素材网站上下载东西,积分总是不够用,积分是怎么来的呢,是每天登录网站签到获得的,当然也能购买,她不想去买,因为偶尔才会用一次,但是每到用的时候就发现积分不够,又记不得每天去...
  • u283056051
  • u283056051
  • 2015年11月26日 17:00
  • 16326

python脚本实现自动登陆校园网

搞了几天终于把这个搞出来了,代码不到50行,要是别的网站很好模拟,但这个稍微有点麻烦,抓包工具用了好多,httpfox没抓全,wireshark抓的又太多不好分析,最后还是用神器fiddler才把它搞...
  • abitch
  • abitch
  • 2016年07月18日 10:33
  • 1806

python登录网页的两种方式

以登录我校系统为例来演示pyhton登录
  • JoeHF
  • JoeHF
  • 2015年09月13日 23:47
  • 4497
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python模拟登陆(urllib2)
举报原因:
原因补充:

(最多只允许输入30个字)