自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 收藏
  • 关注

原创 Scrapy

移动端数据爬取- 工具:三方抓包工具(fiddler,青花瓷,miteproxy)- 配置fiddler - tools->connections->设置fiddler服务器的端口->点击对勾(allow remote ....)- 测试上一步的配置是否成功: - 本地pc端去访问:本机ip:8888(fiddler的端口) - 页面的作用:提供了一个下载证书的通道 - 成功访问后,在页面中我们可以看到底部有一个连接,点击可以下载fiddler

2020-11-26 00:20:49 181

原创 加密 scrapy

js常见的加密方式加密在前端开发和爬虫中是经常遇见的。掌握了加密算法且可以将加密的密文进行解密破解的,也是你从一个编程小白到大神级别质的一个飞跃。且加密算法的熟练和剖析也是很有助于帮助我们实现高效的js逆向。下述只把我们常用的加密方法进行总结。不去深究加密的具体实现方式。常见的加密算法基本分为这几类:线性散列算法(签名算法)MD5对称性加密算法 AES DES非对称性加密算法 RSAMd5加密MD5是一种被广泛使用的线性散列算法,可以产生出一个128位(16字节)的散列值(hash val

2020-11-24 23:47:41 430

原创 爬虫逆向(js逆向)

异步爬虫的实现方式- 线程池- 多任务的异步协程- 多线程(生产者消费者模型)线程池前提from flask import Flask,render_templatefrom time import sleepapp = Flask(__name__)@app.route('/bobo')def index1(): sleep(2) return render_template('test.html')@app.route('/jay')def index2()

2020-11-24 02:22:57 2092

原创 模拟登陆 Selenium

模拟登陆使用爬虫实现登录操作.为何需要做模拟登陆?有些平台只有登录之后才可以访问其内部其他的子页面.如何实现模拟登陆?模拟点击登录按钮发起的请求即可阻力:验证码的识别验证码识别使用线上的打码平台进行各种各样验证码的识别?(不包含滑动验证)git下载滑动验证的代码打码平台:1 超级鹰:http://www.chaojiying.com/about.html注册,登录创建一个软件ID(899370)下载实例代码2 云打码古诗文网的模拟登陆1 创建超级鹰,下载代码i

2020-11-22 22:51:23 209

原创 2020-11-19

如何获取爬取图片数据?两种方式方式1:requests方式2:urllib示例import requestsheaders = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}#方式1:requestsurl = 'https://timgsa.baidu.com/timg?

2020-11-19 17:40:10 182

原创 爬虫

爬虫requests(模块)scrapy框架数据结构+算法数据结构 链表和二叉树 算法选择,冒泡,插入,希尔,快速,二分查找等数据分析机器学习Anacanda集成环境.是一个基于数据分析和机器学习的集成环境.安装1.安装路径中不可以出现中文和特殊符号2.记得添加环境变量查看是否安装成功:打开终端:jupyter notebook指令,按下回车jupyterAnancanda提供的一个基于浏览器的可视化开发工具.启动:打开终端:jupyter notebook

2020-11-19 01:25:33 239

原创 Django

get请求:会把客户产生的数据放到url上.,url是路径+请求参数http请求协议格式:协议+域名+端口号+url ==>寻找服务器的某些文件等http响应协议格式:协议/版本+状态客户产生的数据以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据,通常以UTF8的URL编码域名后面的第一个斜杠是根路径url:超文本传输协议(HTTP)的统一资源定位符post请求,将客户产生的数据放到了请求数据一栏.当以127.0.0.1:9001访

2020-07-08 21:15:42 148

原创 标签

<!DOCTYPE html> <!--文档申明 H5 html--><html lang="en"> -->指定当前的html文件主要的语言是什么 en代表英文,zh-cn代表中文<head> -->配置文件<meta charset="UTF-8"> ->标签属性 格式:属性名称='属性值' 属性,用来规定标签的格式,效果等等<title>Title</title> -->浏览器打开

2020-06-28 23:40:58 157

原创 前端

如果是使用浏览器,不需要写客户端(发送数据格式要写),如果客户端是软件,需要写客户端浏览器页面展示1;html2:css3:js4:js --query5;bootstraphtml–标签–超文本标记语言,经过浏览器解析(html标记语言的解析器)HTML介绍  Web服务本质复制代码复制代码import socketsk = socket.socket()sk.bind((“127.0.0.1”, 8080))sk.listen(5)while True:conn.

2020-06-28 17:31:31 158

原创 执行计划分析&事务处理

### part1 索引树高度1.表的数据量数据量越大,树的高度就会变高,理论上三层索引树的高度最为理想,可以支持百万级别的数据量解决: 可以使用分表(横切,竖切),分库,增加缓存,解决数据量大,查询慢2.索引键值过长该索引字段存储数据太大,每个叶子节点最大存储16k,超过这个范围会新增加叶子节点和分支节点解决:前缀索引(截取前5个长度)3.数据类型char(定长) varchar(变长) 从开辟空间速度来看,char快从数据结构上来看,varchar更为合理(1) 避免使用sele

2020-06-24 15:39:21 187

原创 sql语句优化

### part1 : sql语句优化(1) mysql 执行流程客户端:发送连接请求,然后发送增删改查sql语句进行执行服务端:1.连接层:提供和客户端连接的服务,在tcp协议下,提供多线程并发的技术,让多个用户登录到mysql中.show processlist; 查看所有登录到mysql的用户进程2.服务器: 提供了各种接口(增删改查..)分析器组件会解析用户的sql语句 如果发现sql语句执行效率较低,会提交给优化器组件进行优化,然后在执行 (查询缓存:把上次搜过的数据,或者提

2020-06-23 16:04:48 175

原创 python 操作mysql★★★★★★

### python 操作mysql(第三方操作)import pymysql1.基本语法1:创建连接(返回对象) host user password(数据库有密码写密码,没有就为空) database(具体操作哪一个数据库) 这四个参数必须写host 指定哪个数据库下的ipconn = pymysql.connect(host="127.0.0.1",user="root",password="",database="db0618",charset="utf8"(指定字符集,可以不

2020-06-20 20:52:31 135

原创 表查询★★★★★

### 单表查询sql 查询语句的完整语法:"""select 字段 from .表 where .. group by(分组,分类) .. having(塞选) .. order by(排序) .. limit(条数) .."""要看查询的是什么一.where 条件的使用 """功能: 对表中的数据进行筛选和过滤""" """语法: 1.判断的符号: = > >= < <= != <> 不等于 2.拼接条件的关键字 and or not

2020-06-19 00:57:19 133

原创 数据库★★★★★

### mysql“”"命令可以用tab来补全d:D:>cd MySQL5.7D:>cd D:\MySQL5.7\mysql-5.7.25-winx64\bin 直接切换到对应的路径D:>dir 来查看文件夹里面的内容“”"cls 清屏(windows) ctrl + l 清屏(linux)ctrl + c 终止[windows] 在超级管理员权限下才能使用:net start mysql 启动mysqlnet stop mysql 停止mysql[linu

2020-06-17 06:03:59 280

原创 协程★★★★★

### 协程#进程:资源划分的最小单位(划分的地)#线程:执行调度的最小单位(工人)#协程是线程的一种实现方式(协程是工人的办事方法,在一个线程里分为好多协程,基于上次状态往下做)安装协程模块 gevent用协程改成一下生产者消费者模型def producer(): # 数据范围0 ~ 999 for i in range(1000): yield i def counsumer(gen): for i in range(10): print(next(gen))初始化

2020-06-14 14:07:20 148

原创 进程池和线程池★★★★★

### 进程池from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutorExecutor 执行器进程池和进程的id引用一样线程池和线程的id引用一样ProcessPoolExecutor 进程池基本使用import os,timedef func(i): print("任务执行中... start" , os.getpid()) time.sleep(10) print("任务结束... end" , i)

2020-06-14 00:07:23 157

原创 锁(总结)

### 死锁,互斥锁,递归锁from threading import Lock,Thread,RLockimport time死锁只上锁不解锁,就会出现阻塞,下面的代码不执行,叫做死锁noodle_lock = Lock()kuaizi_lock = Lock()def eat1(name): noodle_lock.acquire() print("%s 拿到面条啦!!" % (name)) kuaizi_lock.acquire() print("%s 拿到筷子啦!!" %

2020-06-13 13:01:48 115

原创 线程★★★★★

### 线程进程: 资源分配最小单位线程: cpu执行程序的最小单位 一个进程必须有一个线程,一个线程可以包含多个线程一份进程资源中可以包含多个线程from threading import Thread ==>引入线程(属于一个类)from multiprocessing import Process ==>引入进程(属于一个类)import osdef func(num): print('当前线程{},所归属的进程id号{}'.format(os.getpid(),n

2020-06-11 20:25:34 606

原创 进程 锁和事件和进程队列★★★★★

###锁 lock(同一时间上一把锁,会在自己内部给各个进程发出消息(状态)) ★★★★★#高访问量的都是用到多进程和多线程(速度快)#引入锁Lock#上锁会从异步变成同步,有先有后#如果必须要同步执行操作(有先有后),将执行操作的内容前后进行上锁#函数的调用处和定义处,普通参数要一一对应,关键字参数有就用自己的,没有就默认用定义处的,如果需要在引入函数处理逻辑,要将处理的参数给调用处#args后面的参数是普通参数要一一对应,有给出的参数要用给出的参数,没有就写定义处的from multi

2020-06-11 02:44:37 224

原创 进程★★★★★

###并行和并发并发:一个cpu同一时间不停执行多个程序并行:多个cpu同一时间不停执行多个程序cpu的进程调度方法先来先服务fcfs(first come first server):先来的先执行短作业优先算法:分配的cpu多,先把短的算完时间片轮转算法:每一个任务就执行一个时间片(时间段)的时间.然后就执行其他的.多级反馈队列算法越是时间长的(例如下载),cpu分配的资源越少,优先级靠后越是时间短的,cpu分配的资源越多###同步 异步场景在多任务当中同步:必须等我这件事干

2020-06-09 21:54:09 155

原创 hashlib模块(加密和文件校验)和hmac模块(加密和文件校验)★★★★★

###hashlib 加密#文件名和模块名不能重名#一般用hashlib模块下的md5进行加密(返回32位)#加密的原密码必须是二进制字节流,加盐也是二进制的字节流import hashlib基本用法(1) 创建一个md5算法的对象hs = hashlib.md5()(2) 把要加密的字符串通过update更新到hs对象中运算hs.update("123456".encode("utf-8")) # 里面的数据是二进制字节流(3) 获取32位16进制的字符串res = hs.hexd

2020-06-08 23:16:24 214

原创 网络开发的两大架构★★★★★

### 网络开发的两大架构本机最早期文件传输(一台机没有网络)a文件 -> b文件 借助c文件a文件和b文件进行数据交流,借助c文件中转数据a文件把数据放在c文件中,b文件从c文件取b文件把数据放在c文件中,a文件从c文件取构成了最早期的数据交互的原理 ->socket(套接字)的模型socket(套接字)是收发数据的一个工具(在python中用socket需要import引入)后来有了网络之后a文件中的数据,可以通过网络协议,转化成101010电信号,进行发送a文件借

2020-06-07 01:01:21 1037

原创 异常处理 ★★★★★

### 认识异常处理IndexError 索引超出序列的范围lst = [1,2,3,4]print(lst[100])KeyError 字典中查找一个不存在的关键字dic = {“a”:1,“b”:2}print(dic[“c”])NameError 尝试访问一个不存在的变量print(abc)IndentationError 缩进错误if 5 == 5 :# print(1)# print(2)AttributeError

2020-06-04 08:29:14 130

原创 面向对象中的方法(装饰器的应用)

### 面向对象中的方法"""普通方法: 可以有参数,或者无参数,当场正常的函数调用绑定方法: (1) 绑定到对象(自动传递参数为对象) (2) 绑定到类(自动传递参数为类)静态方法: 无论是对象还是类,都可以调用,不会默认传递任何参数"""class Dog(): name = "旺财" # 普通方法 def jiao(): print("小狗哇哇哇的叫唤") # 绑定方法(对象) def eat(self): print("小狗喜欢吃骨头") # 绑定方

2020-06-02 19:40:14 224

