文章目录

  • 一、类class
    • 1.Python类class
      • 属性
      • 方法
    • 2.类的构造方法__init__()
    • 3.每次执行一次类的属性+1
  • 二、模块
    • 1.内建模块
    • 2.第三方模块
    • 3.定义自己的模块
  • 三、装饰器wrapper:再不改变原来函数的基础上,给函数添加新的功能
    • 1.wrapper装饰器,检测函数运行时间
    • ==注意:到目前为止装饰器就只考过检测时间的题==
  • 四、面向对象
    • (1)面向对象三大特性
      • ==继承、封装、多态==
    • (2)isinstance()方法判断是否是这个类的对象
    • (3)判断数据类型
    • (4)attrbute:属性
      • ==这是一个面试题==
    • (4)__slots__方法:限制类的属性
    • (5)设置年龄限制
    • (6)设置年龄限制改良版本
    • (7)多态、鸭子类型
  • 五、正则表达式基础知识
    • 1.把字符串里面的数字换成大写的A
    • 2.用正则匹配出标签里面的内容(“中国”),其中class的类名是不确定的
    • 3.== 正则表达式转义 ==
    • 4.==findall结果无需加 group(),search()需要加group() ==提取
    • 5.match()和search()都是python中正则匹配函数,那这两个函数有何区别呢?
    • 6.爬取顶点小说

一、类class

类(class)
方法:类中定义函数
类的构造方法__init__()
实例变量
实例化:根据类生成对象的过程
继承

1.Python类class

属性

方法

# Myclass家族,但是这个家族只有一个人people
class Myclass:"""一个简简单单的实例"""i = 12345def people(self):return 'i love you'#实例化类
x = Myclass()  #家族名称
#访问类的属性和方法
print('Myclass 类的属性 i 为:',x.i)#家族名称x+物品名称i
print('Myclass 类的方法 people 为:',x.people())#家族名称x+人名people
结果:
Myclass 类的属性 i 为: 12345
Myclass 类的方法 people 为: i love you

2.类的构造方法__init__()

class Complex:def __init__(self,realpart,imagpart): #必须要有一个self参数self.r = realpartself.i = imagpart
x = Complex(3.0,-4.5)
print(x.r,x.i)结果:3.0 -4.5

3.每次执行一次类的属性+1

class Student:# 类属性num = 0# 构造函数def __init__(self,name,score):# self是对象# 对象属性,实例属性self.__name = nameself.__score = scoreStudent.num+=1stu1 = Student('柳宗元',100)
print(stu1.num)
stu1 = Student('杜甫',100)
print(stu1.num)结果:
1
2

二、模块

1.内建模块

1.内建模块
import time
import datetime
print(time.time())
print(chr(97))
print(ord('a'))import string
import os
import re
内建模块,内置模块
第一种方法
import string  #按住Ctrl点击鼠标左键就可以进入string内部
print(string.punctuation)结果:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~第二种方法
from string import punctuation
print(punctuation)结果:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~第三种方法
from string import punctuation as pt,whitespace as ws  #whitespace空白字符,punctuation特殊字符
(1.)string  挑出里面非特殊字符的
from string import punctuation as pt,whitespace as ws
strs = "et5j2%@#%$3qdsghd\nsf   hoi\tU(*%&te wt$*@(%^@$5u%@#$^ou"
lists = ''.join([x for x in strs if x not in pt+ws])
print(lists)结果:et5j23qdsghdsfhoiUtewt5uou(2.)os
import os
print(os.getcwd())  #可以知道当前打开文件的位置,结果:C:\Users\lenovo\Desktop\day\1023
print(os.path.isdir('test'))   #判断是否是一个文件夹,结果:False
print(os.path.isfile('test.py'))   #判断是否是一个文件,结果:False
print(os.listdir())   #打印出当前路径下的所有文件
print([x for x in os.listdir() if x.endswith('.py')])     #打印出当前路径下的所有以.py结尾的文件

2.第三方模块

