一直没有写博客的习惯,所以也就没有一种监督自己不断学习的东西,也不能很好的把自己学习的东西保存一下,所以要用的时候还是只有百度或者google!虽然很早就注册了csdn,但是也就是去下载下载什么冷门的软件什么的,不得不承认csdn上面确实有很多工具很不错啊!这几年也帮了我不少忙了!不多说了,直接开始吧!
最近一直在学习python,主要是前见天在学习post网页模拟之类的,发现python在做网络爬虫方面很在行!所以我就萌生了学习python的冲动!
快速地把基本语法了解之后,发现python的强大之处在于模块或者说类似于C/++中的库很丰富吧,在做数值计算(大数据)方面很有优势,这点来看有点像matlab啊!
好吧,学习了基本的语法之后就要开始看如何做post了,先用python做个登陆学校教务处的试一下。
说干就干~~~~~~~~~~~~
首先是各种网上找关于python post的东西,发现还挺多,不过都差不多,都是用cookierlib urllib urllib2来弄的
随便抄了些代码,终于可用了:
#!/usr/bin/env python
#-*-coding:utf-8-*-
import urllib
import urllib2
import cookielib
def bindCookie():
#获取Cookiejar对象(存在本机的cookie消息)
cj = cookielib.CookieJar()
#自定义opener,并将opener跟CookieJar对象绑定
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
#安装opener,此后调用urlopen()时都会使用安装过的opener对象
urllib2.install_opener(opener)
return opener
url = "http://202.X.X.X:8080/login.aspx"
opener = bindCookie()
#print opener.open(url).read()
print 'x'
url="http://202.X.X.X:8080/_data/index_login.aspx"#
# 登陆用户名和密码
data={
"__VIEWSTATE":"dDw1OTgzNjYzMjM7dDw7bDxpPDE+O2k8Mz47aTw1Pjs+O2w8dDxwPGw8VGV4dDs+O2w86YeN5bqG5aSn5a2mOz4+Ozs+O3Q8cDxsPFRleHQ7PjtsPFw8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCJcPgpcPCEtLQpmdW5jdGlvbiBvcGVuV2luTG9nKHRoZVVSTCx3LGgpewp2YXIgVGZvcm0scmV0U3RyXDsKZXZhbCgiVGZvcm09J3dpZHRoPSIrdysiLGhlaWdodD0iK2grIixzY3JvbGxiYXJzPW5vLHJlc2l6YWJsZT1ubyciKVw7CnBvcD13aW5kb3cub3Blbih0aGVVUkwsJ3dpbktQVCcsVGZvcm0pXDsgLy9wb3AubW92ZVRvKDAsNzUpXDsKZXZhbCgiVGZvcm09J2RpYWxvZ1dpZHRoOiIrdysicHhcO2RpYWxvZ0hlaWdodDoiK2grInB4XDtzdGF0dXM6bm9cO3Njcm9sbGJhcnM9bm9cO2hlbHA6bm8nIilcOwppZih0eXBlb2YocmV0U3RyKSE9J3VuZGVmaW5lZCcpIGFsZXJ0KHJldFN0cilcOwp9CmZ1bmN0aW9uIHNob3dMYXkoZGl2SWQpewp2YXIgb2JqRGl2ID0gZXZhbChkaXZJZClcOwppZiAob2JqRGl2LnN0eWxlLmRpc3BsYXk9PSJub25lIikKe29iakRpdi5zdHlsZS5kaXNwbGF5PSIiXDt9CmVsc2V7b2JqRGl2LnN0eWxlLmRpc3BsYXk9Im5vbmUiXDt9Cn0KZnVuY3Rpb24gc2VsVHllTmFtZSgpewogIGRvY3VtZW50LmFsbC50eXBlTmFtZS52YWx1ZT1kb2N1bWVudC5hbGwuU2VsX1R5cGUub3B0aW9uc1tkb2N1bWVudC5hbGwuU2VsX1R5cGUuc2VsZWN0ZWRJbmRleF0udGV4dFw7Cn0KZnVuY3Rpb24gd2luZG93Lm9ubG9hZCgpewoJdmFyIHNQQz13aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCt3aW5kb3cubmF2aWdhdG9yLmNwdUNsYXNzK3dpbmRvdy5uYXZpZ2F0b3IuYXBwTWlub3JWZXJzaW9uKycgU046TlVMTCdcOwp0cnl7ZG9jdW1lbnQuYWxsLnBjSW5mby52YWx1ZT1zUENcO31jYXRjaChlcnIpe30KdHJ5e2RvY3VtZW50LmFsbC50eHRfZHNkc2RzZGpramtqYy5mb2N1cygpXDt9Y2F0Y2goZXJyKXt9CnRyeXtkb2N1bWVudC5hbGwudHlwZU5hbWUudmFsdWU9ZG9jdW1lbnQuYWxsLlNlbF9UeXBlLm9wdGlvbnNbZG9jdW1lbnQuYWxsLlNlbF9UeXBlLnNlbGVjdGVkSW5kZXhdLnRleHRcO31jYXRjaChlcnIpe30KfQpmdW5jdGlvbiBvcGVuV2luRGlhbG9nKHVybCxzY3IsdyxoKQp7CnZhciBUZm9ybVw7CmV2YWwoIlRmb3JtPSdkaWFsb2dXaWR0aDoiK3crInB4XDtkaWFsb2dIZWlnaHQ6IitoKyJweFw7c3RhdHVzOiIrc2NyKyJcO3Njcm9sbGJhcnM9bm9cO2hlbHA6bm8nIilcOwp3aW5kb3cuc2hvd01vZGFsRGlhbG9nKHVybCwxLFRmb3JtKVw7Cn0KZnVuY3Rpb24gb3Blbldpbih0aGVVUkwpewp2YXIgVGZvcm0sdyxoXDsKdHJ5ewoJdz13aW5kb3cuc2NyZWVuLndpZHRoLTEwXDsKfWNhdGNoKGUpe30KdHJ5ewpoPXdpbmRvdy5zY3JlZW4uaGVpZ2h0LTMwXDsKfWNhdGNoKGUpe30KdHJ5e2V2YWwoIlRmb3JtPSd3aWR0aD0iK3crIixoZWlnaHQ9IitoKyIsc2Nyb2xsYmFycz1ubyxzdGF0dXM9bm8scmVzaXphYmxlPXllcyciKVw7CnBvcD1wYXJlbnQud2luZG93Lm9wZW4odGhlVVJMLCcnLFRmb3JtKVw7CnBvcC5tb3ZlVG8oMCwwKVw7CnBhcmVudC5vcGVuZXI9bnVsbFw7CnBhcmVudC5jbG9zZSgpXDt9Y2F0Y2goZSl7fQp9CmZ1bmN0aW9uIGNoYW5nZVZhbGlkYXRlQ29kZShPYmopewp2YXIgZHQgPSBuZXcgRGF0ZSgpXDsKT2JqLnNyYz0iLi4vc3lzL1ZhbGlkYXRlQ29kZS5hc3B4P3Q9IitkdC5nZXRNaWxsaXNlY29uZHMoKVw7Cn0KXFwtLVw+Clw8L3NjcmlwdFw+Oz4+Ozs+O3Q8O2w8aTwxPjs+O2w8dDw7bDxpPDA+Oz47bDx0PHA8bDxUZXh0Oz47bDxcPG9wdGlvbiB2YWx1ZT0nU1RVJyB1c3JJRD0n5a2m5Y+3J1w+5a2m55SfXDwvb3B0aW9uXD4KXDxvcHRpb24gdmFsdWU9J1RFQScgdXNySUQ9J+W4kOWPtydcPuaVmeW4iFw8L29wdGlvblw+Clw8b3B0aW9uIHZhbHVlPSdTWVMnIHVzcklEPSfluJDlj7cnXD7nrqHnkIbkurrlkZhcPC9vcHRpb25cPgpcPG9wdGlvbiB2YWx1ZT0nQURNJyB1c3JJRD0n5biQ5Y+3J1w+6Zeo5oi357u05oqk5ZGYXDwvb3B0aW9uXD4KOz4+Ozs+Oz4+Oz4+Oz4+Oz7p2B9lkx+Yq/jf62i+iqicmZx/xg==",
"__VIEWSTATEGENERATOR":"CAA0A5A7",
"txt_dsdfdfgfouyy":"111111",#密码 其实这儿的明文并没有什么用,最后的那个加密后的才有用
"txt_dsdsdsdjkjkjc":"201XXXXX",#学号
"txt_ysdsdsdskgf":"",
"pcInfo":"",
"typeName":"",
"aerererdsdxcxdfgfg":"",
"Sel_Type":"STU",
"efdfdfuuyyuuckjg":"5FB44B4D01C2B77A955EA8CAB6EB1E",#加密后的密码校验值 MD5加密的
}
# urllib进行编码
post_data=urllib.urlencode(data)
# 发送头信息 要仿制就要仿制得像样子
headers ={
"Host":"202.X.X.X:8080",
"Referer": url,
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36"
}
req=urllib2.Request(url,post_data)
req.add_header=headers
result = opener.open(req)
# 显示结果 试一下是否登陆成功了
url="http://202.X.X.X:8080/xsxj/Stu_MyInfo_RPT.aspx"
req.add_header=headers
print urllib2.urlopen(url).read()#其实我发现用opener.open(url)也可以,不知道有什么区别,希望有人可以解释一下,这些模块的帮助文档也不知道在哪儿去找
发现可以登陆成功!
但是有些网页就要出错,出一些我也看都不懂的东西,希望了解的人可以告知一下,再次不甚感激!
但是很快下一个问题又来了!
返回的结果居然汉字显示乱码,无语了!编码问题在python中怎么解决啊!只有问百度了!
看了下网页的源代码,在html开头写的是gb2312的编码,但是写的python文件头定义的是utf-8的编码,所以就把gb2312变成了utf-8来显示了,结果就乱码了吧!
经过不断的百度,终于还是找到了解决办法!不过这里问一下国内人气比较好的python交流社区有吗?有问题新手不知道怎么问啊!
先把连接贴出来
http://zhidao.baidu.com/link?url=X2SZNKmIUhH8LXzreyjrfxCdMnBqUbRGqjXyQlT4ibYbyLWoi4Lf1VgKGwNFHsXUlaKlMXtU2Gf2q1dKuVDlp4g1SKy-dZIO-mRahq00IBS
#!/usr/bin/env python
# -*- coding:utf8 -*-
import
urllib2
req
=
urllib2.Request(
"http://www.baidu.com/"
)
res
=
urllib2.urlopen(req)
html
=
res.read()
res.close()
html
=
unicode
(html,
"gb2312"
).encode(
"utf8"
)#解决办法竟然就是这么简单,其实之前我就已经试过这种办法了,不过貌似出错了,奇怪
print
html
现在正值换季,不幸患上了感冒,就只能先学到这儿了,后来再慢慢完善吧!