python学习记录(1)
2016-03-19 00:28
776 查看
才刚刚开始学习python不到三天,觉得python挺有趣的,其实想想前两天打算学习python是因为在今日头条上看到了一个 python写网络爬虫 的文章,觉得python干这种事情应该也比较有趣,正好最近都在研究网页post登陆方面的东西,所以立马就来了兴趣,俗话说兴趣是最好的老师,所以快速地把语法粗糙地学了一遍,打算以post为入口,好好学习python一下,想到昨天写的python模拟登陆教务网系统,觉得代码有些繁琐,所以打算写个自己的比较好用的网页访问模块,花了几个小时弄个个粗糙的,勉强可用,可以自定义cookie什么的!具体的封装以后再慢慢弄,反正也自己用,什么异常错误处理暂时还没弄,这些都以后弄吧!
因为是第一次用python敲这么多代码吧,所以还是遇到了很多麻烦,在此写博客记录一下!
先贴代码吧:
说说完成代码时遇到的大问题吧,小的问题,比如语法不熟悉,什么冒号没打了,缩进这些啊就不提了,
首先就是cookie的问题,因为我们要实现自定义发送的cookie,查询了一下cookielib的帮助文档,类CookieJar好像有个set_cookie的方法,看他的说明好像就是自定义cookie的意思,但是奇怪的是好像并不可以,看来是异想天开了,后来百度了才发现并没有官方提供的自定义cookie,所以就百度之后抄了上面的代码,大体思路就是自己构建一个处理函数处理cookie,然后在处理的时候往请求头里面加自定义的cooki。
做完了cookie的处理工作,后面的就相对简单点了,不过作为新手的我又遇到了一个难以理解的问题,见下图:
提示那个下面的^所指的地方有语法错误,但是我死活没发现有什么语法错误啊,后来机智的我删掉了某些参数,发现直流那个**data,把后面的字典全部删掉就不会出错了,我想这个应该是禁止传递多个字典吧,百度了一下,**相当于字典解包,然后根据函数参数个数进行匹配,所以多个字典也就没法匹配了啊!这么想顺江就恍然大悟了,但是不知道我这样理解正确不,希望有了解的人指正一下,所以没办法了,只有自己把这些字典整合成一个字典,然后传进去了!
其他的问题,暂时没发现,基本上可用,用Charles拦截了一下,发现貌似没有什么问题,明天再完善一下,看怎么方便调用吧!
感冒还没好,只有早点睡了!明天再弄咯!
因为是第一次用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拦截了一下,发现貌似没有什么问题,明天再完善一下,看怎么方便调用吧!
感冒还没好,只有早点睡了!明天再弄咯!
相关文章推荐
- 使用Python编写基于DHT协议的BT资源爬虫
- Python的Socket编程过程中实现UDP端口复用的实例分享
- python 基础二、列表【list】
- 笔记:HeadFirstPython(1)初识Python
- 12步轻松搞定python装饰器
- python编写工具之基础——处理命令行参数
- 发布你的Python模块
- Python爬虫实现半自动发微博
- python标准库学习4-time
- 初学者必知的Python中优雅的用法
- 在Ubuntu 14.04中升级python到2.7.11
- mysql-connector-python, mysql-connector-python-rf and mysql-connector-repackaged
- 粒子群算法实现之python
- pip install mysql-connector-python安装时报错不满足requirement
- (3)中文分词——Python结巴分词器
- (9)Python爬虫——下载PDF
- 《跟着小吴哥学python》之 02 python搭建开发环境
- Python中特殊函数和表达式 filter,map,reduce,lambda
- Learning Python(16)--多线程编程(threading,Queue模块)
- python 汉诺塔问题(Tower of Hanoi Puzzle)