xpath与lxml
xpath基本介绍
XPath(XML Path Language)是⼀种XML的查询语⾔,他能在XML树状结构中寻找节点。XPath ⽤于在 XML ⽂档中通过元素和属性进⾏导航
xml是⼀种标记语法的⽂本格式,xpath可以⽅便的定位xml中的元素和其中
的属性值。lxml是python中的⼀个第三⽅模块,它包含了将html⽂本转成
xml对象,和对对象执⾏xpath的功能
节点关系12345678910xml_content = ''' <bookstore> <book> <title lang='eng'>Harry Potter</title> <author>JK.Rowing</author> <year>2005</year> <price>29<price> </book> </boo ...
正则表达式
正则表达式正则表达式简介
概念
正则表达式是对字符串操作的⼀种逻辑公式,就是⽤事先定义好的⼀些特定字符、及这些特定字符的组合,组成⼀个“规则字符串”,这个“规则字符串”⽤来表达对字符串的⼀种过滤逻辑
应用
表单验证
爬虫
普通字符
字⺟、数字、汉字、下划线、以及没有特殊定义的符号,都是”普通字符”。正则 表达式中的普通字符,在匹配的时候,只匹配与⾃身相同的⼀个字符。 例如:表达式c,在匹配字符串abcde时,匹配结果是:成功;匹配到的内容 是c;匹配到的位置开始于2,结束于3。
match函数
match( pattern , string , flags =0)
第⼀个参数是正则表达式,如果匹配成功,则返回⼀个match对象,否则返 回⼀个None
第⼆个参数表示要匹配的字符串
第三个参数是标致位⽤于控制正则表达式的匹配⽅式 如: 是否区分⼤⼩写,多⾏匹配等
元字符
用来表示一些特殊含义或功能的字符
. 小数点可以匹配除了换行以外的任意字符
| 逻辑或操作字符
[] 匹配字符集
[^] 取反操作
-定义[]里面的一个字符区间如[a-z]
\ 对紧跟其后的一个字符进行转义 ...
爬虫模块
爬虫模块简单案例
requests模块
123456789import requestsurl = 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1602605452394&di=ec07c6bdbd32e07fb5b1d1f90028e35f&imgtype=0&src=http%3A%2F%2Fa3.att.hudong.com%2F14%2F75%2F01300000164186121366756803686.jpg'req = requests.get(url)fn = open('code.png','wb')fn.write(req.content)fn.close()
request
12345from urllib import requesturl = 'https://timgsa.baidu.com/timg?image&quality=80 ...
爬虫简介
端口
通讯过程
获取IP
数据发送到对方指定应用程序,为识别程序,对网络应用程序用数字进行标识,为了方便称呼这个数字,取名为端口,这里的端口我们一般叫做逻辑端口
通讯,定义通讯规则,这个通讯规则我们称之为协议
通讯协议
国际组织定义通用的通信协议TCP/IP协议
协议就是指计算机通讯网络中,两台计算机之间进行通信所必须共同遵守的规定或规则
HTTP叫做超文本传输协议 HTTP端口为80
网络模型
数据封包:应用层→表示层→会话层→传输层→网络层→数据链路层→物理层
数据拆包:物理层→数据链路层→网络层→传输层→会话层→表示层→应用层
应用层:为数据添加独有的应用特征(数据封装)
表示层:添加表现形式,继续封装
会话层:继续封装
传输层:TCP/IP封装
网络层:IP地址
数据链路层:定义在单个链路上如何传输数据,功能:帧编码和误差纠正控制
物理层:为传输数据所需要的物理链路创建、维持、拆除,而提供具有机械的,电子的,功能的和规范的特性,物理层确保原始的数据可在各种物理媒体上传输
TCP/IP参考模型
应用层 表示层 会话层 统一为 应用层(http ssl)
传输层 ...
异常和文件
异常异常简介
程序在运行过程中可能会出现一些错误。比如: 使用了不存在的索引,两个不同类型的数据相加….这些错误我们称之为异常
处理异常 程序运行时出现异常,目的并不是让我们的程序直接终止!Python是希望在出现异常时,我们可以编写代码来对异常进行处理
异常的传播
当在函数中出现异常时,如果在函数中对异常进行了处理,则异常不会在进行传播。如果函数中没有对异常进行处理,则异常会继续向函数调用传播。如果函数调用处处理了异常,则不再传播异常,如果没有处理则继续向调用处传播。直到传递到全局作用域(主模块)如果依然没有处理,则程序终止,并显示异常信息
当程序运行过程中出现异常以后,所有异常信息会保存到一个异常对象中。而异常传播时,实际上就是异常对象抛给了调用处
try语句
try:
代码块
except:
代码块(出错后的处理方式)
else:
代码块(没有出错,我要执行的语句)
12345# try语句try: print(python)except: print('出错了!
异常对象
1234567try: ...
module
模块
模块化:将一个完整的程序分成一个个小模块
优点
方便开发与维护
复用性
1print('这是一个模块')
123import test这是一个模块
多次导入模块只能有一次结果
print模块会显示路径
123456import testprint(test)这是一个模块<module 'test' from 'C:\\Users\\XXX\\PycharmProjects\\untitled1\\python\\模块\\test.py'>
可以对模块重命名
123456import test as tprint(t)这是一个模块<module 'test' from 'C:\\Users\\殷少轩\\PycharmProjects\\untitled1\\python\\模块\\test.py'>
调用模块内容
12a = 1b = 2
1234567import test as tpri ...
面向对象
面向对象面向对象简介
Python是一门面向对象的编程语言
所谓面向对象的语言,就是语言中所有操作都是通过对象来进行的
面向过程:
将程序分解为一个个步骤,通过每个步骤的抽象来完成程序
这种编写方式旺旺只适用于一个功能,如果要实现别的功能,复用性比较低
这种变成方式符合人类思维,编写起来比较容易
面向对象的编程语言,关注的是对象忙不注重过程,对于面向对象一切皆对象
面向对象的变成思维,将所有功能同意保存到对应的对象中,要是用某个功能,直接找到对应的对象
这种编码方式比较容易阅读,并且依云维护,容易复用,但编写的过程中不太符合常规思维,相对麻烦
三大特性
封装 确保对象中的数据的安全
继承 保证对象的扩展性
多态 保证程序灵活性
类
class
我们目前学习的都是Python的内置对象,但是内置对象并不都能满足我们的需求,所以,我们在开发中经常要自定义一些对象
类 就相当于一个图纸,在程序汇总我们需要根据类来创建对象
类 就是对象的图纸
我们也称对象是类的实例(instance)
如果多个对象是通过一个类创建的,我们称这些对象是一类对象
12345a = 123b = ...
菱形图形输出
使用循环输出下面图形
123456789 * *** ***** **************** ******* ***** *** *
1234567891011121314151617for i in range(1,10,2): #正序输出 b = '*' * i b=b.center(9) print(b)#for j in range(7,0,-2):# c = '*' * j# c = c.center(9)# print(c)for j in reversed(range(1,8,2)): #反序输出 c = '*' * j c = c.center(9) print(c)#for j in range(1,8,2)[::-1]:# c = '*' * j# c = c.center(9)# print(c)
三种反序手法,可以任选一种
123456789 * ...
学生名字判断及随机获取打扫卫生的学生
从键盘中输入5个学生的名字,存储到列表中,然后打印出每个学生名字中的第2个字母
从键盘获取5个学生的名字,然后随机抽出一名学生去打扫卫生
1234567891011121314import randoma = [] #学生列表while len(a) < 5: b = input('请输入第 %d 学生的名字:'%(len(a)+1)) if len(b) < 2 : #判断名字长度是否大于2 print('名字不符合要求') continue a.append(b) #输入学生名字并储存到列表中for index,items in enumerate(a): print('第 %d 学生名字为:'%(index+1),items) #输出学生名字 print('第 %d 学生名字中的第2个字 ...
函数
函数(一)函数简介
是一个对象
用来保存可执行的代码,并且可以再需要时,进行多次调用
函数保存的代码不能立即执行,需要调用的时候才会执行
语法
12def 函数名([形参1,形参2......]): 代码块
12345def a(): print('三三不得酒吖')a()三三不得酒吖
函数的参数形参
定义形参就相当于在函数内部生命了变量,并不是赋值
实参
若函数制定了形参,那么在调用函数式必须传递实参,实参将赋值给对应的形参,有几个形参就有几个实参
123456def fn(a,b): print(a+b)fn(1,2)3
参数传递方式
定义形参时,可以为形参指定默认值,指定默认值后,如果传参,则默认值不生效,若没有传参,则默认值生效
12345678910def fn(a,b,c=10): print('a=',a) print('b=',b) print('c=',c)fn(1,2)a= 1b= 2c= 10
12345678910def fn(a,b ...