python
2023-03-20 18:26:15 0 举报
AI智能生成
登录查看完整内容
python基础
作者其他创作
大纲/内容
变量的命名与赋值
数据类型转换
运算符
if分支语句
循环1(while循环)
子主题
循环2(for循环)
字符串是python中最常用的数据类型。我们可以使用引号( '或\" )来创建字符串。创建字符串只要为变量分配一个值即可
字符串的定义
格式化输出
字符串的输入与输出
索引是从0开始
下标(索引)
切片是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作
注意:左闭右开,正负整数均可
步长是选取间隔,正负整数均可,默认步长为1
切片
检测某个字符串是否含在这个字符串中,若在,返回这个字符串开始的位置下标,否则返回-1
语法:字符串序列.find(子串,开始位置下标,结束位置下标)
注意:开始和结束位置下标可以省略,表示在整个字符串序列中查找
find()
检测某个子串是否包含在这个字符串中,若在返回这个字符串的位置下标,否则报错异常
语法:字符串序列.index(子串,开始位置下标,结束位置下标)
注意:开始和结束位置下标可以省略,表示在整个字符串序列中查找
index()
返回某个子串在字符串中出现的次数
语法:字符串序列.count(子串,开始位置下标,结束位置下标)
注意:与find、index一样
count()
和find()功能相同,但查找⽅向为右侧开始
rfind()
和index()功能相同,但查找⽅向为右侧开始。
rindex()
查
替换内容(默认是全部替换)
语法:字符串序列.replace(旧子串,新子串,替换次数)
注意:替换次数若超出子串出现次数,则替换次数为该子串出现次数
注意:数据按照是否能直接修改分为**可变类型**和不**可变类型**两种。字符串类型的数据修改的时候不能改变原有字符串,属于不能直接修改数据的类型即是不可变类型
replace()
按照指定字符串分割字符串,返回一个列表
语法:字符串序列.split(分割符,分割次数)
split()
用一个字符串或子串合并字符串,即是将多个字符串合并为一个新的字符串.(将序列类型转换为字符串类型)
语法:字符或子串.join(多字符串组成的序列)
join()
将字符串第一个字符转换成大写
capitalize()
将字符串每个单词首字母转换成大写
title()
将字符串中小写转大写
upper()
将字符串中大写转小写
lower()
L 是左
删除字符串左侧空白字符
lstrip()
R是右
删除字符串右侧空白字符
rstrip()
删除字符串两侧空白字符
strip()
L是左
左对齐
ljust()
右对齐
rjust()
居中对齐
center()
改
检查字符串是否是以指定字符串开头
语法:字符串序列.startswith(子串,开始位置下标,结束位置下标)
startswith()
检查字符串是否是以指定字符串结尾
endswith()
若字符串中只包含字母,则返回True,否则返回False
isalpha()
若字符串中只包含数字,则返回True,否则返回false
isdigit()
若字符串中只包含字母与数字,则返回True,否则返回False
isalnum()
若字符串中只包含空白,则返回True,否则返回False
isspace()
判
常用操作方法
字符串操作(str)
列表可以一次性储蓄多个,且可以为不同数据类型
索引—根据下标查找print(self[0])
返回查找字符串的下标
注意:若查找数据不在列表当中会报错
返回指定数据在当前列表中出现的次数
访问列表长度,即列表中数据的个数
语法:len(列表序列)
len()
函数
判断指定数据在某个列表序列,若在返回True,否则返回False
in
判断指定数据不在某个列表序列,若不在返回True,否则返回False
not in
in与not in
查---
增加指定数据到列表中(追加结尾)
语法:列表序列.append(数据)
注意:若append()追加的数据是一个序列,则追加整个序列到列表
append()
若添加一个序列,则会将序列里面每一个元素添加进去
注意:列表结尾追加数据,若数据是一个字符串,则将这个字符串的数据逐一添加到列表
extend()
指定位置新增数据
语法:列表序列.insert(位置下标,数据)
注意:写谁的索引,数据就在谁的前面添加
insert()
增---
删除整个列表
语法:del 列表序列[位置下标]---多项删除 [起始下标:结束下标:步长]
del
删除指定下标的数据(默认为最后一个),并返回该数据
pop()
移除列表中某个数据的第一个匹配项
remove()
清空列表
clear()
删---
索引 替换
语法:列表序列[位置下标] = ' 数据 '
直接修改
逆置
reverse()
排序
语法:列表序列.sort(reverse = False)
注意:reverse表示排序规则,reverse = True降序,reverse = False升序(默认)
sort()
复制
copy()
改---
列表的常用操作
for循环
while循环
依次打印列表中的各个数据
列表的循环遍历
所谓列表嵌套指的就是一个列表里面包含了其他的子列表
列表嵌套
列表的应用场景
列表list
定义元组使用小括号,且逗号隔开各个数据,数据可以是不同的数据类型
定义元组
索引
查找某个数据,若数据存在返回对应的下标,否则报错,语法和列表、字符串的index方法相同
访问元组的长度,统计元祖中数据的个数
元组内的直接数据若修改则立即报错
若元组里面有列表,修改列表里面的数据则是支持的
注意:元组的修改可以转化为列表,进行修改
元组的常见操作
元组的应用场景
元组tuple
列表与元祖
集合的特点:无序性 与 不重复性
创建集合
因为集合有去去重功能,所以,当向集合内追加的数据是当前集合已有数据的话,则不进行任何操作
add()
追加的数据是序列
update()
增
删除集合中的指定数据,若数据不存在则报错
删除集合中的指定数据,若数据不存在也不会报错
discard()
随机删除集合的某个数据,并返回这个数据
清空集合
删
判断数据在集合序列
判断数据不在集合序列
not in
集合常见操作方法
集合set
字典里面的数据是以键值对形式出现,字典数据和数据顺序没有关系,即字典不支持下标,后期无论数据如何变化,只需要按照对应的键的名字查找数据即可
字典的应用场景
符号为大括号
数据为键值对形式出现
各个键值对之间用逗号隔开
创建字典
写法:字典序列[key]=值
注意:若key存在则修改这个key对应的值,若key不存在则新增此键值对
删除字典或删除字典中指定键值对
del() / del
清空字典
注意:若键不存在,则返回默认值None,若键后面给了默认值,则返回所给值
get()
查找所有的键
keys()
查找所有的值
values()
查找所以的键值对
items()
字典常见操作
遍历字典中的key
遍历字典中的values
遍历字典中的元素
字典的循环遍历
字典(dict)
集合与字典
支持容器类型:字符串、列表、元组
合并
+
*
支持容器类型:字符串、列表、元组、字典、集合
是否存在
是否不存在
计算容器中元素个数
删除
del 或 del()
返回容器中元素最大值
max()
返回容器中元素最小值
min()
生成从start到end的数字,步长为step,供for循环使用
函数用于将一个可遍历对象(如列表,元素或字符串)组合为一个索引序列,同时列出数据下标,一般用在for循环当中
enumerate()
序列求和
sum()
合并序列
zip()
公共方法
公共操作
例子:创建一个空列表,追加1到10这几个数据
{表达式 for 变量 in 列表 if 条件}
例子:将1到10的偶数添加到列表
带if的列表推导式
列表推导式
{键:值 for 变量 in 字典 if 条件}
创建一个字典:字典key是1-5数字,value是这个数字的2次方
将两个列表变为一个字典
字典推导式
集合推导式
生成含义1到9数字的元组
元组推导式
推导式
公共操作与推导式
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段
函数能提高应用的模块,和代码的重复利用率。你已经知道python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
定义
函数代码块以def关键词开头,后接函数标识符名称和圆括号()
任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数
函数的第一行语句可以选择性地使用文档字符串一用于存放函数说明
函数内容以冒号起始,并且缩进
return(表达式)结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回None
注意:函数若不调用,他不会执行
定义一个函数
定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构
函数必须调用才会进行执行
不同的需求,参数可有可无
在python中函数必须先定义后使用
函数的调用
函数的使用步骤
必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。调用demo()函数,你必须传入一个参数,不然会出现语法错误:
例子:一个函数完成两个数1和2的加法运算,如何书写程序
必备参数
关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值
关键字参数
调用函数时,默认参数的如果没有传入,则被认为是默认值。
默认参数
python自定义函数中有两种不定长参数,第一种是*XXX,在传入额外的参数时可以不用指明参数名,直接传入参数值即可。第二种是**XXX,这种类型返回是字典,传入时需要指定参数名。
加了一个星号*不定长参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。加了两个星号的参数会以字典的形式导入,存放已命名的变量参数
注意:加了两个星号的参数,导入的参数键不用加引号
不定长参数
函数的参数(args)作用
return语句表达式退出函数
函数的返回值(return)作用
一个程序的所有的变量并不是在哪个位置都可以访问的,访问权限决定与这个变量是在哪里赋值的。
变量的作用域决定了在哪一部分程序哪个特定的变量名称
全局变量
局部变量
声明全局变量
global
变量作业域
所谓函数嵌套调⽤指的是⼀个函数⾥⾯⼜调⽤了另外⼀个函数
函数的嵌套使用
函数入门
定义全局变量--->修改全局变量--->调用函数中修改后的全局变量
共用全局变量
返回值作为参数传递
多函数程序执行流程
拆包-元组
函数返回多个值
交换变量
拆包和交换变量值
函数内部自己调用自己
必须有出口
递归必须有停止条件
递归必须改变其状态并向停止条件靠近
递归必须递归地调用自己
递归三原则:
递归
若一个函数有一个返回值,并且只有一句代码,可以使用lambda简化
语法:(lambda 参数 : 返回值)(传参)
lambda表达式的参数可有可无有,函数的参数在lambda表达是中完全适用
lambda函数能接收任何数量的参数 但只能返回一个表达式的值
注意:
lambda表达式
无参数
一个参数
待判断l的lambda
列表数据按字典key的值排序
lambda的参数形式
abs()函数可以完成对数字求绝对值计算
abs()
function --- 函数
iterable --- 序列
fifilter()
高阶函数
函数进阶
文件操作包含:打开、关闭、读、写、复制.....
文件操作的作用是:读取内容、写入内容、备份内容......
文件操作的作用
打开文件--->读写等操作--->关闭文件
name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)
mode:设置打开文件的模式(访问模式):只读、写入、追加等
打开
文件操作的基本步骤打开文件
追加
a
添加(覆盖)
w
注意:w和a模式:如果文件不存在则创建该文件;如果文件存在,w模式先清空在写入,a模式直接末尾追加
添加数据
write()
关闭文件
close()
写入操作
读取
r
读取文件内容,返回文件内容
read(num)
num:表示要从文件中读取的数据的长度
上下文管理器
readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素
readline可以读取文件的一行
readlines()和readline()
作用:用来移动文件指针
0:文件开头
1:当前位置
2:文件结尾
起始位置
seek()
读取操作
需求:用户输入当前目录下任意文件名,程序完成对该文件的备份功能(备份文件名为xx[备份]后缀,例如:test[备份].txt)
2、组织备份的文件名,xx[备份]后缀
步骤:1、接收用户输入的文件名--->2、规划备份文件名--->3、备份文件写入数据
1、提取目标文件后缀
接收用户输入目标文件名
备份文件写入数据
代码实现
文件备份
文件对像方法
重名文件名
os.rename()
删除文件
os.remove()
创建文件夹
os.mkdir()
删除文件夹
os.rmdir()
获取当前目录
os.getcwd()
改变默认目录
os.chdir()
获取目录列表
os.listdir()
判断文件夹是否存在
导入os模块
文件和文件夹的操作
批量重命名
文件操作
理解面向对象
类是对一系列具有相同特征和行为的事物的统称,是一个抽象的概念,不是真实存在的事物
特征即使属性
行为即使方法
类
对象是类创建出来的真实存在的事物,例如手机
注意:开发中,先有类,再有对象
对象
类和对象的关系:运用类去创建一个对象
理解类和对象
类和对象
语法:class 类名():
注意:类名要满足标识符规则,同时遵循驼峰命名习惯
面向对象实现方法
语法:变量名=类名()
创建对象的过程也叫实例化对象
self代表类的实例
类的方法与普通的函数只有一个特别的区别——他们必须有一个额外的第一个参数名称,按照惯例它的名称是self
self
创建对象
语法:对象名.属性名=值
类外面添加对象属性
语法:self.属性名
类里面获取对象属性
添加和获取对象属性
__xx__()的函数叫做魔术方法,指的是具有特殊功能的函数
初始化对象
__init__()方法,在创建一个对象是默认被调用,不需要手动调用
__init__(self)中的self参数,不需要开发者传递,python解释器会自动把当前的对象引用传递过去
类的传参
__init__()
当使用print输出对象的时候,默认打印对象的内存地址。若类定义类str方法,那么就会打印从在这个方法中return的数据
__str__()
当删除对象时,python解释器也会默认用__del__()方法。在对象销毁的时候这调用,当对象不再被使用时,__del__()方法运行:
__del__()
魔术方法
__private attrs:两个下划线开头,声明该属性为自私,不能在类的外部被使用或直接访问
类的私有属性
类属性与方法
面向对象
在python中,所有类默认继承object类,object类是顶级类或基类;其他子类叫做派生类
object 类
单继承
当要继承多个时,需要使用不同父类功能就得在子类里加 父类.__init__(self)
若没加父类.__init__(self),则只能使用前一个的父类功能
所谓多继承意思就是一个类同时继承类多个父类
多继承
子类重写父类方法和属性
子类调用父类的方法和属性
多层继承
super()可以表示继承里所有的父类,但它在函数__init__()里面,只能使用继承排在面第一的父类,当选择后面父类的则会报错
super()
继承的概念
在python中,可以为实例属性和方法设置私有权限,即设置某个实例属性或实例方法不继承给子类
设置私有权限的方法:在属性名和方法名前面加上两个下划线 '__'
定义定义私有属性和方法
获取和修改私有属性值
私有权限
将数据(属性)和行为(方法)包装到类对象中。在方法内部对属性进行操作,在类对象的外部调用方法。这样,无需关心方法内部的具体实现细节,从而隔离类复杂度
在python中没有专门的修饰符用于属性的私有,如果该属性不希望在类对象外部被访问,前边使用两个“_”
封装:提高程序的安全性
封装
继承:提高代码的复用性
继承
多态指的是一类事物有多种形态
多态:提高程序的可扩展性和可维护性
多态
类属性就是类对象所拥有的属性,它被该类的所有实例对象所共有
类属性可以使用 类对象 或 实例对象 访问
类属性只能通过类对象修改,不能通过实例对象修改,若通过实例对象修改类属性,表示的是创建了一个实例属性
修改类属性
类属性和实例属性
需要用装饰器@classmethod来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数
装饰器相当于外挂
当方法中既不需要使用实例对象(如实例对象,实例属性),也不需要使用对象(如类属性、类方法、创建实例等)时,定义静态方法
取消不需要的参数传递,有利于减少不必要的内存占用和性能消耗
静态函数里不能加self,因此里面不能调用其他类方法,类属性
静态方法
类方法和静态方法
面向对象的三大特征
面向对象的特性
内层函数对外层函数的局部变量的使用,内层函数被称为闭包函数
闭指的是:该函数的内部函数
包指的是:内部函数在外部被引用
闭包的结构
1、函数嵌套
2、外部函数返回这个函数名
3、内部函数使用外部函数的变量
构成条件
实现
保证数据安全
闭包
定义:装饰器是python的一个重要部分。简单地说:他们是不改变函数功能的基础上,给函数增加一些功能。他们有助于我们的代码更简短,也更有范儿
1、函数可以作为参数进行传递
装饰器的本质是一个闭包
装饰器
__iter__()
iter()
__next__()
next()
迭代器与课迭代对象
迭代器
生成器函数中有一个关键字yield
生成器函数执行的时候,并不会执行函数,得到的是生成器
只要函数中出现了yield,那他就是生成器函数
他是分段执行函数的内容,通过next,执行到下一个yield的位置
创建生成器的方案
生成器的本质就是迭代器
生成器
一闭三器
当检测到一个错误时,解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的“异常”
python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误。你可以使用该功能来调试python程序
语法异常不能捕获
try: except:
归类
常见的异常
异常即使一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行
一般情况下,在python无法正常处理程序时就会发生一个异常
异常是python对象,表示一个错误
当python脚本发生异常时我们需要捕获处理它,否则程序会终止执行
什么是异常
捕获异常
捕获多个异常
异常处理
else表示的是若没有异常要执行的代码
异常的else
finally表示的是无论是否异常都要执行的代码,例如关闭文件
异常的finally
自定义异常类,必须要继承Exception,并且包含init和str魔术方法(设置异常描述)
在python中,抛出自定义异常的语法为raise异常类对象
自定义异常
从返回浮点数的时间戳方式向时间元祖转换,只要将浮点数传递给如localtime之类的函数
获取当前时间
获取格式化的时间
时间戳time.time()
延长运行
sleep()
返回所有日期
localtime()
提取需要的时间
strftime(\" \
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(0000-9999)
年
%m 月份(01-12)
月
%d 月内中的一天(0-31)
日
%H 24小时制小时数(0-23)
%I 12小时制小时数(0-12)
时
%M 分钟数(00-59)
分
%S 秒数(00-59)
秒
格式化日期
时间模块time
处理年历和月历
calendar 模块
获取某月日历
文件:My_module.py
在python中,每个python文件都可以作为一个模块,模块的名字就是文件的名字。也就是说自定义模块必须要符合标识符命名规则
账号
username
密码
password
如果一个模块文件中有__all__变量,当使用from xxx import * 导入时,只能导入这个列表中的元素。
__all__ = ['元素']
制造模块
文件夹==包
[New] — [Python package] —输入包名— [OK] —新建功能模块(有联系的模块)
语法:import 包名.模块名
注意:必须在__init__.py 文件中添加__all__ = [] .控制允许导入的模块列表。
语法2:from 包名 import *
给模块取个小名
as
制作包
模块
异常处理与debug
定义:网络爬虫也叫网络蜘蛛,特指一类制动批量下载网络资源的程序,这是一个比较口语化的定义。更加专业和全面的定义是:网络爬虫是伪装成客户端与服务端进行数据交互的程序
作用:数据采集、搜索引擎、模拟操作
通用爬虫:搜索引擎的重要组成成分
聚焦爬虫:建立在通用爬虫的基础上,抓取页面当中制定的数据
分类
爬虫的概念
计算机之间也是需要一种规则,保障之间信息的有效交流,这就是HTTP协议
HTTP协议
robots协议---君子协议
HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议。是以明文的方式在网络当中传递数据。目前互联网上90%的网络传输都是基于http协议
http
https
概论:
简单快速:客户向服务器请求服务是,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快
灵活:HTTP允许传输任意类型的数据对象。正在传输的类型有Content-Type加以标记
http(端口为80)
内容加密建立一个信息安全通道,来保证数据传输的安全
身份认证确认网站的真实性
数据完整性防止内容被第三方冒充或者篡改
https(端口为443)
特点:
概论及特点
HTTP与HTTPS
第一次握手:建立连接时,客户端发送syn包(syn=x)到服务器,并进人SYN_SENT状态,等待服务器确认;SYN:同步序列序列编号(Synchronize Sequence Numbers)
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进人SYN_RECV状态
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进人ESTABLISHED(TCP连接成功)状态,完成三次握手
三次握手(创建连接)
第一次挥手:客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。TCP规定,FIN报文段即使不携带数据,也要消耗一个序号
第二次挥手:服务器收到连接释放报文,发出确认报文,ACK=1,ack=u=1,并且带上自己的序列号seq=v,此时,服务端就进人了CLOSE-WALT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WALT状态持续的时间
第三次挥手:服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假设此时的序列号为sep=w,此时,服务器就进人了LAST-ACK(最后确认)状态,等待客户端的确认
第四次挥手:客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2**MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进人CLOSED状态。
四次挥手(断开连接)
三次握手:就是在前端发送请求报文之前,确定一下是不是双方都“在线”
四次挥手:就是在后端发送完毕响应之后,双方告知一下纷纷“下线”
三次握手,四次挥手
发送http请求时,通过URL对网络资源进行定位
URL(Uniform Resource Locator),中文叫统一资源定位符。是用来标识某一处资源的地址。
URL就是我们常说的网址
认识url
1、主要是负责从服务器获取数据
2、URL中添加请求参数,显示在地址栏
3、请求字符串限制1024个字节 , 比post更加高效和方便
GET
1、主要负责向服务器提交数据
2、没有大小限制 ,比‘GET’传递数据量大,安全性高
POST
常用方法
请求行
定义:请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息,
User-Agent:产生请求的浏览器类型;
referer:防盗链,页面跳转处,表明产生请求的网页来自哪个URL,告诉服务器我是从哪个链接过来的
Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机
Cookie:存储于客户端扩展字段,向同一域名的服务端发送属于该域的cookie
Accept:客户端可识别的响应内容类型列表;星号“*”用于按范围将类型分组,用“/”指示可接受全部类型,用“type/*”指示可接受type类型的所有子类型
Accept-Language:客户端可接受的自然语言
展开
典型的请求头有:
请求头
最后一个请求头之后是一个空行,发送回车符合换行符,通知服务器以下不再有请求头
空行
请求体不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求体相关的最常使用的是包体类型Content-Type和包体长度Content-Length
请求体
状态行有HTTP协议版本、状态码和状态码的描述文本3个部分组成,他们之间使用空格隔开
由三位数字组成,第一位数字表示响应的类型,常用的状态码有五大类如下所示
表示服务器已接收了客户端请求,客户端可继续发送请求
1xx
表示服务器已成功接收到请求并进行处理
2xx
表示服务器要求客户端重定向
3xx
表示客户端的请求有非法内容
4xx
表示服务器未能正常处理客户端的请求而出现意外错误
5xx
状态码
状态行
HTTP请求格式
指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)
cookie 可以理解为存储在客户端一个凭证
Cookie(或Cookies)
SessionID可以理解为保存在服务器的凭证
一般Session会在浏览器被关闭时丢弃
Session
概念
会话技术
认识爬虫
HTML的英文全称是Hyper Text Markup Language,即超文本标记语言
定义:
HTML标题是通过<h1>-<h6>标签来定义的
HTML标题
HTML 段落是通过标签<p>来定义的
HTML 段落
HTML 连接是通过标签<a>来定义的
href=“https://xxx.com”
使链接打开另外窗口
target=\"_blank\"
HTML 链接
HTML 图像是通过标签<img>来定义的
src=\"图片地址\"
width=“”
height=“”
<br>
换行
HTML 图像
HTML基础
HTML元素可以设置属性
属性可以在元素中添加附加信息
属性一般描述与开始标签
属性总是以名称/值对的形式出现,如:name=“value”
定义元素的唯一id
id
为HTML元素定义一个或多个类名(classname)(类名从样式文件引入)
class
定义粗体文本
<b>
定义着重文字
<em>
定义斜体字
<i>
定义小号字
<small>
定义加重语气
<strong>
定义下标字
<sub>
定义上标字
<sup>
HTML文本格式化
style=“background-color: 颜色型号”
字体背景
各式字体
style=“font-family:字体”
字体样式
style=“color:颜色型号”
字体颜色
style=“font-size: xx px”
字体大小
可以同时修改样式,颜色,大小
字体样式&大小&颜色
HTML属性
表格由<table>标签来定义。每个表格均有若干行(由<tr>标签定义),每行被分割为若干单元格(由标签定义),字母td指表格数据(table data),即数据单元格的内容
border:“x”
表格边框
<tr>
行
<td>
列
表格实例
<caption>
表头
<th>
标题
表格表头&标题
HTML表格
<ol>
<li>
有序列表行
有序列表
<ul>
无序列表行
无序列表
HTML列表
HTML可以通过<div>和<span>将元素组合起来
<div>
HTML区块
HTML表单用于手机用户的输入信息
HTML表单表示文档中的一个区域,此区域包含交互控件,将用户手机到的信息发送到Web服务器。
注意:表单本身并不可见
<form>
type=“text”
type=“password”
<input>
<button>
提交
<button type=“submit”>登陆</button>
登陆
提交&登陆
padding:xx px
空间
text-align:center
居中
margin:auto 0
水平居中
border-radius: xx px
弧度
margin-bottom:xx px
间隔
margin-top: xx px
外上间距
上
margini-top
下
margin-bottom
左
margin-left
右
margin-right
用来偏移
margin
display: inline
删除换行
登陆页面
HTML表单和输入
HTML页面认识
python中原生的一款基于网络请求的模块,功能强大,代码简单,效率极高
模拟浏览器发送请求
作用
注意:requests是第三方模块,使用时需要下载
get
post
请求分为
requests(url,params=None,headers=None,cookies=None,timeout=None,allow_redirects=True,proxies=None,verify=None,data=None):
通过向某一个地址发送请求,并获取到数据
url - 统一资源定位符
params - 请求参数
headers - 请求头
设置访问超时,一旦超过设置时间,则会抛出异常
timeout - 访问超时
当我们请求的ip有风险时,可以使用代理 ,同样构造代理字典,传递给proxies参数
proxies - 设置代理
很多网站http磕头,为了不影响老客户,原网站不动,当访问http的原网站时,重定向到新的http网址,在requests中 allow_redirects 默认是True,如果是False则不允许重定向,也就无法重定向新网站获取数据
allow_redirects - 重定向
有时候在打开一个网站的时候,会出现安全证书验证,会导致爬虫获取不到数据,所以我们就需要关闭证书验证。在请求的时候把verify参数设置为False就可以关闭证书验证了
但是关闭证书验证后,控制台会输出一个警告信息
取消警告
warnings.filterwarnings(‘ignore’)
verify - 证书忽略
发送请求
直接转换字符串 非字节码
print(resp.text)
图片数据,使用此参数
print(resp.content)
print(status_code)
自动转换成 字典格式
print(resp.json()[‘headers’][‘User-Agent’])
响应头
print(rasp.headers)
响应cookie
print(resp.cookies)
请求的url
print(resp.url)
print(resp.request.url)
print(resp.request.headers)
属性
response 对象
requests
requests模块get请求与实战
下载图片,需获取到图片的url地址和突变名称,通过向图片url 发送请求,之后获取 .content
下载歌曲
. text 返回的是Unlcode型的数据
. content 返回的是bytes型也就是二进制的数据
注意
requests下载图片(二进制数据下载)
requests. post(url,data=None)
以表单的形式发送post请求
post 请求发送form 表单数据
将json字符串转化为python类型
json.loads()
将python类型转化为json字符串
json.dumps()
json 模块
ruquests post请求
session方法是requests库发起请求的一个方法,这种方法会自动保存访问页面得到的cooke值,从而再次访问的时候自动携带cookie,使得操作cookle方便,不需要我们自己添加cookie了,常用于登录
功能:自动更新请求头信息,常用在账号登录的时候,先访问登录url,在访问数据提交的url
基本的使用方法与requests.get相似,使用的session的时候需要先创建session对象
session的使用
ConfigParser 模块
.ini 文件
session
requests模块post与session实战
xpath使用路径表达式来选取HTML/XML文件中的节点或节点集。节点是通过沿着路径(path)或者步(steps)来选取的
from lxml import etree etree.HTML
选取此节点的所有子节点
nodenane
从根节点选取(取子节点)
/
从匹配选择的当前节点选择文档中的节点,而不考虑他们的位置(取子孙节点)
//
选取当前节点
.
选取当前节点的父节点
..
选取属性
@
拿去当前节点的文档
text()
选取节点
选取bookstore元素的所有子节点
bookstore
选取根元素bookstore。注释:假如路径起始于正斜杠(/),则此路径始终代表到某元素的绝对路径
/bookstore
选取属于bookstore的子元素的所有book元素
bookstore/book
选取所有book子元素,而不管它们在文档中的位置
//book
选取属于bookstore元素的后代的所有book元素,而不管它们位于bookstore之下的什么位置
bookstore//book
选取名为lang的所有属性
//@lang
路径表达式
谓语用来查找某个特定的节点或者包含某个指定的值的节点
谓语被嵌在方括号中
选取属于bookstore子元素的第一个book元素
/bookstore/book[1]
选取属于bookstore子元素的最后一个book元素
/bookstore/book[last()]
选取属于bookstore子元素的倒数第二个book元素
/bookstore/book[last()-1]
选取最前面的两个属于bookstore元素的子元素的book元素
/bookstore/book[position()<3]
选取所有拥有名为lang的属性的title元素
//title[@lang]
选取所有title元素,且这些元素拥有值为eng的lang属性
//title[@lang='eng']
通过在路径表达式中使用“ | ”运算符,您可以选取若干个路径
选取book元素的所有title和price元素
//book/title | //book/price
选取文档中的所有title和price元素
//title | //price
选取属于bookstore元素的book元素的所有title元素,以及文档中所有的price元素
//bookstore/book/title | //price
x选取若干节点
谓语
匹配任何元素节点
匹配任何属性节点
@*
匹配任何类型的节点
node()
通配符
选取bookstore元素的所有子元素
/bookstore/*
选取文档的所有元素
//*
选取所有带有属性的title元素
//title[@*]
选取未知节点
将json字符串转化为python字典
loads()
将字典转化为json字符串
dumps()
json
xpath语法
xpath解析
prettiy()
它会自动规范代码
使用bs4格式化输出代码
解析器
print(soup.title)
print(soup.title.string)
print(soup.title.get_text())
获取文本内容
print(soup.title.name)
print(soup.p)
print(soup.p['class'])
print(soup.p.get(‘class’)
print(soup.a)
print(find(id=\"link3\"))
当属性为关键字时,需要在末尾加一个下划线“_”
print(find(class_=\"sister\"))
查找
print(find_all(\"a\"))
查找所有
print(soup.get_text())
获取所有文本内容
浏览结构数据的方法
用 . 隔开
soup.body.p
就是根据子节点一层一层的往下找
就是将子节点文本内容以列表的方式输出
contents
children生成器,可以对子节点进行循环,后将文本内容输出
children
子节点
可以将子节点与父节点一并输出
parent
父节点
下一个兄弟节点
next_sibling
上一个兄弟节点
previous_sibling
兄弟节点
遍历文档树
soup.find_all('b')
字符串
soup.find_all([\"a\
列表
soup.find_all(\"a\
按CSS搜索
表示找前几个
limit参数
表示把所有的该标签找到
soup.select(\"title\")
表示把第三个标签找到
soup.select(\"p nth-of-type(3)\")
css选择器
表示找body下面的a标签
soup.select(\"body a\")
表示找html下面的head下面的title标签
soup.select(\"html head title\")
通过tag标签逐层查找
表示p标签下面的第2个a标签
soup.select(\"p>a:nth-of-type(2)\")
标签下的直接子标签
搜索文档树
bs4解析
python
0 条评论
回复 删除
下一页