2.第三方模块
(1.)汉字转拼音
pip install xpinyin #下载模块from xpinyin import Pinyin
p = Pinyin()
print(p.get_pinyin('中国',' '))
结果:zhong guo(2.)faker模拟生成数据
from faker import Faker
faker=Faker(locale="zh_CN")
for i in range(5):print(faker.name(),faker.phone_number(),faker.address(),faker.ssn(),faker.email())结果:
周玉兰 13637747391 山西省通辽县沙市乔路e座 545076 360828193505178193 yang06@example.com
蒋辉 15003654925 台湾省伟县蓟州廖路c座 191048 500000199804177602 ming14@example.net
黄海燕 15986887106 西藏自治区北京县友好李路V座 864844 222404197011287994 guiyingmo@example.net
何丹 13090055293 安徽省宁德市沙市郭路w座 404004 350681199011172476 junpan@example.org
庄帆 15621668361 甘肃省艳市淄川长沙路L座 766610 540221198001306779 minyuan@example.org

3.定义自己的模块

3.定义自己的模块
(1)
from aking.baby import Student
stu = Student()
stu.run()
stu.say_hello()from aking.baby import Student
Student.run()   #加了@classmethod,可以用类名直接调
Student.say_hello()baby.py
class Student():@classmethod  #把下面的函数转成类函数,转完之后就可以用类名直接调用def say_hello(self):print('hello!')@classmethod  #@后面是给函数直接加一个特性def run(self):print('i can run')(2)把斐波那契数列放到包里面
from aking.baby import Student
for i in Student.get_data(10):print(i)Python安装路径下建aking文件,里面写baby.py和__init__.py文件
baby.py
class Student():@classmethod  #把下面的函数转成类函数,转完之后就可以用类名直接调用def say_hello(self):print('hello!')@classmethod  #@后面是给函数直接加一个特性def run(self):print('i can run')@classmethoddef get_data(self,n):x = 0y = 1for i in range(n):x,y = y,x+yyield x
函数那块差的补上

三、装饰器wrapper:再不改变原来函数的基础上,给函数添加新的功能

1.wrapper装饰器,检测函数运行时间

def hello():print('one two three!')print(hello.__name__)#可以打印函数名,调用函数__name__这个属性,__name__这种叫做魔术方法,简单来说就是一类特殊方法结果:hello检测函数运行时间
import time
def hello():begin = time.time()time.sleep(3)print('one two three!')stop = time.time()print(stop-begin)
hello()  #调用结果:
one two three!
3.012659788131714两种方法结果一样
方法一
import time
def hello():time.sleep(3)print('one two three!')def log(func):  #参数func代表里面传入一个函数def wrapper(*args,**kwargs):begin = time.time()f = func(*args,**kwargs)  #实际上是调用stop = time.time()print(stop-begin)return freturn wrapper  #log返回的是wrapper,func相当于传入hello()这个函数,这个相当于log(hello),调用wrapper函数,log(hello)()   #log(hello)()这个相当于wrapper()结果:
one two three!
3.015314817428589方法二:简化方法一,加@log就可以,方法二相当于方法一
import time
def log(func):def wrapper(*args,**kwargs):   #wrapper装饰器begin = time.time()f = func(*args,**kwargs)stop = time.time()print(stop-begin)return freturn wrapper@log
def hello():time.sleep(3)print('one two three!')hello()结果:
one two three!
3.0092666149139404
注意:到目前为止装饰器就只考过检测时间的题

注意:到目前为止装饰器就只考过检测时间的题

四、面向对象

(1)面向对象三大特性

继承、封装、多态

(2)isinstance()方法判断是否是这个类的对象

class Dog():passclass YellowDog(Dog):passy = YellowDog()
x = Dog()
print(isinstance(y,YellowDog))  #结果:True
print(isinstance(y,Dog))      #结果:True
print(isinstance(x,YellowDog))    ##结果:False

(3)判断数据类型

print(isinstance([1,2,3],list))   ##结果:True

(4)attrbute:属性

这是一个面试题

这是一个面试题
hasattr(实例化对象,属性)#用于判断对象是否包含对应的属性,hasattr(object,name)object对象,name字符串属性名
setattr()#设定属性值,该属性不一定是存在的,setattr(object,name,value),object对象,name字符串,对象属性,value属性值
getattr()#用于返回一个对象属性值class Dog():passclass YellowDog(Dog):def __init__(self):self.x = 9
y = YellowDog()print(hasattr(y,'x'))  #询问实例化对象y里面有没有x这个属性,结果:True
setattr(y,'xx',20)   #对象、属性、绑定20
print(hasattr(y,'xx'))   #结果:True
print(getattr(y,'xx'))   #结果:20

