自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 python 获取视频的时长

方法三:使用ffprobe命令行工具。方法一:使用moviepy库。方法二:使用cv2库。

2024-05-20 10:02:48 126

原创 Scrapy顺序执行多个爬虫

使用subprocess按照顺序执行多个爬虫,新建一个start.py文件,输入一下内容,第一种:bat方式运行。

2024-05-19 18:04:45 97

原创 Scrapy 从创建到运行

其中,myspider_spider是你的爬虫名称,example.com是你希望爬取的网站域名,你可以根据自己的需要进行修改。Scrapy提供了丰富的功能和灵活的扩展性,让你能够快速编写爬虫代码,并高效地从网页中提取所需的数据。其中,myspider_spider是你的爬虫名称,你可以根据自己的设置进行调整。2、Scrapy将开始抓取数据,同时你将在命令行中看到打印出的抓取到的数据。其中,myspider是你的项目名称,你可以根据自己的需要进行修改。1、打开命令行,进入你希望创建项目的目录。

2024-05-19 17:51:59 130

原创 python pymysql 调用存储过程

【代码】pythonpymysql调用存储过程。

2024-05-14 15:40:57 88

原创 scrapy 使用Selenium与Scrapy处理动态加载网页内容的解决方法

在爬虫技术领域,处理动态加载的网页内容常常是一项挑战,尤其是对于那些通过用户滚动或其他交互动态加载更多内容的网站。本文将介绍如何结合使用Selenium和Scrapy来有效处理这类网页。首先,我们探索如何使用Selenium在Scrapy中间件中处理动态加载内容的网页。关键在于模拟用户滚动行为,以加载并捕获所有内容。下面是一个使用Selenium和Scrapy爬取网易新闻的示例。初探Selenium与Scrapy的结合。完整的Scrapy爬虫实例。

2024-05-09 17:26:25 373 1

原创 ThinkPHP5.1 验证器

我们定义一个\app\index\validate\User验证器类用于User的验证。在非控制器的地方如果需要执行批量验证,可以在验证的时候添加是否批量的方法batch()'name.max' => '名称最多不能超过25个字符','age.between' => '年龄只能在1-120之间','email' => '邮箱格式错误','age.number' => '年龄必须是数字','name.require' => '名称必须','email' => '邮箱格式错误',

2024-05-09 08:54:17 410

原创 python selenium 滑动后获取动态追加的元素

使用WebDriverWait和expected_conditions来等待元素加载。执行滑动操作,可以调用execute_script方法来模拟滑动。使用Selenium定位到滑动条元素。

2024-05-08 17:47:06 220 1

原创 thinkphp5.1 模型auto

注意:自动完成的字段名称是在数据库中定义的字段名称,而不是模型属性名称。如果你需要在自动完成中使用更复杂的逻辑,可以在模型中定义setFieldAttr方法,其中Field是大写的字段名。在ThinkPHP5.1中,模型的自动完成功能可以通过在模型类中定义auto属性来实现。这个属性是一个数组,包含了需要自动填充的字段和对应的处理规则。在这个例子中,当创建或更新User模型的记录时,create_time和update_time字段会自动设置为当前的时间戳。

2024-05-08 08:44:33 372

原创 stripe支付

4 'price' => '对应产品目录的API ID',5 'quantity' => 10, // 数量默认为1,我这边产品单价是1,6 ]],7 'mode' => 'payment', // 结账模式 付款8 'success_url' => $YOUR_DOMAIN . '/success.html', // 支付成功跳转的页面。

2024-05-07 16:28:09 885

原创 thinkphp5.1 初始化方法initialize

在Tp5.1中可以使用initialize方法进行控制器的初始化,但是当前控制器需要继承控制器基类 (think\Controller )或者当前控制器继承的类继承了控制器基类(think\Controller ),否则initialize方法无效。如果不继承控制器基类(think\Controller)的同时又使用初始化方法,可以使用__construct代替。c)对于tp5.0版本,控制器初始化方法是_initialize(),模型的初始化方法是initialize()

2024-05-07 15:10:47 158

原创 mysql 启动指定pid 文件位置

MySQL服务启动时,可以指定用于存储进程ID文件的位置。这通常通过在启动服务时使用--pid-file选项来完成。如果你想要改变默认的PID文件位置,可以在my.cnf(在Unix系统上通常位于/etc/my.cnf或/etc/mysql/my.cnf)或my.ini(在Windows系统上)中设置。请确保指定的路径是可写的,并且MySQL进程有权限在该位置创建文件。如果指定的位置已经有一个PID文件存在,MySQL将不会覆盖它,除非它属于同一个MySQL服务实例。

2024-05-07 14:47:58 636 1

原创 thinkphp5.1 模型model命令行创建

该命令将在 common模块目录的model 目录下新建user模型。该命令将在 index模块目录的model 目录下新建user模型。该命令将在 index模块目录的model 目录下新建user模型。

2024-05-07 09:30:04 82

原创 ThinkPHP5.1 创建控制器类

在ThinkPHP中,控制器是MVC模式中的核心组件之一,负责接收用户请求并处理相应的业务逻辑。在本篇技术博客中,我们将深入探讨ThinkPHP5.1中的控制器操作,包括创建控制器、路由绑定、请求参数获取等方面的知识点。1.创建控制器 在ThinkPHP5.1中,我们可以通过使用命令来快速创建控制器。我们可以在新创建的控制器中编写业务逻辑代码。我们可以在新创建的控制器中编写业务逻辑代码。文件夹中创建一个名为。文件夹中创建一个名为。

2024-05-07 08:53:55 269

原创 thinkphp5.1 新建模块

这样,一个新的模块就创建完成了。你可以在NewModule模块下的controller目录中添加控制器文件,在view目录中添加视图文件,并在model目录中添加模型文件(如果需要的话)。现在,你可以通过访问http://your-domain/NewModule/index/index来访问这个控制器方法,它将输出Hello, World!2. 执行上述命令后,会在应用的module目录下创建一个名为NewModule的目录,并生成相应的模块文件结构。在模块目录中创建相应的文件和目录。

2024-05-06 11:07:39 272

原创 JavaScript 上次访问的url

请注意,如果你的网站部署在不同的源(origin),例如从http://example.com跳转到https://example.com,document.referrer可能会因为协议安全性(protocol safety)被浏览器丢弃,这时你可能无法获取到正确的referrer。这个属性只有在通过链接或者脚本跳转到当前页面的情况下才会有值,如果是通过直接输入地址访问的,或者是页面刷新,那么这个属性的值将会是空字符串。

2024-04-30 09:42:50 194 1

原创 uniapp 判断平台

如上代码只会编译到 H5 的发行包里,其他平台的包不会包含如上代码。如有必要,也可以在条件编译里自己定义一个变量,赋不同值。在后续运行代码中动态判断环境。console.log('运行Android上');console.log('运行在开发者工具上');console.log('运行iOS上');alert('只有h5平台才有alert方法');一种是在编译期判断,一种是在运行期判断。平台判断有 2 种场景,

2024-04-23 14:42:37 130

原创 uinapp 开发环境和生产环境

uni-app 可通过 process.env.NODE_ENV 判断当前环境是开发环境还是生产环境。一般用于连接测试服务器或生产服务器的动态切换。console.log('开发环境');console.log('生产环境');

2024-04-23 14:35:10 234

原创 windows10小皮安装不同版本composer,实现自由切换使用

1、使用phpstudy小皮面板安装composer1.8.5和composer2.5.8两个版本;2、打开刚才安装的composer安装目录:D:\phpstudy_pro\Extensions。

2024-04-18 10:28:24 394

原创 Scrapy设置随机User-Agent

大多数情况下,网站都会根据我们的请求头信息来区分你是不是一个爬虫程序,如果一旦识别出这是一个爬虫程序,很容易就会拒绝我们的请求,因此我们需要给我们的爬虫手动添加请求头信息,来模拟浏览器的行为,但是当我们需要大量的爬取某一个网站的时候,一直使用同一个User-Agent显然也是不够的,因此,我们本节的内容就是学习在scrapy中设置随机的User-Agent。而后,在middlewares.py文件中添加如下的信息,这也是我们设置User-Agent的主要逻辑,先上代码再解释。到这里,全部的设置就算完成了,

2024-04-17 13:54:10 1451

原创 Scrapy 中 SPIDER_MIDDLEWARES 和 DOWNLOADER_MIDDLEWARES 的区别

- 下载中间件用于操作向互联网发起请求的request和返回的response,比如修改请求头、修改响应、管理cookies、丢弃非200状态码响应、丢弃非指定域名请求等;-- 一般用于操作 spider 返回的request,比如记录深度、丢弃非200状态码响应、丢弃非指定域名请求等;-- 蜘蛛中间件一般不需要自己编写,使用内置的几个也足够了;1. 下载中间件的方法。2. 蜘蛛中间件的方法。

2024-04-17 10:26:39 377

原创 Python:将CURL并一键转为python爬虫代码

Curl转其他语言:https://curlconverter.com/

2024-04-16 18:22:18 804

