个人随手自学笔记--python3入门及基础知识点(5)—— 枚举、闭包、表达式、函数、装饰器、小爬虫
2018-08-03 17:47
871 查看
枚举
用法:
1. 定义枚举要导入enum模块
2.枚举定义用class关键字,继承Enum类
3.定义枚举时,成员名称不允许重复
4.如果枚举中存在相同值得成员是,在通过值获取枚举成员时,只能获取到第一个成员
5.取值用value,取名用name
[code]from enum import Enum class VIP(Enum): one = 1 two = 2 three = 3 four = 4 print(VIP.one.value) #输出1 print(VIP.one.name) #输出one
闭包
在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。
一般情况下,在我们认知当中,如果一个函数结束,函数的内部所有东西都会释放掉,还给内存,局部变量都会消失。但是闭包是一种特殊情况,如果外函数在结束的时候发现有自己的临时变量将来会在内部函数中用到,就把这个临时变量绑定给了内部函数,然后自己再结束。
[code]def f1(): a = 10 def f2(x): return a*x return f2 f = f1() print(f(2))# 20
[code] def f1(c): def f2(x): nonlocal c c = c + x return c return f2 f = f1(0) print(f(3)) //输出3 print(f(5)) //输出8 print(f(8)) //输出16
匿名函数 lambda
[code]f = lambda x,y : x+y print(f(1, 2))
三元表达式
条件为真时返回的结果 if 条件判断 else 条件为假时的返回结果
[code]x = 2 y = 3 r = x if x > y else y print(r)
map
[code] list_x = [1,2,3,4,5,6,7,8] list_y = [1,2,3,4,5,6,7,8] r = map(lambda x,y:x*x+x,list_x,list_y)//循环执行square方法对list_x列表 print(list(r))#[2,6,12,20,30,42,56,72]
reduce
连续计算
[code]from functools import reduce #连续计算,连续调用lambda list_x = ['1','2','3','4','5'] r = reduce(lambda x,y:x+y, list_x, 'aa') print(r) #输出aa12345
filter(过滤)
[code]list_x = [1,0,1,0,0,1] res = filter(lambda x: True if x==1 else False, list_x) print(list(res))
装饰器
[code]import time def decorator(func): def wrapper(*args,**kw): print(time.time()) func(*args,**kw) return wrapper @decorator def f1(func_name1,func_name2): print('this is a function'+ func_name1 + 'sss' + func_name2) f1('aaa','bbb') #输出1533288851.9578314 this is a functionaaasssbbb
小爬虫
明确目标
找到数据对应的网页
分析网页的结构找打数据所在的标签位置
模拟HTTP请求,想服务器发送这个请求,获取到服务器返回给我们的HTML
用正则表达式提取我们要的数据
[code]import re from urllib import request class Spider(): url = 'https://www.panda.tv/cate/kingglory?pdt=1.24.s1.55.40pcvf1piqr' root_pattern = r'<div class="video-info">([\s\S]*?)</div>' num_pattern = r'<span class="video-number">([\s\S]*?)</span>' name_pattern = r'</i>([\s\S]*?)</span>' ''' 利用模块爬取指定url的内容 ''' def __fetch_content(self): r = request.urlopen(Spider.url) htmls = r.read() return htmls ''' 利用正则提取内容 ''' def __analysis(self,htmls): new_htmls = re.findall(Spider.root_pattern, htmls) authors = [] for x in new_htmls: name = re.findall(Spider.name_pattern,x) num = re.findall(Spider.num_pattern,x) author = {'name':name,'num':num} authors.append(author) return authors ''' 精简内容 ''' def __refine(self,authors): l = lambda author:{ 'name':author['name'][0].strip(), 'num':author['num'][0] } return list(map(l,authors)) ''' 排序 ''' def __sort(self,authors): authors = sorted(authors,key=self.__sort_number,reverse=True) return authors def __sort_number(self,authors): r = re.findall('\d*',authors['num']) num = float(r[0]) if "万" in authors['num']: num *= 10000 return num ''' 展示 ''' def __show(self,info): for x in range(0,len(info)): print('NO.'+ str(x) + info[x]['name'] + '-----------' + info[x]['num']) ''' 入口 ''' def go(self): htmls = self.__fetch_content() htmls = str(htmls,encoding='utf-8') authors = self.__analysis(htmls) authors = self.__refine(authors) ret = self.__sort(authors) self.__show(ret) Spider = Spider() Spider.go()
Beautiful Soup Scrapy 爬虫框架
阅读更多
相关文章推荐
- python学习笔记之基础操作(七)函数闭包和装饰器
- python爬虫入门(1) 基础知识 ; 正则表达式 Re 模块
- Python零基础入门十九之爬虫基础知识
- Python爬虫学习笔记之基础知识
- Python基础知识——爬虫入门
- python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
- 零基础入门学习Python(21)--函数:lambda表达式
- python自学笔记(6)--Python函数式编程、函数的装饰器、递归
- python爬虫基础知识(二)--正则表达式
- Python入门笔记(18):Python函数(1):基础部分
- 函数:lambda表达式 - 零基础入门学习Python021
- python3爬虫之入门基础和正则表达式
- python3 入门 (三) 函数与lambda表达式、闭包
- [Python入门及进阶笔记]Python-基础-函数小结
- Python基础零碎知识小笔记《2017-10-07》(个人向)
- 零基础 入门学Python-学习笔记第一讲(基本知识)
- python基础知识-个人笔记
- [python自学笔记]正则表达式和爬虫案例
- Python自学笔记(一)(Python基础知识)
- 自学Python四 爬虫基础知识储备