您的位置:首页 > 编程语言 > Python开发

python学习记录(1)

2016-03-19 00:28 776 查看
才刚刚开始学习python不到三天,觉得python挺有趣的,其实想想前两天打算学习python是因为在今日头条上看到了一个 python写网络爬虫 的文章,觉得python干这种事情应该也比较有趣,正好最近都在研究网页post登陆方面的东西,所以立马就来了兴趣,俗话说兴趣是最好的老师,所以快速地把语法粗糙地学了一遍,打算以post为入口,好好学习python一下,想到昨天写的python模拟登陆教务网系统,觉得代码有些繁琐,所以打算写个自己的比较好用的网页访问模块,花了几个小时弄个个粗糙的,勉强可用,可以自定义cookie什么的!具体的封装以后再慢慢弄,反正也自己用,什么异常错误处理暂时还没弄,这些都以后弄吧!
因为是第一次用python敲这么多代码吧,所以还是遇到了很多麻烦,在此写博客记录一下!

先贴代码吧:

#encoding=utf-8
import cookielib
import urllib
import urllib2
def ifHasTheDic(name,**dic):#取回信息
if dic.has_key(name):
return dic[name]
else:
return {}

def httpRequest(url,**requestDic):
request = urllib2.Request(url, urllib.urlencode(ifHasTheDic("PostData",**requestDic)), ifHasTheDic("Headers",**requestDic))
if ifHasTheDic("requestCookie",**requestDic):
(opener,cookie) = buildCookie(mergeUserCookies(**requestDic["requestCookie"]))
else:
opener = urllib2.build_opener()
return opener.open(request)

#合并要传递的cookie的字典
def mergeUserCookies(**CookiesDic):
str1 = ''
for (key,value) in CookiesDic.items():
str1 = str1 + str(key) + "=" + str(value)+";"
return str1

class SimpleCookieHandler(urllib2.BaseHandler):#网上抄的代码改的,就是自定义发送cookie
simple_cookie = ''
def __init__(self,contentofCookie = ''):
self.simple_cookie = contentofCookie
def http_request(self, req):
if not req.has_header('Cookie'):
req.add_unredirected_header('Cookie', self.simple_cookie)
else:
cookie = req.get_header('Cookie')
req.add_unredirected_header('Cookie', self.simple_cookie + '; ' + cookie)
#print req.get_header('Cookie')
return req

def buildCookie(contentofCookie):
cookie = cookielib.CookieJar()#获取CookieJar对象实例
myCookieHander = SimpleCookieHandler(contentofCookie)
handler = urllib2.HTTPCookieProcessor(cookie)
opener = urllib2.build_opener(handler,myCookieHander)
return (opener,cookie)

#一下为测试代码
cookieDic = {"xXYZ":"112233","Stu":"20202020","sdddd":"xxxxxx"}#自定义的cookie信息
PostData={"Name":"lllllll","pwd":"jlskjdfoisjdofjs"}#自定义的post信息
Headers= { 'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' }#自定义的发送头
requestDic = {"PostData":PostData,"Headers":Headers,"requestCookie":cookieDic}#合并在一起
#print ifHasTheDic("Stu",**cookieDic)
result =  httpRequest("http://202.X.X.X:8080",**requestDic) #测试一下
print result.read().decode('gbk').encode('utf-8')
#print urllib.urlencode(cookieDic)
#print mergeUserCookies(**cookieDic)

#(opener,cookie) = buildCookie(mergeUserCookies(**cookieDic))
#print result.read().decode('gbk').encode('utf-8')


说说完成代码时遇到的大问题吧,小的问题,比如语法不熟悉,什么冒号没打了,缩进这些啊就不提了,

首先就是cookie的问题,因为我们要实现自定义发送的cookie,查询了一下cookielib的帮助文档,类CookieJar好像有个set_cookie的方法,看他的说明好像就是自定义cookie的意思,但是奇怪的是好像并不可以,看来是异想天开了,后来百度了才发现并没有官方提供的自定义cookie,所以就百度之后抄了上面的代码,大体思路就是自己构建一个处理函数处理cookie,然后在处理的时候往请求头里面加自定义的cooki。

做完了cookie的处理工作,后面的就相对简单点了,不过作为新手的我又遇到了一个难以理解的问题,见下图:



提示那个下面的^所指的地方有语法错误,但是我死活没发现有什么语法错误啊,后来机智的我删掉了某些参数,发现直流那个**data,把后面的字典全部删掉就不会出错了,我想这个应该是禁止传递多个字典吧,百度了一下,**相当于字典解包,然后根据函数参数个数进行匹配,所以多个字典也就没法匹配了啊!这么想顺江就恍然大悟了,但是不知道我这样理解正确不,希望有了解的人指正一下,所以没办法了,只有自己把这些字典整合成一个字典,然后传进去了!

其他的问题,暂时没发现,基本上可用,用Charles拦截了一下,发现貌似没有什么问题,明天再完善一下,看怎么方便调用吧!





感冒还没好,只有早点睡了!明天再弄咯!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: