1 Star 0 Fork 1

gitee704523046/lanzhou_python

forked from 小源/lanzhou_python 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
上课笔记 23.84 KB
一键复制 编辑 原始数据 按行查看 历史
小源 提交于 2021-03-20 16:03 +08:00 . 代码
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110
上课笔记
吉多
人生苦短,我用Python
web: Django,flask
自动化:scrapy,selenium
数据分析:numpy
豆瓣
微服务:
在cmd里面输入
python
pip3
大小写
字体变大变小
上一次打开项目
http://lookdiv.com/ 5263
变量:变化的量 想象成生活中的 碗 勺子
字符串
整数
浮点数
布尔
输入
ctrl+d 复制下一行
ctrl+x 剪切
ctrl+alt+l 格式化
类型转换
非零即真
type查看变量类型
py3 input都是字符串,如果你要计算,你要做相应的转换
%s 占位的字符串
%d 占位的是整数
%f 占位的浮点数
and
or
not 取反
字符串:startswith() 以什么开头
len() 取长度
random.randint(1,3) 包含1 3
1、定义一个账号:123456
定义一个密码:"abc"
如果账号和密码输入都一样,就提示登陆成功
如果输入账号不一样,提示账号不对
如果输入密码不一样,提示密码不对
2、去银行取钱
定义一个账号
定义一个密码
定义一个金额
输入账号和密码
假如账号和密码是对的
就可以开始取钱了
请输入取钱金额
假如里面的金额不够、就提示没钱取毛线
如果够 就告诉取了多少钱 还剩多钱 格式化
如果账号密码不对
提示非法账户
3、小明身高1.75米,体重80.5kg。请根据BMI公式(体重除以身高的平方)帮小明计算他的BMI指数,并根据BMI指数:
低于18.5:过轻
18.5-25:正常
25-28:过重
28-32:肥胖
高于32:严重肥胖
4、
做一个计算器
请输入x
请输入y
请输入(+ - * / **)
输出正确结果
5、输入一个位置
假如输入的位置是ADC
请输入ADC英雄
如果输入的鲁班就打印小鲁班
如果输入的虞姬 就打印美丽
假如输入的位置是肉盾
请输入肉盾英雄
如果输入的亚瑟就打印暗黑之神
如果输入的猪八戒 就打印猪八戒之神
循环: 重复干某一件事情
'''
1、1到100的和
2、去银行取钱
定义一个账号
定义一个密码
定义一个金额
输入账号和密码
假如账号和密码是对的
就可以开始取钱了
请输入取钱金额
假如里面的金额不够、就提示没钱取毛线
如果够 就告诉取了多少钱 还剩多钱 格式化
如果账号密码不对, 让他重新输入,如果重新输入的次数大于3次,账户被冻结
'''
break 停止循环
continue 中断此次循环 进行下一次循环
print("*",end="") 取消换行
in 判断 在什么里面
for
字符串是可以被迭代的
列表:
apppend 增
remove 删
cls[position] 查
cls[position] = value 改
python的列表立面什么类型都可以装
append和extend的区别
append 会把整个对象当做一个元素添加进去
extend 会把对象遍历分别添加进去
insert(index ,value) 根据索引来插入
pop() 默认删除最后一个
del list[position] python内置的方法,不是列表
count 统计元素的个数
clear 清空列表
index 返回元素的索引
sort() 默认升序
sort(reverse=True) 降序
reverse() 倒序
sorted(list) 不在原列表做排序 升序
sorted(list,reverse=True) 降序
列表能被迭代码?
列表的切片[start:end:step] 默认step 是1
python的列表支持负索引 最后索引为-1
sum
max
min
元组不可变
元组跟列表相互转
字典是key value的结构
字典的键不能重复
clear
pop 根据key删除
keys 字典所有的键
values
items
print(d.get("name1")) # 根据key获取值 没有键不报错
print(d["name1"]) 没有键 会报错
d.update(d1) 更新
setdefault 如果键不存在,则更新
如果键存在,则不更新
None在Python当中代表没有
字符串的方法
center 不足用符合代替
集合不能重复
1、6、轨道交通价格调整为:
6公里(含)内3元;
6公里至12公里(含)4元;
12公里至22公里(含)5元;
22公里至32公里(含)6元;
32公里以上部分,每增加1元可乘坐20公里。
使用市政交通一卡通刷卡乘坐轨道交通,
每自然月内每张卡支出累计满100元以后的乘次,
价格给予8折优惠;满150元以后的乘次,
价格给予5折优惠;支出累计达到400元以后的乘次,
不再享受打折优惠。
算小明每天乘坐7公里,一共乘坐60次花多少钱
2、名片管理系统 实现增删改成
3、列表去重还有其他方法
4、今天方法一定记住
函数:把一部分功能进行封装,方面调用和理解
函数括号立面的参数 叫型参
return 返回的结果意思 还有结束的功能
print 打印的意思,只是单纯的让你看到结果
局部变量 在函数内部定义的变量就是局部变量,只能当前函数使用
全局变量 在函数外部定义得的变量就是全局变量,所有函数的都可以使用
当局部变量和全局变量名字一样的时候,优先使用局部变量
有参有返回值
有参无返回值
无参无返回值
无参有返回值
split 分割
匿名函数后面只能跟一个式子
图片 音频 视频 这些二进制
w 写
r 读
a 追加
rb 二进制读
wb 二进制写
面向对象: 世界万物皆对象
类:类是抽象的
对象:对象是类的具体实例
属性: 名字 名字、年龄
行为: 动词 吃饭 睡觉
函数在类里面 叫方法
return 可以返回多个值
面向对象:
1、封装
2、继承
3、多态
没有面向过程就没有面向对象
self 谁调用,就指谁 self指的对象的本身
魔法方法
__init__ 创建对象的时候会执行
1、名片一定要改成函数版本的
2、计算2021-03-03 算一下今天是多少天
3、list=[{"北京":{"面积":”1000平”,"人口":"200w"},"上海":{"面积”:"600平","人口":"150w"}}]
打印最终效果:
北京 面积 1000平
北京 人口 200w
上海 面积 600平
上海 人口 150w
面向对象:
实例属性: 跟对象相关的实例属性
实例方法: 跟对象相关的方法
类方法: 跟类相关
类属性 : 不随创对象而初始化,跟类相关
类方法可以通过类调用,也可以通过实例调用
静态方法: 跟类和对象没有关系 可以通过类调用,也可以对象调用
私有属性: 不想对象在外部随便改变的属性,然后在类的内部可以调用
私有方法: 不想让对象随意调用,然后在类的内部可以调用
无论是私有属性还是私有方法,都不对象随意改变和调用
属性方法:用property
私有类属性:
'''
1、房子装修
home.装(家具)
房子类
大小
位置
价格
家具类
颜色
材料
大小
装进一个家具,房子还剩多少平米
'''
’‘’
冰箱.open()
冰箱.zhuang(大象)
冰箱.close()
’‘’
__str__ 属于魔法方法,怎么描述的,打印对象,就打印什么
封装:
1、将同一个功能的方法封装到同一个方法当中
2、将属性和方法封装到对象当中
继承:单继承 和 多继承
重写:当父类的行为满足不了子类的时候,就需要重写 ,父类的方法则不会执行
多继承:当父类有相同的方法的时候,默认只继承第一个
super可以调用父类方法 父类.fun() 也可以调用
所有的父类都是object
广度优先和深度优先
多态:鸭子类型,龙生九子各不同
单例默认:无论创建多少个对象,都指向同一个对象
object
可以用重写__new__方法来实现单例模式
isinstance 判断是谁的实例
老王开枪:
人类:
姓名
枪类:
名字
弹夹:
容量
子弹:
杀伤力
异常可以用try: except 捕获
else 没有出现的异常的会执行
finally 不管出现 不出现异常都会执行
单个PY文件就可以叫模块
多个模块放到一个文件夹下 就叫包 并且拥有init文件
import 模块名
from x import
from x import *
pip3 是python包管理器 可以用来安装第三方包
pip3 install pymysql -i https://pypi.douban.com/simple
enumerate 遍历列表的索引
zip
开放封闭:已经实现好的功能不要动,进行对外扩展
闭包:函数进行嵌套,内部函数用了外部函数参数
mysql 5.7
作业:
1、用函数写
判断变量是否合法
变量名可以由字母,数字或者下划线组成;
变量名只能以字母或者下划线开头;
s = "hello@"
1. 判断变量名的第一个元素是否为字母或者下划线
2. 如果第一个元素符合条件, 判断除了第一个元素的其他元素
应用知识:字符串方法 循环语句 条件语句 切片
2、用函数写
回文数(反读和正读一样)的判断:
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
3、用面向对象
请定义一个汽车类(Car)的类,其中有:
属性:速度(speed),体积(size)等等
方法:移动(move(s)),设置速度(setSpeed(speed)),
加速speedUp(),减速speedDown()等等.
最后测试中实例化一个交通工具对象,并通过方法给它初始化speed,size的值,
并且通过打印出来。另外,调用加速,减速的方法对速度进行改变。
调用 move方法输出移动距离
链接:https://www.nowcoder.com/questionTerminal/e40dc55362fa4d56b3d3d1b0ef03138f
来源:牛客网
装饰器
生成器:只是保留生成变量方法而已
1、把列表推导式改成小括号
2、当函数立面拥有yield也是生成器
迭代器: 能用next方法迭代器 生成器就是迭代器
浅拷贝: 只浅拷贝最外层
深拷贝: 有多少层就拷贝多少层
== 判断值的
is 判断引用的
Mysql
关系型数据库
推荐
1、
2、
热点
3、
4、
新时代
5、
6、
一对多
一对一
多对多
一个标签对应了多条新闻
一条新闻多应了多个标签
自关联:
1、马斯克上火星了 科技 热点
2、支付查更新了页面 科技 互联网
非关系型数据库
mongodb bjson
redis
登录
mysql -uroot -p
查看库
show databases;
选择数据库:
use db
查看表:
show tables;
创建数据库:
create database db_manager_stu charset=utf8;
学生表:
id int 主键
name varchar
code varchar
gender varchar
phone varchar
created_time
updated_time
is_delete
unique 唯一
创建表
create table tbl_stu (
id int not null primary key auto_increment,
name varchar(10) not null,
code varchar(10) not null unique,
gender int not null,
phone varchar(11) not null unique
);
查看建表语句:
show create table '表名';
查看表结构
desc 表名
插入数据
insert into tbl_stu (name,code,gender,phone) values ('老王',"123",0,"13812345678");
insert into tbl_stu values (0,'老王',"456",0,"13812345679");
insert into tbl_stu values (0,'小红',"789",1,"13812345670");
insert into tbl_stu values (0,'小蓝',"910",1,"13812345671");
一次插入多次查询
查询数据:
select * from tbl_stu;
select * from tbl_stu\G;
按条件查询
select * from tbl_stu where id = 1;
> != < ....
and not or
select * from tbl_stu where name like '老%'; 以什么开头
select * from tbl_stu where name like '%老'; 以什么结尾
select * from tbl_stu where name like '%老%'; 包含老的
排序
select * from tbl_stu order by id desc; # 倒
select * from tbl_stu order by id asc; # 正
select * from tbl_stu where id > 1 order by id desc;
限制查询
select * from tbl_stu limit 3; # 返回3个
select * from tbl_stu limit 3,1; #从第三行开始查 查1个
select * from tbl_stu order by gender desc limit 1 # 取最大值
select * from users limit (page-1)*pageSize,pageSize;
每页10个
第一页:select * from tbl_stu limit 0,10;
第二页:select * from tbl_stu limit 10,10;
第二页:select * from tbl_stu limit 20,10;
更新:
update tbl_stu set name="老宋" where id = 1;
update tbl_stu set name="老宋",gender=1 where id = 1;
删除
delete from tbl_stu where id = 4;
三范式:
第一范式
列不可分割
外卖
name 李四
公安局
xing 李
ming 四
第二范式
要有主键 其他字段都依赖于主键
第三范式
用户表
用户编号 用户名 用户年龄 用户性别
1 老王 38 0
订单表
订单编号 订单日期 用户编号 用户名 用户年龄 用户性别
1 2020xx 1 老王 38 0
订单编号 订单日期 用户编号
1 2020xx 1
用户表
info
id name gender
1 xx xx xx xxx .......
extra_info
id code address phone height weight marray mz user_id
1 1
select * from where id =1
班级
tbl_cls
id name
1 一班
2 二班
tbl_stu
id name gender cls_id
1 小王 0 1
2 小绿 0 1
3 小红 1 2
多对多
tbl_tag
id name
1 科技
2 娱乐
3 互联网
tbl_news
id title content
1 无人驾驶 上路了
2 吴孟达离世了 娱乐
3 共享自行车 上市了
中间表
id tag_id new_id
1 1 1
2 2 1
3 3 3
4 2 2
5 2 3
自关联
province
id name
1 甘肃省
city
id name p_id
1 兰州 1
2 天水 1
area
id name c_id
1 雁滩 1
1 xx 1
areas
id name p_id
1 甘肃 0
2 兰州 1
3 天水 1
4 雁滩 2
5 xxx 2
create table tbl_classes (
id int not null primary key auto_increment,
name varchar(45) not null
);
create table tbl_students (
id int not null primary key auto_increment,
name varchar(50) not null,
gender varchar(1) not null,
age int(11) not null,
cls_id int(11),
constraint stu_cls foreign key(cls_id) references tbl_classes(id)
);
insert into tbl_classes values(0,'一班');
insert into tbl_classes values(0,'二班');
insert into tbl_classes values(0,'三班');
insert into tbl_classes values(0,'四班');
insert into tbl_classes values(0,'五班');
insert into tbl_students values(0,'张三','男',12,1);
insert into tbl_students values(0,'李四','男',15,2);
insert into tbl_students values(0,'王五','男',16,3);
insert into tbl_students values(0,'张三','男',12,4);
inner join 内连接
select * from tbl_classes inner join tbl_students on tbl_classes.id = tbl_students.cls_id;
left join 左连接
select * from tbl_classes left join tbl_students on tbl_classes.id = tbl_students.cls_id;
right join 右连接
select * from tbl_classes right join tbl_students on tbl_classes.id = tbl_students.cls_id;
mysql 默认3306
IP:标记任何一台网络设备
端口:标记进程
知名端口 1024
80
22
https://pypi.org/project/PyMySQL/
当元组只有一条数据的时候,要加个逗号
1、把名片管理系统 改mysql
2、背背
Django Web框架、重量级
Flask Web框架 轻量级
C/S Clinet/Server 客户端/服务器
B/S Browser/Server 浏览器/服务器
MVC:
M :数据 跟数据相关
V :视图 显示
C : 控制器 控制器
MVC框架的核心思想是:解耦
https://docs.djangoproject.com/zh-hans/2.0/
M: 数据
T(template): 模板 用来显示 相当于MVC里面的V
V:视图 用来处理用户逻辑的 相当于MVC里面的C
HTTP: 超文本传输协议 无状态的 基于TCP 引入Cookie
HTTPS: 加密的HTTP ssl 在传输层加密
客户端发起request
服务器返回response
pip3 install django==2.1.5 -i https://pypi.douban.com/simple
admin : 管理后台
models: 管数据
views : 视图 处理用户逻辑
settings: 管全局配置
urls:路由
wsgi:部署
templates:模板
manage:项目的管理者
改settings 58行
在建一个模块:python manage.py startapp app01
运行项目:python manage.py runserver
django web : 8000
项目初期:设计表
ORM思想
object
relation
mapping
类名----> 表名
属性----> 字段
class Dog():
name = xxx
create table dog{
name
}
加快我们开发效率,降低了运行效率
英雄:
名字
位置
性别
class Hero():
name =
create table hero(
id int not null primary key auto_increment,
name varcahr(10)
)
设计模型类
连接数据库:settings
'''
# 配置数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST':"localhost",
'USER':'root',
'PASSWORD':'123456',
'PORT':'3306',
'NAME':'db_wangzhe'
}
}
'''
跟项目名一样的包的__init__文件中加上
import pymysql
pymysql.install_as_MySQLdb()
生成迁移文件
python manage.py makemigrations
执行迁移文件
python manage.py migrate
创建管理员
python manage.py createsuperuser
管理后台地址
http://127.0.0.1:8000/admin
注册到管理后台
admin.site.register(Hero) #注册到管理后台
如果你的模型类立面有choices 前端就可以用get_xx_display
如果没有,那个可以自定义属性方法
请求方法 有GET POST PUT DELETE
get: 获取资源
参数拼接到地址后面 一键多值
post:新增资源
在formdata立面
put :更新资源
delete :删除资源
状态码:
OK
200
重定向
301
302
参数错误
400
404
服务器错误
502
Cookie 存在浏览器上,最直接的体现就是保持登录,基于域名安全
网站之间Cookie不能相互访问
Cookie是有过期时间得,默认的关闭浏览器就过期
登录注册都用post
Session 存在服务器里面
依赖于Cookie Cookie里面存的时候sessionid
默认是两周
'''
xxx@qq.com
xxx@126.com
xxx@163.com
大写 小写字母 数字 _
6-16位
'''
match 从左向右匹配
xxx.group(index)
.任意字符 除了\n
[] 包含其中的任意一个字符
\d 数字
\D 非数字
\s 匹配空格
\S 匹配非空格
\w 匹配非特殊字符,即a-z、A-Z、0-9、_
\W 匹配特殊字符,即非字母、非数字、非汉字、非_
r 原始字符串
* 0次或者无限次
+ 1次或者无限次
? 0次或者1次
{n} n次
{n,} 至少 n次
{n,m }n次到m次
^ 以什么开头
$ 以什么结尾
\b 匹配单词边界 需要\\b
\B 非单词边界
https://www.cnblogs.com/georgexu/p/11204745.html
注意事项
1、分析URL,看URL的变化,确定是否GET还是POST请求
2、确定网站是动态网站还静态网站
3、看下请求头
4、把源代码下载下来对比网站渲染后的源代码
pip3 install openpyxl -i https://pypi.douban.com/simple
https://pyecharts.org/#/zh-cn/composite_charts?id=page%ef%bc%9a%e9%a1%ba%e5%ba%8f%e5%a4%9a%e5%9b%be
https://github.com/pyecharts/pyecharts
pip install pyecharts
wordcloud 词云
jieba 分词
xpath
pip3 install lxml -i https://pypi.douban.com/simple
// 任意地方
text() 取文本
@attr 取属性
//element[@attr=""]
https://www.jianshu.com/p/85a3004b5c06
li_list = html.xpath('//ul/li[1]') # 选取ul下面的第一个li节点
li1_list = html.xpath('//ul/li[last()]') # 选取ul下面的最后一个li节点
li2_list = html.xpath('//ul/li[last()-1]') # 选取ul下面的最后一个li节点
li3_list = html.xpath('//ul/li[position()<= 3]') # 选取ul下面前3个标签
text_list = html.xpath('//ul/li[position()<= 3]/a/@href') # 选取ul下面前3个标签的里面的a标签
li_list = html.xpath('//li[starts-with(@class,"item-1")]')#获取class包含以item-1开头的li标签
li1_list = html.xpath('//li[contains(@class,"item-1")]')#获取class包含item的li标签
li2_list = html.xpath('//li[contains(@class,"item-0") and contains(@data,"2")]')#获取class为item-0并且data为2的li标签
li3_list = html.xpath('//li[contains(@class,"item-1") or contains(@data,"2")]')#获取class为item-1或者data为2的li标签
https://gitee.com/yangyaoyao/xpath_helper/tree/master/
bs4:
pip3 install beautifulsoup4 -i https://pypi.douban.com/simple
https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/
select('.类的值')
select('#id的值')
select('#id的值 p a')
select('#id的值>p>a') # 这是相邻的
find('p',class_="")
find('p',id="")
find_all('p')
selenium驱动
http://chromedriver.storage.googleapis.com/index.html
https://www.selenium.dev/documentation/en/
pip install selenium -i https://pypi.douban.com/simple
1、把斗鱼热度做个分析的表
2、用selenium爬取豆瓣电影https://movie.douban.com/ 比如搜索成龙
3、爬取下厨房 https://www.xiachufang.com/category/40076/ 菜的名字 佐料 步骤
4、https://www.xiangha.com/caipu/c-jiachang/
1、先从网页登录,然后cookie粘贴出来
2、用requests session会话
3、用selenium (不想看到页面,直接用无头浏览器)
http://www.fateadm.com/
js 可以简单的逆向
用python来执行js
selenium可以模拟鼠标操作
selenium 遇到iframe时候一定要注意切换
pip install scrapy
scrapy startproject xiangha 创建项目
scrapy crawl xiangha
https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/528/528-bigskin-1.jpg
https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/528/528-bigskin-2.jpg
https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/167/167-bigskin-1.jpg
https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/167/167-bigskin-2.jpg
pyppeteer 爬动态网站
appnium 操作手机
scrapy genspider -t crawl xcf xiachufang.com
- deny=()不抓取的规则,一般较少会用到,当条件复杂时,可以和allow配合一起用,前后夹击,参数和allow一样。
- allowdomains=() 这个和spider类里的allowdomains是一个作用,抓取哪个域名下的网站,前面写了,这个就不用管了。
- denydomains=()和allowdomains相反,拒绝哪个域名下的网站。
- restirct_xpaths=(),estricc_css()在网页哪个区域里提取链接,可以用xpath表达式和css表达式这个功能是划定提取链接的位置,让提取更加精准。
- tags=('a', 'area')默认提取a标签和area标签
- attrs=('href',)默认提取tags里的href属性,也就是url链接。
- canonicalize=True 文档里说的是url规范化,在scrapy的util文件夹里的url文件,我翻了一遍没找到,文档里说默认数值是true,我的源码是false,我改成了true,没发现有什么变化。
- unique就是说这个地址是不是要规定唯一的,默认true,重复收集一样的地址也没意义不是。
- strip这个是把地址前后多余的空格删除,很有必要。
- process_value=None这个作用比较强大了,他接受一个函数,可以立即对提取到的地址做加工,比如提取用js写的链接,官方文档给了一个例子。
- deny_extensions,排除非网页链接,默认是None,scrapy会给你排除掉以下链接
scrapy crawl xcf -s JOBDIR=xcf/001 记录爬虫(只能按一下ctrl+c)
scrapy crawl xcf -s JOBDIR=xcf/001 恢复爬虫
scrapy 中间件
url 去重
baidu.com 算法
taobao.com
baidu.com
00111 1 1 1 11 0 1 0 11 0 00 0 00 0 00 0
增量爬虫
fiddler
1、找文档
2、注册小程序账号
接口:
DRF
restful api
1、推荐https
2、名字复数 https://127.0.0.1:8000/v1/api/goods/
3、https://api.xxx.com/v1/foods 会有跨域问题
4、get post delete put patch
5、offset 分页
https://127.0.0.1:8000/v1/api/grils/ GET
https://127.0.0.1:8000/v1/api/grils/1/ GET 获取单条数据
https://127.0.0.1:8000/v1/api/grils/1/ PUT 更新数据
https://127.0.0.1:8000/v1/api/grils/1/ delete 更新数据
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/gitee704523046/lanzhou_python.git
git@gitee.com:gitee704523046/lanzhou_python.git
gitee704523046
lanzhou_python
lanzhou_python
master

搜索帮助