原创 javascript 统计按钮点击量

要实现计算按钮被点击的次数,我们可以借助JavaScript中的事件监听器。事件监听器可以帮助我们捕获用户在网页上的各种操作,如点击按钮、输入文本等。通过监听按钮的点击事件,我们可以在每次点击时进行相应的操作,例如增加点击计数。如果页面上存在多个按钮,我们可以为每个按钮创建一个计数器,并在相应的事件监听器中进行操作,以区分不同按钮的点击次数。

2024-04-16 16:10:54 218

原创 php 获取客户端的真实ip地址

在PHP中,可以通过检查一些常见的HTTP头部字段来尝试获取客户端的真实IP地址,但需要注意的是,由于HTTP头部可以被客户端伪造,因此这种方法并不总是可靠。此外,如果有多个IP地址在X-Forwarded-For头部中传递,这个方法只能获取到第一个IP地址,这通常是最直接的客户端IP。接下来,它检查HTTP_X_FORWARDED_FOR,这是一个标准的HTTP头部字段,用于表示通过HTTP代理或负载均衡器转发的原始客户端IP地址。

2024-04-16 15:42:44 354 1

原创 php 如何获取用户在当前页面的停留时间

url: 'your_server_script.php', // 服务器端处理停留时间的PHP脚本的URL。data: { stayTime: stayTime }, // 将停留时间作为数据发送到服务器。// 计算停留时间(毫秒)要获取用户在当前页面的停留时间,你可以使用PHP结合JavaScript来实现。当用户离开页面时,使用JavaScript计算停留时间,并通过AJAX或其他方式将该时间发送到服务器。// 例如使用jQuery的$.ajax()方法。// 使用AJAX将停留时间发送到服务器。

2024-04-16 15:36:29 562

原创 nginx 设置跨域

在这个配置中,我们设置了 Access-Control-Allow-Origin 为 *,允许所有来源的跨域请求。同时,也设置了允许的方法 Access-Control-Allow-Methods 为 GET, POST, OPTIONS。在 Nginx 中设置跨域,可以在 server 配置块中添加相应的 add_header 指令。确保在配置文件中适当地设置这些指令,并在必要时重载或重启 Nginx 以应用更改。nginx 设置跨域。

2024-03-27 14:11:01 349

原创 JavaScript变量提升机制

在JavaScript中,变量提升(Hoisting)是指声明变量时,变量的声明会被提升到其作用域的顶部,但赋值不会被提升。1. JavaScript的变量提升是针对var的,而let和const不存在变量提升这一特性(let与const具有一个临时死区的概念,后续在es6的总结中会提到)3.变量提升就是变量会被提升到作用域的最顶上去,也就是该变量不管是在作用域的哪个地方声明的,都会提升到作用域的最顶上去。包括变量和函数在内的所有声明都会在任何代码被执行前首先被处理,这种现象称为提升。

2024-03-21 09:23:50 333

原创 JS的var和let、const使

在块作用域中两者的区别较为明显, let只在for()循环中可用,而 var是对于包围for循环的整个函数可用。var声明的变量在变量声明之前就可以使用,而let声明的变量只有在变量声明之后才能使用。但是,被let声明的变量不会作为全局对象window的属性,而被var声明的变量却可以。var是ES5标准中声明变量的方式,而let是ES6标准中新增的声明变量的方式。var声明的变量是函数作用域或全局作用域,而let声明的变量是块级作用域。// 函数作用域中的变量。// i 对于for循环外的范围是可见的。

2024-03-20 17:38:13 390

原创 js 闭包

定义在最外层作用域的变量是全局变量,定义在函数内部的变量称为局部变量,由于 JavaScript 的特性,外层的函数无法访问内部函数的变量;在这段代码中,当函数fn1执行并将函数fn2返回后,闭包使得Javascript的垃圾回收机制不会收回函数fn1里num变量所占用的资源(不会被销毁),因为fn1的内部函数fn2的执行需要依赖num变量,所以就出现了每次调用result,num就会自增一。在js中,只有函数内部的子函数才能访问到局部变量,所以,闭包可以理解为"定义在一个函数内部的函数"。

2024-03-20 15:30:12 359

原创 uniapp html变量 直接输出html

这是<b>HTML</b>内容

2024-03-15 17:44:30 583

原创 Linux重命名文件有几种方法

例如,我们有一组文件,命名为file1.txt、file2.txt、file3.txt,我们想将它们重命名为new_file1.txt、new_file2.txt、new_file3.txt。例如,我们有一组文件,命名为file1.txt、file2.txt、file3.txt,我们想将它们的文件名从file改为new_file。除了通配符,还可以使用rename命令进行批量重命名。这将把file1.txt重命名为new_file1.txt,file2.txt重命名为new_file2.txt,以此类推。

