自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(75)
  • 资源 (1)
  • 收藏
  • 关注

原创 Python的参数引用(传值还是传址)

概念传值就是传入一个参数的值,传址就是传入一个参数的地址,也就是内存的地址(相当于指针)。

2022-07-02 11:23:07 858 1

原创 python的元类

元类就是用来创建类的”东西“。元类就是用来创建这些类(对象)的,元类就是类的类。其中,type就是Python在背后用来创建所有类的类。元类的主要目的就是为了当创建类时能够自动地改变类。......

2022-07-01 11:31:22 279

原创 使用parse进行url解码

使用urllib的parse方法进行url解码# coding: utf-8import randomimport timeimport reimport requestsfrom urllib import parseurl = 'https://ti.360.com/psp_jump.html?fun=QiUserJsonp767643377&errno=0&errmsg=&s=c%257B%257CFW%252F%252AQ%257B1%255D-A%2527Q

2022-05-07 16:39:42 856

原创 python协程获取返回值(四种方式)

一、通过ensure_future获取,本质是future对象中的result方法import asynciofrom functools import partialasync def talk(name): print("talk running!!!") await asyncio.sleep(1) return f"{name} talk"async def sleep(work): print("sleep running!!!") await asyncio.sleep(0

2022-05-07 16:05:37 3928

原创 Selenium无头模式被检测

防检测# coding: utf-8import timeimport refrom bs4 import BeautifulSoupfrom lxml import etreefrom selenium import webdriverfrom selenium.webdriver import ChromeOptionsfrom selenium.webdriver import Chromefrom selenium.webdriver.common.by import Byfro

2022-04-29 15:16:31 1614 2

原创 python的__len__方法使用

__len__方法的作用:使得len()可以检测对象中某个数据得信息;只有一个参数self,用于接收当前对象;必须有返回值,返回值必须是整数;__len__方法得使用:当我们不使用__len__()方法检测对象时,会报TypeError: object of type ‘UseLen’ has no len()错误class UseLen(object): def __init__(self, age): self.age = age self.li =

2022-03-07 19:53:23 4178

原创 python的单例模式

单例模式简介单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问。从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。new()在__init__()之前被调用,用于生成实例对象。利用这个方法和类的属性的特点可以实现设计模式的单例模式。单例模式是指创建唯一对象,单例模式设计的类只能实例。(1)使用__new__方法class Singleton(ob

2022-03-05 14:04:57 1324

原创 python的__call__方法使用

__call__方法的作用:使得“对象”具备当做函数来调用的能力__call__方法的使用:当我们使用下面的代码直接调用创建出来的实例时,会报TypeError: ‘Person’ object is not callable错误:class Person: passp = Person()p()当使用__call__方法时,就可以直接调用创建出来的实例:class Person: def __call__(self, *args, **kwargs):

2022-03-05 10:17:16 354

转载 Python获取多线程的返回值

第一种方式:重写线程类,获取return返回值1.通过自定义线程类,继承Thread类,并重写run方法;2.在run方法中写入执行函数的方法,并把返回值赋值给result;3.然后通过调用get_result获取每个线程的返回值;新建一个ThreadClass.py文件和一个Demo.py文件。其中ThreadClass.py文件中的MyThread是线程类,Demo.py中有两个带有返回值的函数,实例中将func_01()方法,func_02()方法和它们的参数传递给MyThread线程类处理,

2022-03-01 15:11:44 5890

原创 Python的装饰器

装饰器的作用在不改变原有函数的源代码的情况下,给函数增加新的功能装饰器的功能特点:不修改已有函数的源代码给已有函数增加额外的功能# 1.定义一个装饰器(装饰器的本质是闭包)def check(fn): def inner(): print("登录验证。。。") fn() return inner# 需要被装饰的函数def comment(): print("发表评论")# 2.使用装饰器装饰函数(增加一个登录功能)comment

2022-02-26 18:41:23 491

原创 Python的闭包

函数参数概念def func01(): print("func01 is show")# func01()# 函数名存放的是函数所在空间的地址print(func01)# 函数名也可以像普通变量一样赋值func02 = func01func02()# 等价于func02 = func01# func02()def foo(func): func()foo(func01)**结论:**函数名存放的是函数所在空间地址函数名()执行函数名所存放空间地址中的代码func0

2022-02-26 09:22:01 391

原创 Python的生成器和迭代器

什么是迭代器?迭代器是一个让程序员可以遍历一个容器(特别是列表)的对象。然而,一个迭代器在遍历并读取一个容器的数据元素时,并不会执行一个迭代。可迭代对象(Iterable)Python中任意的对象,只要它定义了可以返回一个迭代器的__iter__方法,或者定义了可以支持下标索引的__getitem__方法,那么它就是一个可迭代对象。简单来说,可迭代对象就是能提供迭代器的任意对象。迭代器(Iterator)任意对象只要定义了next或者__next__方法,它就是一个迭代器。迭代(Iteratio

2022-02-23 13:35:41 390

原创 Sql语句中的having和where的区别

having和where区别having是在分组后对数据进行过滤,where是在分组前对数据进行过滤;having后面可以使用分组函数(统计函数)where后面不可以使用分组函数;where是针对分组前记录的条件,如果某行记录没有满足where子句的条件,那么这行记录不会参加分组;而having是针对分组后的数据进行约束;having和where的使用场景结论:当分组筛选的时候用having其他情况用where...

2022-02-22 17:00:30 189

原创 Mysql的CHAR和VARCHAR类型的区别

char和varchar的区别char是一种固定长度的类型,varchar则是一种可变长度的类型char是定长的,也就是当你输入的字符小于你指定的数目时,它会在后面不空值。(查询时结果中空值被去除)varchar的长度为n个字节的可变长度,varchar(8)类型的数据列里,每个值只占用刚好够用的字节,再加上一个用来记录其长度的字节从空间上考虑,用varchar合适;从效率上考虑,用char合适;关键还是要根据实际情况...

2022-02-22 16:51:13 481

原创 python列表去重后保持它们原先的排序

使用列表的sort方法:第一种方式:li1 = ['b','c','d','b','c','a','a']li2 = list(set(li1))li2.sort(key=li1.index)print(li2)打印结果:['b', 'c', 'd', 'a']第二种方式:li1 = ['b','c','d','b','c','a','a']li2 = sorted(set(li1), key=li1.index)print(li2)打印结果:['b', 'c', 'd',

2022-02-15 10:55:05 616

转载 JWT是个啥?JWT的原理和应用

JWT简介JWT:Json Web Token,是基于Json的一个公开规范,这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息,他的两大使用场景是:认证和数据交换使用起来就是,由服务端根据规范生成一个令牌(token),并且发放给客户端。此时客户端请求服务端的时候就可以携带者令牌,以令牌来证明自己的身份信息。作用:类似session保持登录状态 的办法,通过token来代表用户身份。JWT生成JWT校验一些问题token到底生成什么样最好?(规则),每个用户要唯一token

2022-01-27 11:13:50 537

原创 python的@classmethod方法

@classmethod方法使用示例当不使用@classmethod时处理字符串格式问题class DateMethodBefore: def __init__(self,year=0,month=0,day=0): self.day=day self.month=month self.year=year def print_date(self): print(self.year) print(self.m

2022-01-11 20:04:57 3054

转载 Liunx安装配置RabbitMQ

版本选择RabbitMQ 依赖于 erlang 环境,所以先安装 Erlang 注意二者之间的版本依赖,先在 RabbitMQ官网 看清楚当前 RabbitMQ 依赖于的 relang 对应版本信息。这里使用的 RabbitMQ/3.8.22 和 erlang/24.0 这两个版本对应包Erlang 安装来到 Erlang 官网,找到自己需要安装的版本。备注:将下载好的 Erlang ,上传到 linux 服务器上,建议上传到 /usr/local 路径下开始安装步骤# 先到 /u

2022-01-05 15:12:52 137

原创 python操作redis使用pipeline批量读写

简介:随着数据量的增加,对redis的读写速度要求也越来越高。为了满足在秒级取值1000+数据,传统的单任务循环取值,消耗实在太大。因此使用redis特有的功能pipeline管道功能,可以很好的解决。批量插入数据操作import redispool = redis.ConnectionPool(host="20.20.100.133", port=6379, db=7)redis = redis.Redis(connection_pool=pool, decode_responses=True)

2022-01-04 18:39:49 2431

原创 Python的property属性

主要作用将调用类中的方法的方式优化成类似调用类属性的结构优化前:demo:class Money(object): def __init__(self): self.__money = 100 def getMoney(self): return "¥ %d" % self.__money def setMoney(self, value): if isinstance(value, int): self.

2021-12-28 19:18:24 206

原创 import导入模块

import模块导入的方法import xximport xx, yyfrom xx import mmfrom xx import mm, nnimport xx as XX导入模块as的作用import 导入了一个模块并且在当前模块中定义了一个变量引用了导入的模块import搜索路径结构import sysprint(sys.path)运行结果:['/Users/toby/Downloads/PythonAdvanced/code/5.python高级一', '/Users/

2021-12-28 14:11:04 1073

原创 python提取iocs(extract_iocs模块)

简介extract_iocs 是一个 Python 模块,可从文本中提取入侵指标 (IOC),包括域名、IPv4 地址、电子邮件地址和哈希值。它使用了一些巨大而丑陋的正则表达式,具有特殊处理来识别具有相对较低误报率的域名,并尝试通过换行符提取 IOC。第一步下载安装包pip install extract_iocs第二步示例代码import osfrom extract_iocs import extract_iocsdef _get_iocs(text): """Get IOC

2021-11-19 16:12:12 711

原创 python的urlib模块

urlib.request–用于打开URL的可扩展库urlib.request模块定义了适用于在各种复杂情况下打开URL(主要为HTTP)的函数和类–例如基本认证、摘要认证、重定向、cookie及其它。urllib.request模块定义了以下函数:urlib.request.urlopen(url, data=None, [timeout]*, cafile=None, capath=None, cadefault=False, context=None)打开统一资源定位符 url,可以是一个字符

2021-10-22 15:23:48 100

转载 python的协程模块

协程简介协程通过async/await语法进行声明,是编写asyncio应用的推荐方式。如下代码,打印’hello’,等待1秒,再打印’world’:import asyncioasync def main(): print('hello') await asyncio.sleep(1) print('world')asyncio.run(main())# 输出:# hello# world注意:简单地调用一个协程并不会使其被调用执行>>>

2021-10-21 15:03:40 299

原创 报错UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xad in position 47: illegal multibyte sequence

报错的由来:使用python的execjs包运行js文件时,报错如下:很奇怪为什么会报线程的编码错误,明明没有使用线程模块啊!!!解决方式:第一步:点击报错的地方进入subprocess.py包,python的线程源码模块第二步:Ctrl+F进行全局搜索encoding,找到encoding=None位置第三步:将encoding=None修改为encoding='utf-8’即可第四步,运行程序,正常运行,问题解决...

2021-10-15 14:15:42 884

转载 pycharm控制台中执行npm命令,提示node不是内部或外部命令,也不是可运行的程序

问题:pycharm控制台中执行“npm”命令,提示’node’ 不是内部或外部命令,也不是可运行的程序前提条件:windows中的cmd命令行中是支持npm命令的:解决措施1:在idea的terminal中测试其他命令行,看是否是命令行的问题,比如:java -v是否和cmd中的一样,介于此说明命令行没有问题路径:C:\Windows\System32\cmd.exe修改以后重启idea,到此有一部分人问题适应,可以解决解决措施2:修改了环境变量此时尝试重启idea测试,有部分人问

2021-10-15 10:45:14 4159 1

原创 python的+=和=的区别

python的可变类型和不可变类型python的可变变量和不可变变量可变类型:列表,字典不可变类型:数字,字符串,元组可变类型使用+=和=运算:可变类型操作+=时:li1 = [1,2,3]li2 = li1a = [4]li1 += aprint("li1的结果为:", li1)print("li2的结果为:", li2)print("a的结果为:", a)打印结果为:li1的结果为: [1, 2, 3, 4]li2的结果为: [1, 2, 3, 4]a的结果为: [4]

2021-10-14 09:24:15 1183

原创 pycharm快速给header添加单引号和逗号

复制浏览器的Request Headers信息放在程序中,在pycharm中快速格式化这些内容,以保证构造完整的请求头。流程如下:第一步:将浏览器复制headers直接粘贴在空白py文件中第二部:Ctrl+R调出正则匹配工具栏第三步:工具栏第一行输入 (.*?): (.*) 第二行输入'$1': '$2',(最后一个逗号不要省略)第四步:选择regex,然后replace_all完成...

2021-10-13 15:02:56 1605

原创 python的日志记录(自带logging模块和优雅的Loguru第三方模块)

logging模块简介logging模块定义的函数和类为应用程序和库的开发实现了一个灵活的事件日志系统。logging模块是Python的一个标准库模块,由标准库模块提供日志记录API的关键好处是所有Python模块都可以使用这个日志记录功能。所以,你的应用日志可以将你自己的日志信息与来自第三方模块的信息整合起来。logging模块的日志级别最简单的日志输出import logginglogging.debug("This is a debug log.")logging.info("This

2021-10-12 13:56:56 374 1

原创 JavaScript基础知识

Undefined和NullUndefined这个值表示变量不含有值;可以通过将变量的值设置为null来清空变量;声明变量类型当您声明新变量时,可以使用关键词"new"来声明其类型:var a = new String;var b = new Number;var x = new Boolean;var y = new Array;var person = new Object;JavaScript对象javaScript对象是拥有属性和方法的数据属性:car.name = "劳斯

2021-09-22 14:42:40 63

原创 python源文件的字符编码

简介默认情况下,Python 源码文件以 UTF-8 编码方式处理。在这种编码方式中,世界上大多数语言的字符都可以同时用于字符串字面值、变量或函数名称以及注释中——尽管标准库中只用常规的 ASCII 字符作为变量或函数名,而且任何可移植的代码都应该遵守此约定。要正确显示这些字符,你的编辑器必须能识别 UTF-8 编码,而且必须使用能支持打开的文件中所有字符的字体。如果不使用默认编码,要声明文件所使用的编码,文件的 第一行要写成特殊的注释。语法如下所示:# -*- coding: encoding

2021-09-16 09:37:39 432

原创 Googletrans报错调试

How to solve googletrans AttributeError: ‘NoneType’ object has no attribute ‘group’ error解决方法pip uninstall googletranspip install googletrans==3.1.0a0测试代码from googletrans import Translatordetector = Translator()dec_lan = detector.detect('이 문장은 한글로

2021-08-26 19:54:30 181

原创 多线程中Queue模块详细介绍

多线程中Queue的介绍queue 模块实现了多生产者、多消费者队列。这特别适用于消息必须安全地在多线程间交换的线程编程。模块中的 Queue 类实现了所有所需的锁定语义。模块实现了三种类型的队列,它们的区别仅仅是条目取回的顺序。在 FIFO 队列中,先添加的任务先取回。在 LIFO 队列中,最近被添加的条目先取回(操作类似一个堆栈)。优先级队列中,条目将保持排序( 使用 heapq 模块 ) 并且最小值的条目第一个返回。queue模块定义了下列类和异常class queue.Queue(maxsi

2021-08-18 09:35:23 1424

原创 Windows下安装Redis设置为开机启动和远程访问(配置入站规则)

一、下载windows版本的Redis去官网找了很久,发现原来在官网上可以下载的windows版本的,现在官网以及没有下载地址,只能在github上下载,官网只提供linux版本的下载官网下载地址:http://redis.io/downloadgithub下载地址:https://github.com/MSOpenTech/redis/tags二、安装Redis2、启动命令redis-server redis.windows.conf,出现下图显示表示启动成功了。三、设置Redis服务

2021-07-29 08:21:04 1258 1

原创 Docker可视化工具

1.1安装portainer官方安装说明:https://documentation.portainer.io/quickstart/[root@VM-0-3-centos ~]# docker pull portainer/portainerUsing default tag: latestlatest: Pulling from portainer/portainer94cfa856b2b1: Pull complete 49d59ee0881a: Pull complete a2300f

2021-07-03 09:04:06 69

原创 Gerapy框架使用

Gerapy简介基于Scrapy,Scrapyd,Scrapyd-Client,Scrapyd-API,Django和Vue.js的分布式爬虫管理框架。Gerapy用法1.通过pip安装Gerapy:pip3 install gerapy2.查看是否安装成功$gerapy成功信息(env1) [root@nn18 ~]# gerapyUsage: gerapy [-v] [-h] ...Gerapy 0.9.6 - Distributed Crawler Management F

2021-06-16 17:42:57 292

原创 Liunx系统下创建虚拟环境指定python版本

virtualenv是python开发中一个重要的工具,它可以帮助我们创建一个干净的python解释环境,创建虚拟环境时,这个虚拟环境的python版本往往是系统默认的2.x版本。别急,我们只需要一条简单的命令就可以创建一个python3.x的虚拟环境。1.linux下创建virtualenv时指定python版本安装yum install python-virtualenv或者pip安装2.指定python版本创建虚拟环境virtualenv -p /usr/bin/python3 wor

2021-05-30 08:50:11 663

原创 scrapy和scrapy-redis项目中遇到的错误解决方法

scrapy-redis的start_urls支持优先级1.在settings.py中设置这些参数:REDIS_URL = 'redis://:@127.0.0.1:6379/2'REDIS_START_URLS_KEY = '%(name)s:start_urls'REDIS_START_URLS_AS_SET = True2. 在cmd窗口切换到redis目录下如果 REDIS_START_URLS_AS_SET = False命令为 redis-cli lpush 项目名:start

2021-05-28 23:05:05 1658

原创 网络请求库

python爬虫的网络请求库-urllib -request -urlopen() -urlretrieve(fullurl,filename) -Request(url, data=None, headers) -build_opener(*handlers) -HTTPHandler -HTTPCookieProcessor(http.cookiejar.CookieJar()) -ProxyHandler(proxies={}) -parse -quote()

2021-05-08 23:07:58 193

原创 http/https等爬虫代理ip的基本实现原理

http/https等爬虫代理ip的基本实现原理爬虫工作者在试用爬虫进行数据搜集的过程中经常会遇到这样的情况,刚开始的时候爬虫的运行情况是正常的,数据的抓取状况也在有条不紊的进行着,然而可能你一眼照顾不到就会出现错误,比如403 Forbidden,这时候你打开网页的话,网页上面会提示你,“您的IP访问频率太高”这样的字眼。出现这种现象的原因就是被访问网站采取了反爬虫机制,比如,服务器会检测某个IP在单位时间内的请求次数,如果超过了这个阈值,就会直接拒绝服务,返回一些错误信息,这种情况可以称为封IP。那

2021-05-08 12:48:19 1507

ua-master .zip

所有的User-Agent,大约3万左右,自己也方便用。没事爬虫可以拿来切换着用,自己也是在平时生活中积累过来的

2020-06-16

空空如也

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

TA关注的人

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