(4)__slots__方法:限制类的属性

一、可以随便绑定属性和方法
class Student(object):pass
stu1 = Student()
stu1.age = 23
print(stu1.age)结果:23
二、怎么可以控制不让它绑定这些属性,或者只可以绑定我认为可以绑定的?可以用__slots__方法解决这个问题。
方法一
class Student(object):__slots__ = ('name','score','age')#没有的属性无法改变
stu1 = Student()
stu1.age = 23
print(stu1.age)stu1.address = '623766656655X'
print(stu1.address)  #结果:AttributeError: 'Student' object has no attribute 'address'方法二:有没有办法绕过__slots__方法?
解决方法:继承父类就可以修改class Student(object):__slots__ = ('name','score','age')class Student1(Student):passstu2 = Student1()
stu2.address = '623766656655X'
print(stu2.address)  #结果:623766656655X

(5)设置年龄限制

class Student:def set_age(self,age):if age>150 or age<0:raise ValueError('年龄不符合要求')  #人为报错else:self.__age = age   #设置年龄def show_age(self):print(self.__age)stu = Student()
stu.set_age(60)
stu.show_age()结果:60

(6)设置年龄限制改良版本

class Student:@property   #装饰器  这个叫告诉你绑定age这个属性def age(self):return self._age@age.setter   #装饰器,内部通过这种特殊的装饰器,可以设置他的属性限制,写法比较固定,@property和@age.setter是一个组合def age(self,value):if value>150 or value<0:raise ValueError('age在0~150之间')self._age = valuestu = Student()
stu.age = 60
print(stu.age)
结果:60注解版本
class Student:#假如只暴露age()函数,表示当前这个属性只允许读,不允许修改@property  #把age属性暴露出去,函数名字就是属性名字def age(self):return self._age@age.setter   #当前age属性允许修改(赋值),其实真正的属性是_agedef age(self,value):if value>150 or value<0:raise ValueError('age在0~150之间')self._age = valuestu = Student()
stu.age = 60    #age属性可以读也可以写
print(stu.age)
结果:60

(7)多态、鸭子类型

鸭子类型这块是固定死的,要接一个动物对象
def run_twice(animal):   #定义了一个函数,这里面将会传进来一个animal对象,然后这个对象将会被调用两次,调用的是run()方法animal.run()animal.run()
#而这就是一个开辟原则,可以添加开放,但是不允许你再修改了,而下面你可以添加更多的对象这个就体现了他的一个扩展性class Dog:   #定义Dog对象def run(self):print('dog is running')class Cat:def run(self):print('cat is running')dog1 = Dog()
cat1 = Cat()
run_twice(dog1)
run_twice(cat1)
#这里面你可以添加更多的类,我们所要关心的就是怎么把这个类写好,而不再去关心run_twice里面写的是什么东西
class Rabbit:def run(self):  #只要类下面定义了run(self)就可以传,只要有这个属性就行print('rabbit is jumpping')rabbit1 = Rabbit()
run_twice(rabbit1)结果:
dog is running
dog is running
cat is running
cat is running
rabbit is jumpping
rabbit is jumpping多态的修改原则
上面的内容你不可以动,你所要做的就是根据他给你的规则,去定义更多的类,生成更多的对象,这个就是一个多态的体现。
Python是一个动态语言,动态语言有更多的灵活性,只要能跑就可以传进来,不像是Java定了动物类,就必须传进来动物类的,Python哪怕是一个吸尘器,
只要他能动,有跑这个方法,就可以传进来用,这涉及到一个什么概念呢?有一个叫鸭子类型,在动态语言里面他才可以用,意思就是:
一个东西它看起来像鸭子,走起路来像鸭子,我们就可以把它当成鸭子来用,这就是动态语言的灵活性。后期再将单例模式,元类就是定义类的类,元类之所有用就是可以动态生成这些类,刷面试题的时候再讲,应付面试用的。

五、正则表达式基础知识

(通俗来说就是我制定的规则)作用:1.按照规则抽取东西,数据抽取。2.过滤、筛选。

