Python Day5
类和对象
实例对象是程序处理得实际对象:各自都有独立得命名空间,但是继承创建该实例得类中得变量名。类对象来自于语句,而实例来自于调用。每调用一个类,就会得到这个类得新得实例。
第一个例子:
In [28]: class FirstClass():
...: def setdata(self, value):
...: self.data = value
...: def display(self):
...: print(self.data)
In [29]: x = FirstClass()
...: y = FirstClass()
In [30]: x.setdata("King Arthur")
...: y.setdata(3.14159)
In [31]: x.display()
King Arthur
In [32]: y.display()
3.14159
我们可以再类得内部或外部修改实例属性。在类内时,通过方法对self进行赋值运算;在类外时,则可以通过对实例对象进行赋值运算:
In [33]: x.data = "new value"
In [34]: x.display()
new value
我们甚至可以在实例命名空间内产生全新得属性:
In [35]: x.antherattribute = "spam"
In [36]: x.antherattribute
Out[36]: 'spam'
第二个例子:
建立在第一个例子基础之上,会定义一个新得类SecondClass,继承FirstClass所有变量名,并提供其自己得一个变量名。
In [37]: class SecondClass(FirstClass):
...: def display(self):
...: print('current values = "%s"' % self.data)
In [38]: z = SecondClass()
In [39]: z.setdata(42)
...: z.display()
current values = "42"
可以看见,setdata依然是执行FirstClass中的版本,但是这一次display属性是来自SecondClass,并打印定制的内容。
SecondClass引入的专有化完全是在FirstClass外部完成的,也就是说,不会影响当前存在的或未来的FirstClass对象:
In [40]: x.display()
new value
正则表达式和re模块
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
re 模块使 Python 语言拥有全部的正则表达式功能。
^ Matches the beginning of a line
$ Matches the end of the line
. Matches any character
\s Matches whitespace
\S Matches any non-whitespace character
、* Repeats a character zero or more times
、*? Repeats a character zero or more times (non-greedy)
、+ Repeats a character one or more times
+? Repeats a character one or more times (non-greedy)
[aeiou] Matches a single character in the listed set
[^XYZ] Matches a single character not in the listed set
[a-z0-9] The set of characters can include a range
( Indicates where string extraction is to start
) Indicates where string extraction is to end
1. re.match函数
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
函数语法:
re.match(pattern, string, flags=0)
In [42]: print(re.match('www', 'www.runoob.com').span()) # 在起始位置匹配
(0, 3)
In [43]: print(re.match('com', 'www.runoob.com')) # 不在起始位置匹配
None
我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
In [49]: line = "Cats are smarter than dogs"
...:
...: matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)
In [50]: if matchObj:
...: print ("matchObj.group() : ", matchObj.group())
...: print ("matchObj.group(1) : ", matchObj.group(1))
...: print ("matchObj.group(2): ", matchObj.group(2))
...: else:
...: print ("No match!!")
matchObj.group() : Cats are smarter than dogs
matchObj.group(1) : Cats
matchObj.group(2): smarter
2. re.search方法
re.search 扫描整个字符串并返回第一个成功的匹配。
函数语法:
re.search(pattern, string, flags=0)
In [52]: print(re.search('www', 'www.runoob.com').span()) # 在起始位置匹配
(0, 3)
In [53]: print(re.search('com', 'www.runoob.com').span()) # 不在起始位置匹配
(11, 14)
3. 检索和替换
Python 的 re 模块提供了re.sub用于替换字符串中的匹配项。
语法:
re.sub(pattern, repl, string, count=0, flags=0)
参数:
pattern : 正则中的模式字符串。
repl : 替换的字符串,也可为一个函数。
string : 要被查找替换的原始字符串。
count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配
In [61]: phone = "2004-959-559 # 这是一个国外电话号码"
In [62]: num = re.sub(r'#.*$', "", phone) # 删除字符串中的 Python注释
...: print ("电话号码是: ", num)
电话号码是: 2004-959-559
In [63]: num = re.sub(r'\D', "", phone) # 删除非数字(-)的字符串
...: print ("电话号码是 : ", num)
电话号码是 : 2004959559
http请求
1、http请求方式:get和post
get一般用于获取/查询资源信息,在浏览器中直接输入url+请求参数点击enter之后连接成功服务器就能获取到的内容,post请求一般用于更新资源,通过form表单或者json、xml等其他形式提交给服务器端,然后等待服务器端给返回一个结果的方式(这个返回结果一般就是被修改之后的是否成功的状态,或者是修改后的最新数据table等)。
http请求,不论是get还是post请求,都会包含几个部分,分别是header,cookie,get会有param,post会有body。
这个可以通过fiddler里面抓包就可以拿到需要的Headers,一般需要设置的值可能有:
header = {
“Host”: “x.x.360.cn”,
“Authorization”: “Basic: someValue”,
“Content-Type”: r"application/json",
“Connection”: “keep-alive”,
“Proxy-Connection”: “keep-alive”,
“Cookie”: “xxxxxxxxx(备注:这里的具体值请自行填写,其他key对应的值也是一样)”,
“User-Agent”: “360xxxxxx(备注:这里的信息也请自行抓到之后填写,不需要的话,可以不用填写)”
}
2、http请求端口、cookie,以及实现具体的get和post请求
http请求端口默认是80,如果不指定的话,默认走的就是80,否则就需要指定服务器端指定listen的端口。
cookie是什么?具体见:http://www.cnblogs.com/hdtianfu/archive/2013/05/30/3108295.html, 主要内容:有两个Http头部和Cookie有关:Set-Cookie和Cookie。Set-Cookie由服务器发送,它包含在响应请求的头部中。它用于在客户端创建一个Cookie。Cookie头由客户端发送,包含在HTTP请求的头部中。注意,只有cookie的domain和path与请求的URL匹配才会发送这个cookie。