2024-03-14 13:37:46 469

原创 uniapp实现点击图片预览放大,长按下载图片

3. 使用uniapp中的 uni.saveImageToPhotosAlbum API 将图片保存到相册。1. 使用uniapp中的 uni.previewImage API 预览图片。2. 使用uniapp中的 uni.downloadFile API 下载图片。

2024-03-13 14:44:32 1084

原创 Promise

Promise是一种用于异步编程的JavaScript对象,它可以解决回调地狱的问题并提供更好的代码可读性和可维护性。Promise可以看做是一种承诺,表示在未来某个时间点会返回一个结果,这个结果可以是成功的,也可以是失败的。Pending(等待状态):Promise对象刚被创建时的初始状态,此时还没有返回结果。Fulfilled(成功状态):当Promise对象返回结果时,进入成功状态,并把结果作为参数传递给后续的then方法。

2024-03-06 10:56:23 782

原创 vue computed计算属性

模板中的表达式虽然方便,但也只能用来做简单的操作;如果在模板中写太多逻辑,会让模板变得臃肿,难以维护;因此我们推荐使用计算属性来描述依赖响应式状态的复杂逻辑1. 选项式 API 中,可以提供computed选项来声明计算属性2. 组合式 API 中,可以通过computed回调函数返回的值来声明计算属性计算属性与方法的区别:●两种方式在结果上确实是完全相同的,不同之处在于计算属性值会基于其响应式依赖被缓存。●一个计算属性仅会在其响应式依赖更新时才重新计算。

2024-03-05 11:33:12 521

原创 vue 侦听器 ---- 组合式 API

【代码】vue 侦听器 ---- 组合式 API。

2024-03-05 10:33:49 802

原创 this.$watch 侦听器 和 停止侦听器

c. flush: 'post':更改回调机制(DOM更新后)语法:this.$watch(data, method, object)b. immediate:创建时立即触发。2. method:回调函数,参数一新值,参数二旧值。1. data:侦听的数据源,类型为String。使用组件实例的$watch()方法来命令式地创建一个侦听器;a. deep:深度侦听。停止侦听器,需要自行停止侦听器,这时可以调用。3.object:配置。它还允许你提前停止该侦听器。

2024-03-04 16:08:31 545

原创 vue 侦听器 ---- 选项式 API

如果我们希望在代码逻辑中监听某个数据的变化,一旦监听到数据发生了变化就做一些业务处理的工作,比如说,用户在文本框中输入内容,会自动去判断该用户名是否可用。此时就需要用侦听器watch来完成了;通俗来说,数据一旦发生了变化就通知侦听器, 从而针对数据的变化做特定的操作,而侦听器本质是一个函数,数据一旦发生变化,就通知侦听器绑定的函数,做一些事情。

2024-03-04 14:54:33 515

原创 vue 内容渲染和属性绑定

这是一个 DIV 元素,{{ student.name }},{{ student.desc }}

2024-03-04 11:11:17 909

原创 vue 组合式API 中响应式变量和普通变量

2.2 使用ref()方法我们可以创建任何类型的响应式数据,获取时需要通过.value来进行获取,当值为对象类型时,会用reactive()自动转换它的 .value。3. 响应式变量和非响应式变量在同一个方法中混合使用的时候,就会都变成了响应式变量。let title = ref("我的第一个组件") // 响应式字符串变量。如果在组合式 API 中直接声明普通变量的数据源,他们并不具备响应式数据。// 普通类型的对象,不具备响应式。// 普通的变量不具备响应式。// 响应式对象变量。

2024-03-04 10:40:25 709

原创 Vue简单认识

Vue是一款用于构建用户界面的JavaScript框架;它基于标准HTMLCSS和JavaScript构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。

2024-03-04 09:19:39 462

原创 Linux 设置/禁止服务开机启动

systemctl is-enabled <服务名>在Linux中,可以使用systemctl命令来管理系统的服务。systemctl restart <服务名>systemctl disable <服务名>systemctl status <服务名>systemctl enable <服务名>systemctl start <服务名>systemctl stop <服务名>9、查看启动失败服务列表。5、设置开机自启动服务。6、禁止开机自启动服务。7、查看是否开机自启动。8、查看已启动服务列表。

2024-03-01 15:56:17 722

植物大战僵尸小游戏JavaScript版

植物大战僵尸小游戏JavaScript版

2024-02-28

空空如也

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

TA关注的人

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