原创 装饰器★★★★★★

### 装饰器(运用了闭包函数)"""装饰器: 为原函数扩展新功能,用新功能去替代旧功能作用 : 在不改变原有代码的基础上,实现功能上的扩展符号 : @(语法糖)"""1.装饰器的基本用法def kuozhan(func): def newfunc(): print("厕所前,蓬头垢面") func() print("厕所后,精神气爽") return newfuncdef func(): print("我叫高富帅")func = kuozhan(func)

2020-06-02 03:06:00 130

原创 与类相关的魔术属性 反射

### 与类相关的魔术属性#魔术方法后面加括号,魔术属性直接使用class Man(): passclass Woman(): passclass Children(Man,Woman): """ doc文档: 成员属性: eye 成员方法: skylight moonread __makebaby 完成的功能: 描述小孩天生神力. """ eye = "血轮眼" def skylight(self): print("一下生,直接使用天照,让世界变得混乱")

2020-05-30 00:33:14 123

原创 魔术方法★★★★★★

### new 魔术方法#要借助父类object 类.方法() 才能创建一个全新的本类对象 例如;obj = object.__new__(cls)#通过new可以返回不同的对象.可以是自己的 ,可以是其他人的,也可以不返回#返回自己的对象,要借助父类的new才可以实现''' 触发时机:实例化类生成对象的时候触发(触发时机在__init__之前) 功能:控制对象的创建过程 参数:至少一个cls接受当前的类,其他根据情况决定 返回值:通常返回对象或None'''(1) 基本语法cla

2020-05-28 21:53:27 174

原创 单继承 多继承 菱形继承

### 继承 : 一个类除了自身所拥有的属性方法之外,还获取了另外一个类的成员属性和方法"""一个类继承另外一个类,那么该类就是子类(衍生类),被继承的这个类叫做父类 (基类,超类)继承:(1) 单继承 (2) 多继承python所有的类都默认继承父类 object"""### 单继承#如果子类想调用父类私有的,要先在父类里面定义一个公有的,然后在公有的里面先调出私有,最后就可以间接的调出私有,不能在子类中定义公有class Human(object): hair = "金色" s

2020-05-27 18:29:26 189

原创 oop 面向对象程序开发

oop 面向对象程序开发(1)类的定义class Car: passclass Car(): # (推荐) passclass Car(object): pass(2)类的实例化class Car(): passobj = Car()(3)类的基本结构"""类中只有2种成员: (1) 成员属性 (2) 成员方法"""class Car(): # 成员属性 color = "屎黄色的" # 成员方法 def func(): print("小车会跑")

2020-05-25 22:57:08 351

原创 正则表达式模块 正则函数★★★★★

### 正则表达式 匹配单个字符import relst = re.findall(正则表达式,要匹配的字符串)返回列表,按照正则表达式匹配到的内容都扔到列表里默认从左向右预定义字符集\d 匹配数字lst = re.findall("\d","asdlfkjasdklfjkla_()()*(*(23423sdf4")print(lst)\D 匹配非数字lst = re.findall("\D","asdlfkjasdklfjkla_()()*(*(23423sdf4")print(

2020-05-23 01:27:01 315

原创 模块与包 文件与文件夹的关系

import 导包import mymodulemymodule.xboyprint(mymodule.xboy)把一个文件里面的内容导入当前文件下,可以直接 模块.进行调用1. 模块.变量2. 模块.函数3. 模块.类mymodule.Car().colour默认只能导入当前文件所在的文件夹下的所有模块导入任意路径下的模块通过sys.path 可以导入任意路径下的模块import sys 系统模块sys.path 模块###可以给导入的模块起一个别名impor

2020-05-22 21:50:29 325

原创 压缩模块zipfile (后缀为zip) & tarfile(后缀为.tar | .tar.gz | .tar.bz2)

### zipfile 后缀是zipimport zipfile1.压缩文件(1) 创建压缩包 zf = zipfile.ZipFile("ceshi0512.zip","w",zipfile.ZIP_DEFLATED)(2) 把文件写入到压缩包当中 write(路径,别名)zf.write(r"E:\python30\day17\ceshi100\1.txt","1.txt")zf.write(r"E:\python30\day17\ceshi100\2.txt","2.txt")