import re
1.正则规则分成三部分
(1)一部分
\w 数字、字母、下划线、汉字
\s 空白字符
\d 数字
\D 非数字,其他相同,大写取反
. 代表除了换行之外的所有东西(2)二部分
+ 一个或多个
* 0个或多个(3)三部分
模式:分为贪婪和非贪婪(I.)
贪婪:省略不写是贪婪strs = "et25j%@#%$3qd____sghd\nsf   hoi\tU(*w%&te wSDFSDFt$*@(%^是个DFS帅哥@$5u%@#$^ou"
result = re.findall('\w+',strs)结果:['et25j', '3qd____sghd', 'sf', 'hoi', 'U', 'w', 'te', 'wSDFSDFt', '是个DFS帅哥', '5u', 'ou'](II.)
非贪婪:   ?strs = "et25j%@#%$3qd____sghd\nsf   hoi\tU(*w%&te wSDFSDFt$*@(%^是个DFS帅哥@$5u%@#$^ou"
result = re.findall('\w+?',strs)结果:['e', 't', '2', '5', 'j', '3', 'q', 'd', '_', '_', '_', '_', 's', 'strs = "et25j%@#%$3qd____sghd\nsf   hoi\tU(*w%&te wSDFSDFt$*@(%^是个DFS帅哥@$5u%@#$^ou"第一部分定制变化result = ''.join(re.findall('\w+',strs))  #剔除里面的特殊字符,取出数字字母下划线汉字
结果:et25j3qd____sghdsfhoiUwtewSDFSDFt是个DFS帅哥5uouresult = re.findall('\s+',strs) #取出空白字符
结果:['\n', '   ', '\t', ' ']result = re.findall('\d+',strs) #取出数字
结果:['25', '3', '5']result = re.findall('\D+',strs) #取出非数字,
结果:['et', 'j%@#%$', 'qd____sghd\nsf   hoi\tU(*w%&te wSDFSDFt$*@(%^是个DFS帅哥@$', 'u%@#$^ou']result = re.findall('[a-zA-Z]+',strs)  #取出字母,只要字母,自己指定规则,
结果:['et', 'j', 'qd', 'sghd', 'sf', 'hoi', 'U', 'w', 'te', 'wSDFSDFt', 'DFS', 'u', 'ou']result = re.findall('[a-zA-Z0-9]+',strs)  #取出数字字母
result = re.findall('[a-zA-Z\d]+',strs)  #取出数字字母
结果:['et25j', '3qd', 'sghd', 'sf', 'hoi', 'U', 'w', 'te', 'wSDFSDFt', 'DFS', '5u', 'ou']result = re.findall('[a-zA-Z\d%]+',strs)  #取出数字字母和%
结果:['et25j%', '%', '3qd', 'sghd', 'sf', 'hoi', 'U', 'w%', 'te', 'wSDFSDFt', '%', 'DFS', '5u%', 'ou']result = re.findall('[^a-zA-Z\d%]+',strs)  #不要数字字母和%,取反符号^
结果:['@#', '$', '____', '\n', '   ', '\t', '(*', '&', ' ', '$*@(', '^是个', '帅哥@$', '@#$^']result = re.findall('.*',strs)  #  .代表除了换行符外的所有东西
结果:['et25j%@#%$3qd____sghd', '', 'sf   hoi\tU(*w%&te wSDFSDFt$*@(%^是个DFS帅哥@$5u%@#$^ou', '']第二部分,+变化成为*result = re.findall('[^a-zA-Z\d%]*',strs)  #  *代表0个或多个,e不符合要求,但是*认为十符合要求0个,所以取它取个空的下来
结果:['', '', '', '', '', '', '@#', '', '$', '', '', '', '____', '', '', '', '', '\n', '', '',自己制定数量result = re.findall('\w{2,4}',strs)   #{2,4}取2个以上到4个的
结果:['et25', '3qd_', '___s', 'ghd', 'sf', 'hoi', 'te', 'wSDF', 'SDFt', '是个DF', 'S帅哥', '5u', 'ou']result = re.findall('\w{2,}',strs)   #{2,}取2个以上的
结果:['et25j', '3qd____sghd', 'sf', 'hoi', 'te', 'wSDFSDFt', '是个DFS帅哥', '5u', 'ou']result = re.findall('DFS(\w+)@\$5',strs)   #\$有特殊含义,需要转义,要帅哥两个汉字,它在DFS后面,@\$5前边
结果:['帅哥']result = re.findall('   (\w+)\tU',strs)
print(result)
结果:['hoi']

1.把字符串里面的数字换成大写的A


import re
strs = 'dgfsgsfg3214sfgsdh232dfg535'
result = re.sub('\d+?','A',strs)
print(result)结果:dgfsgsfgAAAAsfgsdhAAAdfgAAA

2.用正则匹配出标签里面的内容(“中国”),其中class的类名是不确定的

方法一
import re
source = '<div class="nam">中国</div>'
demo = re.compile('<div class="\w+">(\w+)</div>')
result = demo.findall(source)
print(result)结果:['中国']方法二
import re
str = '<div class="nam">中国</div>'
result = re.findall(r'<div class=".*">(.*?)</div>',str)
print(result)结果:['中国']方法三
re.complie是将正则表达式编译成一个对象,加快速度并重复使用
import re
title = "你好,hello,世界!"
res = re.compile(r'[\u4e00-\u9fa5]+')
result = res.findall(title)
print(result)结果:['你好', '世界']

3.== 正则表达式转义 ==

Python正则表达式前的 r 表示原生字符串(rawstring),该字符串声明了引号中的内容表示该内容的原始含义,避免了多次转义造成的反斜杠困扰。
关于反斜杠困扰:与多数编程语言相同,正则表达式中使用“\”作为转义字符,如果需要匹配文本中的字符“\”,在正则表达式中需要4个“\”,
首先,前2个“\”和后两个“\”在python解释器中分别转义成一个“\”,然后转义后的2个“\”在正则中被转义成一个“\”。#python解释器转义
string = "d:\\abc\\n"
print(string)   #结果:d:\abc\n#python解释器转义后,正则转义
import re
tran_string1 = re.match("d:\\\\",string).group()
print(tran_string1)  #结果:d:\#原生字符串表示不在需要解释器再转义,直接接受正则转义
tran_string2 = re.match(r"d:\\",string).group()
print(tran_string2)  #结果:d:\

4.==findall结果无需加 group(),search()需要加group() ==提取

import re
s = '<imng data-original="https://rpic.douyucdn.cn/appCovers/2016/11/13/124871_23424435_small.jpg"'\'src="https://rpic.douyucdn.cn/appCovers/2016/11/13/124871_23424435_small.jpg" style="display: incline;">'#re.findall在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表
#注意: match和search是匹配一次,findall匹配所有。
res = re.findall(r"https://.*?.jpg",s)[0]
print(res)结果:
https://rpic.douyucdn.cn/appCovers/2016/11/13/124871_23424435_small.jpg#re.search扫描整个字符串并返回第一个成功的匹配。匹配成功re.search方法返回一个匹配的对象,否则返回None。
res = re.search(r"https://.*?.jpg",s)
print(res.group())结果:
https://rpic.douyucdn.cn/appCovers/2016/11/13/124871_23424435_small.jpg

5.match()和search()都是python中正则匹配函数,那这两个函数有何区别呢?

(1)match()函数只检测re是不是在string的开始位置匹配,search()会扫描整个string查找匹配,也就是说match()只有在0位置匹配成功的话,
才有返回,如果不是开始位置匹配成功的话,match()就返回none。
import re
text = 'pythontab'
m = re.match(r"\w+",text)
if m:print(m.group(0))
else:print('not match')
结果:pythontabimport re
text = '@pythontab'
m = re.match(r'\w+',text)
if m:print(m.group(0))
else:print('not match')
结果:not match(2)search()会扫描整个字符串并返回第一个陈工的匹配
import re
text = 'pythontab'
m = re.search(r'\w+',text)
if m:print(m.group(0))
else:print('not match')
结果:pythontab
# 那这样呢?
import re
text = '@pythontab'
m = re.search(r'\w+',text)
if m:print(m.group(0))
else:print('not match')
结果:pythontab

6.爬取顶点小说

strs = """
<div class="l">
<h2>最近更新小说列表</h2>
<ul><li><span class="s1">[网游动漫]</span><span class="s2"><a href="https://www.23wx.cc/du/198/198378/" target="_blank">我在黄泉当教主</a></span><span class="s3"><a href="/du/198/198378/59319850.html" target="_blank">第四百八十八章 战斗</a></span><span class="s4">三百斤的微笑</span><span class="s5">10-23</span></li><li><span class="s1">[都市言情]</span><span class="s2"><a href="https://www.23wx.cc/du/211/211313/" target="_blank">香江新豪门</a></span><span class="s3"><a href="/du/211/211313/59319846.html" target="_blank">第479章 【大投资大计划】</a></span><span class="s4">任猪飞</span><span class="s5">10-23</span></li><li><span class="s1">[科幻小说]</span><span class="s2"><a href="https://www.23wx.cc/du/178/178185/" target="_blank">我成帝了金手指才来</a></span><span class="s3"><a href="/du/178/178185/59319845.html" target="_blank">第2083章 拿捏</a></span><span class="s4">天涯月照今</span><span class="s5">10-23</span></li><li><span class="s1">[玄幻魔法]</span><span class="s2"><a href="https://www.23wx.cc/du/210/210206/" target="_blank">大秦:我杀敌就能变强</a></span><span class="s3"><a href="/du/210/210206/59319844.html" target="_blank">第327章 分封,郡县</a></span><span class="s4">陈喵呜</span><span class="s5">10-23</span></li><li><span class="s1">[科幻小说]</span><span class="s2"><a href="https://www.23wx.cc/du/197/197947/" target="_blank">全球高武:刷怪成神,我打穿了人类禁区</a></span><span class="s3"><a href="/du/197/197947/59319842.html" target="_blank">第三百九十五章 国外</a></span><span class="s4">离歌啊</span><span class="s5">10-23</span></li><li><span class="s1">[玄幻魔法]</span><span class="s2"><a href="https://www.23wx.cc/du/190/190463/" target="_blank">我在精神病院学斩神</a></span><span class="s3"><a href="/du/190/190463/59319843.html" target="_blank">第1366章 「英灵」</a></span><span class="s4">三九音域</span><span class="s5">10-23</span></li><li><span class="s1">[玄幻魔法]</span><span class="s2"><a href="https://www.23wx.cc/du/229/229772/" target="_blank">大明:天下第一皇商</a></span><span class="s3"><a href="/du/229/229772/59319839.html" target="_blank">第104章 奇迹</a></span><span class="s4">月河倒影</span><span class="s5">10-23</span></li><li><span class="s1">[科幻小说]</span><span class="s2"><a href="https://www.23wx.cc/du/198/198247/" target="_blank">异维度游戏</a></span><span class="s3"><a href="/du/198/198247/59319838.html" target="_blank">第302章 “紫气东来”法诀</a></span><span class="s4">最终永恒</span><span class="s5">10-23</span></li><li><span class="s1">[女频小说]</span><span class="s2"><a href="https://www.23wx.cc/du/194/194865/" target="_blank">宠婚入骨</a></span><span class="s3"><a href="/du/194/194865/59319837.html" target="_blank">第 771 章:明城清欢(5)</a></span><span class="s4">妖妖逃之</span><span class="s5">10-23</span></li><li><span class="s1">[都市言情]</span><span class="s2"><a href="https://www.23wx.cc/du/108/108181/" target="_blank">特战之王</a></span><span class="s3"><a href="/du/108/108181/59319836.html" target="_blank">第四百八十三章:百分之八</a></span><span class="s4">小舞</span><span class="s5">10-23</span></li><li><span class="s1">[玄幻魔法]</span><span class="s2"><a href="https://www.23wx.cc/du/230/230002/" target="_blank">最强减命系统之生命主宰</a></span><span class="s3"><a href="/du/230/230002/59319835.html" target="_blank">第97章 秘境规则</a></span><span class="s4">白木香</span><span class="s5">10-23</span></li><li><span class="s1">[玄幻魔法]</span><span class="s2"><a href="https://www.23wx.cc/du/225/225287/" target="_blank">极品风流假太监</a></span><span class="s3"><a href="/du/225/225287/59319834.html" target="_blank">第291章 代理主簿</a></span><span class="s4">火王之王</span><span class="s5">10-23</span></li><li><span class="s1">[都市言情]</span><span class="s2"><a href="https://www.23wx.cc/du/67/67422/" target="_blank">女总裁的全能兵王</a></span><span class="s3"><a href="/du/67/67422/59319829.html" target="_blank">第5138章 谁忽悠谁</a></span><span class="s4">寂寞的舞者</span><span class="s5">10-23</span></li><li><span class="s1">[玄幻魔法]</span><span class="s2"><a href="https://www.23wx.cc/du/194/194937/" target="_blank">午夜跑腿员</a></span><span class="s3"><a href="/du/194/194937/59319827.html" target="_blank">第四百一十八章 破天主宰</a></span><span class="s4">若南五</span><span class="s5">10-23</span></li><li><span class="s1">[侦探推理]</span><span class="s2"><a href="https://www.23wx.cc/du/223/223596/" target="_blank">收尸档案</a></span><span class="s3"><a href="/du/223/223596/59319826.html" target="_blank">第108章:绿毛僵尸</a></span><span class="s4">张无忍</span><span class="s5">10-23</span></li><li><span class="s1">[玄幻魔法]</span><span class="s2"><a href="https://www.23wx.cc/du/230/230212/" target="_blank">绝品驸马爷</a></span><span class="s3"><a href="/du/230/230212/59319825.html" target="_blank">第131章 语出惊人</a></span><span class="s4">厌笔川</span><span class="s5">10-23</span></li><li><span class="s1">[都市言情]</span><span class="s2"><a href="https://www.23wx.cc/du/4/4626/" target="_blank">护花高手在都市</a></span><span class="s3"><a href="/du/4/4626/59319822.html" target="_blank">第2947章 就算是神的命也无常</a></span><span class="s4">心在流浪</span><span class="s5">10-23</span></li><li><span class="s1">[历史军事]</span><span class="s2"><a href="https://www.23wx.cc/du/41/41153/" target="_blank">花豹突击队</a></span><span class="s3"><a href="/du/41/41153/59319820.html" target="_blank">第五千九百五十章 不可避免</a></span><span class="s4">竹香书屋</span><span class="s5">10-23</span></li><li><span class="s1">[历史军事]</span><span class="s2"><a href="https://www.23wx.cc/du/190/190059/" target="_blank">长安之上</a></span><span class="s3"><a href="/du/190/190059/59319819.html" target="_blank">第973章 竟然如此不堪吗</a></span><span class="s4">迪巴拉爵士</span><span class="s5">10-23</span></li><li><span class="s1">[都市言情]</span><span class="s2"><a href="https://www.23wx.cc/du/193/193596/" target="_blank">我在1982有个家</a></span><span class="s3"><a href="/du/193/193596/59319818.html" target="_blank">番外2:合作边疆办冷库(上)</a></span><span class="s4">全金属弹壳</span><span class="s5">10-23</span></li><li><span class="s1">[玄幻魔法]</span><span class="s2"><a href="https://www.23wx.cc/du/176/176062/" target="_blank">极道武学修改器</a></span><span class="s3"><a href="/du/176/176062/59319817.html" target="_blank">第1337章 线索中断</a></span><span class="s4">南方的竹子</span><span class="s5">10-23</span></li></ul>
</div>
"""
result = re.findall('<li><span class="s1">\[(.*?)\]</span><span class="s2"><a href=".*?" target="_blank">(\w+)</a></span><span class="s3"><a href=".*?" target="_blank">(.*?)</a></span><span class="s4">(\w+)</span><span class="s5">(.*?)</span></li>.*?',strs)
# result = re.findall('<li><span class="s1">\[(.*?)\]</span><span class="s2"><a href=".*?" target="_blank">(\w+)</a></span><span class="s3"><a href=".*?" target="_blank">(.*?)</a></span><span class="s4">(\w+)</span><span class="s5">(\d{2}-\d{2})</span></li>.*?',strs)
#\[(.*?)\]需要转义,应为[]是正则里面制定规则的符号
for type,title,chapter,author,date in result:print(type,title,chapter,author,date)

1023day5:class类属性方法、每次执行类属性+1、内建模块、时间装饰器wrapper、面向对象__slots__方法:限制类的属性等基础知识、正则表达式基础知识、多态鸭子类型相关推荐

  1. Python|装饰器|执行时间|递归|动态属性|静态方法和类|继承和多态|isinstance类型判断|溢出|“魔法”方法|语言基础50课:学习记录(6)-函数的高级应用、面向对象编程、进阶及应用

    文章目录 系列目录 原项目地址: 第16课:函数的高级应用 装饰器(记录执行时间的例子) 递归调用 简单的总结 第17课:面向对象编程入门 类和对象 定义类 创建和使用对象 初始化方法 打印对象 面向 ...

  2. python 全栈开发,Day21(抽象类,接口类,多态,鸭子类型)

    一.昨日复习 派生方法和派生属性 super 只有在子父类拥有同名方法的时候, 想使用子类的对象调用父类的方法时,才使用super super在类内 : super().方法名(arg1,..) 指名 ...

  3. python 类装饰器 __set___python装饰器代替set get方法实例

    对于变量的访问和设置,我们可以使用get.set方法,如下: class student: def __init__(self,name): self.__name = name def get_na ...

  4. 这篇文章告诉你装饰器模式及其在Java IO类和MyBatis中的应用

    装饰器(Decorator)模式:指不改变现有对象结构的情况下,动态地给该对象增加额外功能. 一.装饰器模式介绍 装饰器模式允许向一个现有的对象添加新的功能,同时不改变其结果.比如Java 中的IO框 ...

  5. 对Python装饰器的个人理解方法

    在自己好好总结并对Python装饰器的执行过程进行分解之前,对于装饰器虽然理解它的基本工作方式,但对于存在复杂参数的装饰器(装饰器和函数本身都有参数),总是会感到很模糊,即使这会弄懂了,下一次也很快忘 ...

  6. python的标准类型内建模块有_python的常用内建模块与常用第三方模块

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 一.常用内置模块 1.datetime Python 提供了一个 time 和 calendar 模 ...

  7. python装饰器原理-简单了解python装饰器原理及使用方法

    这篇文章主要介绍了简单了解python装饰器原理及使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 如果你接触 Python 有一段时间了的话 ...

  8. python标准类型内建模块_Python内建模块struct实例详解

    本文研究的主要是Python内建模块struct的相关内容,具体如下. Python中变量的类型只有列表.元祖.字典.集合等高级抽象类型,并没有像c中定义了位.字节.整型等底层初级类型.因为Pytho ...

  9. 25 类:接口 抽象父类 多态 鸭子类型 格式化方法与析构方法 反射 异常处理 自定义异常 断言...

    面向对象与面向过程分析 # 清晰知道操作的功能,但不明确操作的具体对象 print(len('123')) # 清晰知道操作的对象,但不明确具体的操作方法 print('123'.__len__()) ...

最新文章

  1. 求难、求拙、求慢、求少
  2. php global变量无效
  3. MySQL 备份和恢复策略(二)
  4. 经典C语言程序100例之三二
  5. 挡土墙计算软件_广联达软件如何计算钢板止水带?
  6. ruby 数组元素替换_从Ruby中的集合中删除并替换元素
  7. tableau选择计算_举个栗子!Tableau 技巧(100):吸睛又直观的 四瓣花图 怎么实现?...
  8. 544. Top k Largest Numbers【medium】
  9. BIND rndc—使用说明
  10. hex文件分析+Qt5制作Hex文件转Bin文件的工具(含源码+工具下载)
  11. 推荐系统学习(一)--电影推荐系统搭建
  12. RT-Thread : IEEE1588/PTP 协议的实现(2)
  13. 谈判如何在谈判中_谈判工作的十大规则
  14. 计算机制图大赛,制图大赛简介
  15. Unity3D制作塔防类游戏
  16. URAL 1742 Team building 强联通
  17. 集合框架学习笔记(下)
  18. 前端调用第三方接口跨域问题(淘宝)
  19. 高德地图定位、添加定位图标、连线(一)
  20. 笔记本电脑远程另一台电脑(无网络)

热门文章

  1. 下载人脸认证助手_认证助手最新版app_认证助手怎样认证步骤_下载人脸认证助手-多特软件站安卓网...
  2. vue-动态加载图片
  3. 解决在高分辨率下运行Photoshop CS6,程序界面字体过小的问题
  4. 我是培训机构出身的程序员,不敢告诉任何人!
  5. 常用的PDF分割压缩软件有哪些?
  6. 除了知网、百度,还有什么查阅资料的网站或软件吗?
  7. 中兴JAVA直板手机_中兴(zte)L880智能手机(黑色 双卡双待 直板按键 老人机) 京东199元...
  8. 计算机c盘如何腾出空间,WIN8的C盘太大怎么清理腾出空间呢
  9. svn强制弹出账号密码对话框
  10. LeetCode 分类练习(四):查找2