2020-05-22 00:49:30 391

原创 OS模块 (对系统进行操作) OS.Path 路径模块 shutil模块

### os模块 – 对系统进行操作import ossystem() 在python中执行系统命令例如:os.system("calc") os.system("mspaint") os.system("type nul>ceshi.go") 创建文件#os.system("ipconfig") 乱码popen() 执行系统命令返回对象,通过read方法读出字符串obj = os.popen("ipconfig")print(obj)如果是一个字符串 windows

2020-05-21 00:56:26 179

原创 time 时间模块

### timeimport time#sleep() 程序睡眠等待'''程序在当前行,阻塞3秒之后,代码往下执行''' time.sleep(3) print("我睡醒了")### 进度条效果(1) 定义进度条的样式print("[%-50s]" % ("###############"))print("[%-50s]" % ("######################"))print("[%-50s]" % ("#########################

2020-05-19 22:14:35 168

原创 序列化模块(pickle和json)

### 序列化模块 pickle(转换的都是字节流)序列化: 把不能够直接存储在文件中的数据变得可存储,这个过程就是序列化\反序列化:把文件中的数据内容拿出来,恢复成原来的数据类型,这个过程就是反 序列化php:serializeunserialize在文件中存储的数据,要么是字符串,要么是字节流python中,所有的数据类型都可以通过dumps和loads进行序列化和反序列化错误案例 列表不能够直接塞到文件中lst = [1,2,3]with open("ceshi2.txt"

2020-05-19 22:00:04 139

原创 数学模块(文件) 随机模块 内置方法

### math 数学模块"""模块.方法()"""import math#ceil() 向上取整操作 *****#小数点后去掉,不存在四舍五入,整数加1res = math.ceil(3.01)print(res)==>4#floor() 向下取整操作 *****#只保留整数部分,不存在四舍五入res = math.floor(4.1)print(res)==>4#pow() 计算一个数值的N次方(结果为浮点数) (对比内置pow)res = math.pow

2020-05-18 23:33:48 225

原创 递归函数 ★★★★★

### 递归函数“”"递归函数: 自己调用自己的函数时递归函数递:去归:回一去一回叫做递归“”"简单递归def digui(n): print(n,"<===1===>") if n > 0 : digui(n-1) print(n,"<===2===>")digui(5)“”"去的过程:n = 5 print(5 , “<=1=>”) 5 > 0 digui(5-1) <=> digui(4) <=&gt

2020-05-18 21:52:15 135

原创 习题★★★★★★

敏感词列表 li = [“大大大”, “好黑”, “真大”, “真长”]将用户输入的内容中的敏感词汇替换成等长度的*(大大大就替换***),并添加到一个列表中;如果用户输入的内容没有敏感词汇,则直接添加到新列表中。lst=[]while True: strvar = input('请输入您的内容') #按Q退出 if strvar.upper()=='Q': print(lst) break for i in li: #寻找敏感词汇 if i in strvar: str

2020-05-17 20:30:56 1647

原创 生成器

### 生成器“”"#生成器本质是迭代器,允许自定义逻辑的迭代器#迭代器和生成器区别:迭代器本身是系统内置的.重写不了.而生成器是用户自定义的,可以重写迭代逻辑#生成器可以用两种方式创建:(1)生成器表达式 (里面是推导式,外面用圆括号)(2)生成器函数 (用def定义,里面含有yield)“”"from collections import Iterator(1) 生成器表达式 定义一个生成器gen = (i* 2 for i in range(1,5))print(gen

2020-05-17 01:36:04 309

原创 推导式★★★★★

### 推导式 : 用一行循环判断遍历出一系列数据的方式通过一行循环判断,遍历出一系列数据的方式是推导式语法: val for val in Iterable (把想要的值写在 for的左侧)里面是一行循环判断!根据套在推导式外层的符号判断具体是什么类型的推导式推导式种类三种:[val for val in Iterable] 列表推导式{val for val in Iterable} 集合推导式{a:b for a,b in iterable} 字典推导式“”"推导式在使用时,只

2020-05-16 23:14:20 263

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除