当前位置: 首页 > news >正文

【初识爬虫+requests模块】

爬虫又称网络蜘蛛、网络机器人。本质就是程序模拟人使用浏览器访问网站,并将需要的数据抓取下来。爬虫不仅能够使用在搜索引擎领域,在数据分析、商业领域都得到了大规模的应用。


URL

每一个URL指向一个资源,可以是一个html页面,一个css文档,一个js文件,一张图片等等。

URL的格式:protocol://hostname[:port]/path[?query]

protocol:网络传输协议

hostname:存放资源的服务器的域名或IP地址

port:是一个可选的整数,取值范围是0-65535。如果被省略了,默认http端口为80,https的端口是443。

path:路由地址,一般用来表示主机上的一个目录或文件地址,由零个或多个/符号隔开的字符串,路由地址决定了服务端如何处理这个请求。

query:从?开始到它们之间的部分就是参数,又称搜索部分或者查询字符串。


HTTP协议

HTTP(超文本传输协议)主要作用是让服务端和客户端之间进行数据交互(相互传输数据)。

HTTPS(安全超文本传输协议)是HTTP协议的安全版,对传输数据进行加密。

HTTP请求

请求类别:HTTP协议中定义了八种请求方法。主要了解两种:get和post请求。

get请求:从服务器获取数据下来,并不会对服务器资源产生任何影响的时候使用get请求。

post请求:向服务端发送数据(登录)、上传文件等,会对服务器资源产生影响时使用post请求。

请求头

User-Agent:请求载体的身份标识。在请求一个网页的时候,服务器通过这个参数就可以知道这个请求是由那种浏览器发送的。如果我们是通过爬虫发送请求,那么我们的User-Agent就是Python。不过对于有反爬虫机制的网站来说,这样就可以轻易的判断这个请求时爬虫。因此,我们要设置这个值为一些浏览器的值,来伪装我们的爬虫。

Cookie:对应的是一个用户的信息,http协议是无状态的。也就是同一个人发送了两次请求,服务器没有能力知道这两个请求是否来自同一个人,因此这时候就用cookie来做标识。

请求体:提交的内容

HTTP响应

响应行:反馈基本的响应情况

常见的响应状态码:

200:请求正常,服务器正常的返回数据

302:临时重定向。比如在访问一个需要登录的页面的时,而此时没有登录,就会重定向到登陆页面。

400:请求的url在服务器上找不到。换句话说就是请求url错误。

403:服务器拒绝访问,权限不够。

500:服务器内部错误。

响应头:对响应内容的描述。

Content-Length:服务器通过这个头,告诉浏览器回送数据的长度。

Content-Type: 服务器通过这个头,告诉浏览器回送数据的类型。


编写爬虫的基础流程

1.确定你要获取的数据,确定需要爬取的URL地址。

        网页上数据有的是通过js动态加载出来的。使用Ajax。

2.使用请求模块向URL地址发出请求,并得到响应内容。

        通过代码去发送请求

3.从响应内容中提取所需数据。

4.存储

在python的html后缀名下的文件内中写:

<script>let xhr = new XMLHttpRequest()xhr.open('GET', 'http://yu.ming(全是数字的那一串)/curl/getIp')//发送请求xhr.send()xhr.onload = function(){//jsonlet data = JSON.parse(xhr.reponse)let span1 = document.createElement('span')let span2 = document.createElement('span')span1.innerHTML = 'ip:' + data.returnCitySN.ip + '<br>'span2.innerHTML = '地址' + data.returnCitySN.Country + '<br>'document.body.appendChild(span1)document.body.appendChild(span2)}
</script>

requests模块

在cmd窗口下pip install requests来导入第三方模块,或者在pycharm内file的setting下Python Interpreter内进行下载。

requests模块的使用

1.requests.get():表示向网站发送GET请求,获取页面响应对象。

语法:

response=requests.get(url,headers=headers,params)

url:要抓取的url地址

headers:用于包装请求头信息

params:请求时携带的查询字符串参数

2.HttpResponse响应对象:我们使用requests模块向一个URL发起请求后会返回这样的对象。

响应对象属性:

text:获取相应内容字符串类型

content:获取响应内容bytes类型(抓取图片、音频、视频文件)

encoding:查看或指定响应字符编码

request.headers:查看响应对应的请求头

cookies:获取响应的cookie,经过set-cookie动作,返回coookieJar类型

json():将json字符串类型的响应内容转换为python对象

import requests
url = 'https://www.maoyan.com/board/6?timeStamp=1707033337406&channelId=40011&index=7&signKey=05c5030979de1a94fc40756853de3ca4&sVersion=1&webdriver=false&offset=0'# 使用requests 帮我们发送一个get请求
response = requests.get(url)    # get函数内放置url参数,获取响应内容并用一个变量来接收
print(response.request.headers)   # 获取请求头
print(response.text)     # 获取响应内容(可能会被反爬虫阻拦获取不到。此时就需要伪装一下了)

3.发送带header的请求

import requests
url = 'https://www.jd.com/?cu=true&utm_source=baidu-pinzhuan&utm_medium=cpc&utm_campaign=t_288551095_baidupinzhuan&utm_term=0f3d30c8dba7459bb52f2eb5eba8ac7d_0_0210197b670445ddbba4fb6fe8baceb0'
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'
}
response = requests.get(url, headers=header)
print(response.text)
'''
正则的定义:按照一定的规则,在字符串里面匹配要找的内容
如何使用正则:导入re文件
'''
import re
# findall:找到所有满足条件的数据,得到一个列表  
re.findall()# . 匹配一个任意字符 除了换行
# re.S 使. 可以匹配到换行符   
re.findall('a.','aba\naa',re.S)# * 出现0次或多次   
re.findall('a*','aba\naa')# .*贪婪匹配(尽量多匹配)   
html = '<div></div>'  print(re.findall('<.*>',html))
# 得到结果:['<div></div>']# .*?非贪婪匹配(尽量少匹配) 
html = '<div></div>'  print(re.findall('<.*?>',html))
# 得到结果:['<div>', '</div>']# 把想要的东西加括号,提取出来
html = '<div>XX</div>'
print(re.findall('<div>(.*?)</div>', html))   # ['XX']

关于完整使用:

import requests
base_url = 'https://movie.douban.com/chart'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'
}def get_html(url):# 发送请求功能response = requests.get(url, headers=headers)return response.textdef parse_html(html):# 提取数据功能r_list = re.findall('<div class="pl2">.*?>\n(.*?)/.*?</a>.*?<span class="rating_nums">(.*?)</span>', html, re.S)return r_listdef save(data_list):# 存储数据功能for data in data_list:name = data[0].strip()  # 去除两边空格num = data[1]print(name, num)print('-'*30)html = get_html(base_url)
# print(html)
data_list = parse_html(html)
save(data_list)

结果:

怪物 8.6
------------------------------
荒野 5.7
------------------------------
涉过愤怒的海 7.2
------------------------------
枯叶 7.9
------------------------------
坠落的审判 8.5
------------------------------
爆裂点 5.7
------------------------------
再见,李可乐 6.3
------------------------------
杂种 8.2
------------------------------
刀尖 5.3
------------------------------
花月杀手 7.3
------------------------------

存储数据到mysql内

首先导入第三方模块pymysql

写法一:

import pymysql
# 导入模块
# 建立数据库的链接
db = pymysql.connect(host='127.0.0.1',port=3306,database='douban',user='root',password='123456',charset='utf8'
)# 创建数据库 create database douban;(终端要输入的,否则会报错)
# 创建游标对象  通过游标对象去操作
cur = db.cursor()
# 执行操作
sql = 'insert into movie_info(name, num) values("%s", "%f")' % ('怪物', 8.6)
cur.execute(sql)
db.commit()
'''
创建表的语法:
create table movie_info(
id int primary key auto_increment,
name varchar(20),
num float(5)
);
'''
# 关闭游标对象
cur.close()
# 关闭连接
db.close()

注意:

  1. 创建数据库和创建表的代码要在cmd的mysql内部进行。
  2. 在创建表之前先使用表:use douban;
  3. 小数记得用 %f 哦.

写法二:

全部写入进该表中:

import reimport requestsimport pymysql# 建立数据库的链接
db = pymysql.connect(host='127.0.0.1',port=3306,database='douban',user='root',password='123456',charset='utf8'
)cur = db.cursor()
sql = 'insert into movie_info(name, num) values("%s", "%s")'base_url = 'https://movie.douban.com/chart'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'
}def get_html(url):# 发送请求功能response = requests.get(url, headers=headers)return response.textdef parse_html(html):# 提取数据功能r_list = re.findall('<div class="pl2">.*?>\n(.*?)/.*?</a>.*?<span class="rating_nums">(.*?)</span>', html, re.S)return r_listdef save(data_list):# 存储数据功能for data in data_list:name = data[0].strip()  # 去除两边空格num = data[1]print(name, num)li = [name, num]cur.execute(sql, li)db.commit()print('-'*30)html = get_html(base_url)
# print(html)
data_list = parse_html(html)
save(data_list)
# 关闭游标对象
cur.close()
# 关闭连接
db.close()

注意:前面已经写入的内容要进行删除,不然会报错的(主键的唯一性)。

import reimport requestsimport pymysql# 建立数据库的链接
db = pymysql.connect(host='127.0.0.1',port=3306,database='douban',user='root',password='123456',charset='utf8'
)cur = db.cursor()
sql = 'insert into movie_info(name, num) values("%s", "%f")'base_url = 'https://movie.douban.com/top250?start={}&filter='  # {}切换页数
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'
}
def get_html(url):# 发送请求功能response = requests.get(url, headers=headers)return response.textdef parse_html(html):# 提取数据功能r_list = re.findall('<div class="pl2">.*?>\n(.*?)/.*?</a>.*?<span class="rating_nums">(.*?)</span>', html, re.S)save(r_list)def save(data_list):# 存储数据功能for data in data_list:name = data[0].strip()  # 去除两边空格num = data[1]print(name, num)li = [name, num]cur.execute(sql, li)db.commit()print('-'*30)# 对爬取的内容找规律
for start in range(0, 226, 25):url = base_url.format(start)print(url)html = get_html(url)parse_html(html)cur.close()
db.close()

使用json来提取数据

import requests
import jsonurl = 'https://spa1.scrape.center/api/movie/?limit=10&offset=0'
response = requests.get(url)json_data = response.json()   # 用json对象来进行接收
for data in json_data["results"]:print(data["name"])print(data["categories"])print('-'*30)

换页提取:

第一种方式:

import reimport requestsbase_url = 'https://www.maoyan.com/board/4?offset={}'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'
}def get_html(url):'''通过requests模块发送get请求:param url: 给那个url发送请求:return: html代码'''response = requests.get(url, headers=headers)print(response.url)return response.textdef parse_html(html):'''提取数据的函数:param html: 在那个代码中寻找'''r_list = re.findall('<div class="movie-item-info">.*?title="(.*?)".*?<p class="star">(.*?)</p>.*?<p class="releasetime">(.*?)</p>', html, re.S)save(r_list)def save(data_list):for data in data_list:li = [data[0],data[1].split(':')[1].strip(),data[2].split(':')[1].strip(),]print(li)for offset in range(0, 91, 10):url = base_url.format(offset)html = get_html(url=url)parse_html(html)print('-'*100)

第二种方式:

import reimport requestsbase_url = 'https://www.maoyan.com/board/4'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'
}params = {"offset": 0
}
def get_html(url):'''通过requests模块发送get请求:param url: 给那个url发送请求:return: html代码'''response = requests.get(url, headers=headers, params=params)print(response.url)return response.textdef parse_html(html):'''提取数据的函数:param html: 在那个代码中寻找'''r_list = re.findall('<div class="movie-item-info">.*?title="(.*?)".*?<p class="star">(.*?)</p>.*?<p class="releasetime">(.*?)</p>', html, re.S)save(r_list)def save(data_list):for data in data_list:li = [data[0],data[1].split(':')[1].strip(),data[2].split(':')[1].strip(),]print(li)for offset in range(0, 91, 10):params['offset'] = offsethtml = get_html(url=base_url)parse_html(html)print('-'*100)

https://curlconverter.com/#

代码复制copy的代码可自动生成


爬取音乐

import requestsresponse = requests.get('https://音乐所在网址')
print("请求成功")
song_data = response.content
with open('疑心病.mp3', 'wb')as f:f.write(song_data)

会添加到pycharm内,拖拽到桌面上即可。

相关文章:

【初识爬虫+requests模块】

爬虫又称网络蜘蛛、网络机器人。本质就是程序模拟人使用浏览器访问网站&#xff0c;并将需要的数据抓取下来。爬虫不仅能够使用在搜索引擎领域&#xff0c;在数据分析、商业领域都得到了大规模的应用。 URL 每一个URL指向一个资源&#xff0c;可以是一个html页面&#xff0c;一…...

微信小程序(三十八)滚动容器

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.滚动触底事件 2.下拉刷新事件 源码&#xff1a; index.wxml <view class"Area"> <!-- scroll-y 垂直滚动refresher-enabled 允许刷新bindrefresherrefresh 绑定刷新作用函数bindscrollto…...

Python学习之路-Tornado基础:数据库

Python学习之路-Tornado基础:数据库 简介 与Django框架相比&#xff0c;Tornado没有自带ORM&#xff0c;对于数据库需要自己去适配。我们使用MySQL数据库。 在Tornado3.0版本以前提供tornado.database模块用来操作MySQL数据库&#xff0c;而从3.0版本开始&#xff0c;此模块…...

Golang的for循环变量和goroutine的陷阱,1.22版本的更新

先来看一段golang 1.22版本之前的for循环的代码 package mainimport "fmt"func main() {done : make(chan bool)values : []string{"chen", "hai", "feng"}for _, v : range values {fmt.Println("start")go func() {fmt.P…...

List 差集

文章目录 基本类型对象类型 基本类型 ListUtils.subtract 方法用于计算两个集合的差集&#xff0c;即返回 list1 中有但 list2 中没有的元素。 其中&#xff0c;list1 指向第一个集合&#xff0c;list2 指向第二个集合。该方法返回一个新的 List 对象&#xff0c;它包含所有在…...

ArcGIS的UTM与高斯-克吕格投影分带要点总结

UTM&#xff08;通用横轴墨卡托投影、等角横轴割椭圆柱投影&#xff09;投影分带投影要点&#xff1a; 1&#xff09;UTM投影采用6度分带 2&#xff09;可根据公式计算&#xff0c;带数&#xff08;经度整数位/6&#xff09;的整数部分31 3&#xff09;北半球地区&#xff0…...

华为第二批难题一:基于预训练AI模型的元件库生成

我的理解&#xff1a;华为的这个难道应该是想通过大模型技术&#xff0c;识别元件手册上的图文内容&#xff0c;与现有建库工具结合&#xff0c;有潜力按标准生成各种库模型。 正好&#xff0c;我们正在研究&#xff0c;利用知识图谱技术快速生成装配模型&#xff0c;其中也涉…...

Android AOSP源码研究之万事开头难----经验教训记录

文章目录 1.概述2.Android源下载1.配置环境变量2.安装curl3.下载repo并授权4.创建一个文件夹保存源码5.设置repo的地址并配置为清华源6.初始化仓库7.指定我们需要下载的源码分支并初始化 2.1 使用移动硬盘存放Android源码的坑2.2 解决方法 3.Android源码编译4.Android源烧录 1.…...

动态数据源

一、部署 1、导入依赖 <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.1.0</version></dependency>2、编写yml 配置文件 spring:datasource:dyna…...

2024.1.29力扣每日一题——自由之路

2024.1.29 题目来源我的题解方法一 动态规划 题目来源 力扣每日一题&#xff1b;题序&#xff1a;514 我的题解 方法一 动态规划 定义 dp[i][j] 表示从前往后拼写出 key的第 i个字符&#xff0c; ring 的第 j个字符与 12:00 方向对齐的最少步数&#xff08;下标均从 0 开始&…...

Qt应用软件【协议篇】UDP示例

UDP协议简介 UDP(用户数据报协议)是一种无连接的网络协议,提供了简单但是不可靠的消息传输服务。与TCP不同,UDP不保证数据包的顺序、重复性或者可达性,但它在速度和效率上具有优势,特别适合那些对实时性要求高的应用,如视频流、在线游戏等。 Qt中的UDP编程 在Qt中,U…...

MyBatis之动态代理实现增删改查以及MyBatis-config.xml中读取DB信息文件和SQL中JavaBean别名配置

MyBatis之环境搭建以及实现增删改查 前言实现步骤1. 编写MyBatis-config.xml配置文件2. 编写Mapper.xml文件&#xff08;增删改查SQL文&#xff09;3. 定义PeronMapper接口4. 编写测试类1. 执行步骤2. 代码实例3. 运行log 开发环境构造图总结 前言 上一篇文章&#xff0c;我们…...

百面嵌入式专栏(面试题)内存管理相关面试题1.0

沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们将介绍内存管理相关面试题 。 一、内存管理相关面试题 page数据结构中的_refcount和_mapcount有什么区别?匿名页面和高速缓存页面有什么区别?page数据结构中有一个锁,我们称为页锁,请问trylock_page()和loc…...

SpringMVC 1.请求参数检查 2.全局异常处理 3.请求参数封装为Pojo

ErrorEnum.java // 枚举所有的错误 package com.example.demo.enums;import lombok.Getter;public enum ErrorEnum {SYSTEM_ERROR(-1, "系统错误"),PARAM_ERROR(-2, "参数错误"),OK(0, "成功"),;Getterprivate final int code;Getterprivate fi…...

7机器人位姿的数学描述与坐标变

由上次刚体的空间转动直接切换为机器人相关术语。 1.机器人位姿的数学描述与坐标变换 1.1位姿描述 {B}相对于{A}的姿态描述用3x3矩阵表示为&#xff1a; 式中为三个单位正交主矢量&#xff0c;分别表示刚体坐标系{B}的三个坐标轴XBYBZB在参考系{A}中的方位&#xff0c;∠XBXA表…...

基于ESP8266 开发板(MCU)遥控小车

遥控小车 ​ 遥控界面 ​ 【项目源码】 第一版ESP8266 https://github.com/liyinchigithub/esp8266_car_webServerhttps://github.com/liyinchigithub/esp8266_car_webServer 第二版ESP32 GitHub - liyinchigithub/esp32-wroom-car: 嵌入式单片机 ESP32 Arduino 遥控小车&a…...

【C生万物】C语言数据类型、变量和运算符

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有…...

CTF--Web安全--SQL注入之‘绕过方法’

一、什么是绕过注入 众所周知&#xff0c;SQL注入是利用源码中的漏洞进行注入的&#xff0c;但是有攻击手段&#xff0c;就会有防御手段。很多题目和网站会在源码中设置反SQL注入的机制。SQL注入中常用的命令&#xff0c;符号&#xff0c;甚至空格&#xff0c;会在反SQL机制中…...

线程池常用的阻塞队列

新任务来的时候&#xff0c;会先判断当前运行的线程数量是否达到核心线程数&#xff0c;如果达到的话&#xff0c;新任务就会被存放在队列中。 不同的线程池会选用不同的阻塞队列&#xff0c;我们可以结合内置线程池来分析。 ● 容量为 Integer.MAX_VALUE 的 LinkedBlockingQue…...

【Java EE】----SpringBoot的日志文件

1.SpringBoot使用日志 先得到日志对象通过日志对象提供的方法进行打印 2.打印日志的信息 3.日志级别 作用&#xff1a; 可以筛选出重要的信息不同环境实现不同日志级别的需求 ⽇志的级别分为&#xff1a;&#xff08;1-6级别从低到高&#xff09; trace&#xff1a;微量&#…...

【网络安全】2024年暗网威胁分析及发展预测

暗网因其非法活动而臭名昭著&#xff0c;现已发展成为一个用于各种非法目的的地下网络市场。 它是网络犯罪分子的中心&#xff0c;为被盗数据交易、黑客服务和邪恶活动合作提供了机会。为了帮助企业组织更好地了解暗网发展形势&#xff0c;近日&#xff0c;卡巴斯基的安全研究…...

SpringMVC-组件解析

一、引子 我们在上一篇文章Spring MVC-基本概念中&#xff0c;为读者解释了如何使用SpringMVC框架&#xff0c;将承接客户端请求的工作从原生的Servlet转移到我们熟知的Controller中。那么我们不禁会好奇&#xff0c;SpringMVC框架到底做了什么&#xff0c;是怎么把请求分发给…...

ubuntu22.04@laptop OpenCV Get Started: 002_reading_writing_videos

ubuntu22.04laptop OpenCV Get Started: 002_reading_writing_videos 1. 源由2. Read/Display/Write应用Demo3 video_read_from_file3.1 C应用Demo3.2 Python应用Demo3.3 重点过程分析3.3.1 读取视频文件3.3.2 读取文件信息3.3.3 帧读取&显示 4 video_read_from_image_sequ…...

Elasticsearch(ES) 简述请求操作索引下文档 增删查改操作

上文 Elasticsearch(ES) 创建带有分词器规则的索引 带着大家创建了一个带有分词功能的索引 老规矩 我们启动一下ES服务 本文 我们就来说说 关于文档的操作 我们先来添加一个文档 就像数据库加一条数据一样 这里 并不需要指定什么表结构和数据结构 它的文档结构是无模式的 添…...

Chrome扩展开发纪要

1. 开发人员模式 以Edge(Chromium)为例, 可在管理扩展页, 在左侧开发人员模式打开, 只有此项开启后才能加载未压缩的扩展, 虽然也可以打包扩展, 但是浏览器会检测, 未上线的crx包是无法被安装的. 所以不打算上架的crx只能使用 加载解压缩的扩展 安装 2. 创建扩展 2.1 建立文…...

LeetCode-第28题-找出字符串中第一个匹配项的下标

1.题目描述 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。 2.样例描述 3.思路描述 可以让字符串 …...

分享90个行业PPT,总有一款适合您

分享90个行业PPT&#xff0c;总有一款适合您 90个行业PPT下载链接&#xff1a;https://pan.baidu.com/s/1bHvhk_42-IFAjNdjPPtMZw?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易…...

【原创 附源码】Flutter海外登录--Tiktok登录最详细流程

最近接触了几个海外登录的平台&#xff0c;踩了很多坑&#xff0c;也总结了很多东西&#xff0c;决定记录下来给路过的兄弟坐个参考&#xff0c;也留着以后留着回顾。更新时间为2024年2月7日&#xff0c;后续集成方式可能会有变动&#xff0c;所以目前的集成流程仅供参考&#…...

国内chatGPT3.5升级到chatGPT4.0的教程(24年2月更新)

最新的充值方法看这里。 通过虚拟卡 WildCard 的方式来升级 GPT 4.0 最快了&#xff0c;大概2分钟就可以升级完成, 而且升级 GPT 4.0 价钱也不贵&#xff0c;虚拟卡一年10美元&#xff0c;GPT4 每个月也才 20美元。如果你觉得 GPT 4.0 对你可能有帮助&#xff0c;那就赶快来升级…...

【python量化交易】qteasy使用教程01 - 安装方法及初始化配置

qteasy教程1 - 安装方法及初始化配置 qteasy教程1 - 安装方法及初始配置qteasy安装前的准备工作1&#xff0c; 创建安装环境2&#xff0c;安装MySQL数据库 (可选)安装pymysql 3&#xff0c;创建tushare账号并获取API token (可选)4&#xff0c;安装TA-lib (可选)WindowsMac OSL…...

UML 2.5图形库

UML 2.5图形库 drawio是一款强大的图表绘制软件&#xff0c;支持在线云端版本以及windows, macOS, linux安装版。 如果想在线直接使用&#xff0c;则直接输入网址drawon.cn或者使用drawon(桌案), drawon.cn内部完整的集成了drawio的所有功能&#xff0c;并实现了云端存储&#…...

分享springboot框架的一个开源的本地开发部署教程(若依开源项目开发部署过程分享持续更新二开宝藏项目PostgresSQL数据库版)

1首先介绍下若依项目&#xff1a; 若依是一个基于Spring Boot和Spring Cloud技术栈开发的多租户权限管理系统。该开源项目提供了一套完整的权限管理解决方案&#xff0c;包括用户管理、角色管理、菜单管理、部门管理、岗位管理等功能。 若依项目采用前后端分离的架构&#xf…...

打卡今天学习 Linux

过年了&#xff0c;祝大家过年快乐 在今天的学习中&#xff0c;我们涉及了一些关键的 Linux 系统管理知识点&#xff0c;包括 systemctl、IP 地址配置、域名解析、映射的创建、软链接等。让我们简要回顾一下这些主题。 1. systemctl systemctl 是一个强大的 Linux 系统管理工…...

单片机精进之路-3流水灯

P1代表单片机的P1口的8个io的寄存器&#xff0c;使用_crol_函数&#xff1a;将 k进行1位左位移&#xff0c;并将值以unsigned char类型返回&#xff0c;再将K的值赋给P1&#xff0c;这样就点亮了P1口对应的IO为低电平的led灯。 //flow light and beep #include <reg51.h>…...

c# File.WriteAllLines 和 File.WriteAllText

File.WriteAllLines 和 File.WriteAllText 都是 C# 中用于写入文本文件的方法&#xff0c;但它们有一些区别。 1. File.WriteAllLines 方法&#xff1a; File.WriteAllLines 方法用于将字符串数组的内容按行写入文本文件。每个数组元素都被写入文件的一行&#xff0c;且方法会…...

linux系统定时任务管理

crontab使用 一、crontab简介 crontab 这个指令所设置的工作将会循环的一直进行下去&#xff01;可循环的时间为分钟、小时、每周、每月或每年等。crontab 除了可以使用指令执行外&#xff0c;亦可编辑 /etc/crontab 来支持。 至于让 crontab 可以生效的服务则是 crond 这个服…...

mysql的慢sql优化

为什么要优化慢sql &#xff1f; 慢sql会长时间占用 数据库连接数&#xff0c;如果项目中有大量的慢sql&#xff0c;那么可用的数据库连接数就会变少&#xff0c;进而会影响业务。 慢sql优化 优化慢sql&#xff0c;最常见的就是添加索引。查询语句中不要使用select *尽量减少…...

排序算法---插入排序

原创不易&#xff0c;转载请注明出处。欢迎点赞收藏~ 插入排序是一种简单直观的排序算法&#xff0c;它的基本思想是将待排序的元素分为已排序和未排序两部分&#xff0c;每次从未排序部分中选择一个元素插入到已排序部分的合适位置&#xff0c;直到所有元素都插入到已排序部分…...

迷你世界勒索病毒,你的文件被删了吗?

前言 笔者在某恶意软件沙箱平台分析样本的时候&#xff0c;发现了一款比较有意思的勒索病毒MiniWorld迷你世界勒索病毒&#xff0c;它的解密界面与此前的WannaCry勒索病毒的界面相似&#xff0c;应该是作者仿冒的WannaCry的UI&#xff0c;如下所示&#xff1a; 这款勒索病毒既…...

QT styleSheet——控件设置样式表

QT开发中&#xff0c;需要设置多种多样的控件表现形式&#xff0c;QT实现的styleSheet能够满足多种多样的场景&#xff0c;这里简单的记录下一些我常用的 设置透明背景&#xff0c;鼠标悬浮时&#xff0c;设置背景色&#xff1a; pushButton->setStyleSheet("QPushBu…...

Linux学习

1 Linux的目录结构介绍 bin存放常用的命令etc存放配置文件bootlinux启动的文件home存放用户lib存放动态库&#xff0c;给应用程序使用lostfound一般是空的&#xff0c;但系统异常关机会产生文件media自动挂载&#xff0c;如u盘&#xff0c;光盘mnt手动挂载&#xff0c;一般自己…...

MFC研发自验用例编写应注意哪些关键测试点

MFC&#xff08;Microsoft Foundation Classes&#xff09;是一个用于开发Windows应用程序的C类库。在MFC应用程序的研发过程中&#xff0c;自验用例&#xff08;自我验证测试用例&#xff09;的编写是非常重要的一环&#xff0c;它有助于确保代码的质量、稳定性和功能正确性。…...

ChatGPT升级版本GPT-4V(ision)支持多模态语音和图像

ChatGPT升级指南&#xff1a;迎接GPT-4V(ision)的全新多模态时代 ChatGPT最新升级引入了GPT-4V(ision)&#xff0c;这是一个突破性的多模态版本&#xff0c;支持语音和图像输入。现在&#xff0c;用户可以与ChatGPT进行更加丰富和互动的对话。以下是您升级到GPT-4V(ision)所需…...

机器人搬砖 - 华为OD统一考试

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 100分 题解&#xff1a; Java / Python / C 题目描述 机器人搬砖&#xff0c;一共有N堆砖存放在N个不同的仓库中&#xff0c;第 i 堆中有 bricks[i] 块砖头&#xff0c;要求在8小时内搬完。 机器人每小时能搬砖的数量…...

10分钟快速入门正则表达式

在力扣上看了一本付费书籍&#xff0c;终于让我入门了正则表达事... 问题&#xff1a; "^1[3-9]\\d{9}$" 是啥意思 读完本篇小笔记&#xff0c;你就知道&#xff0c;啥是"^1[3-9]\\d{9}$" 这个是啥意思了。 首先&#xff0c;正则表达式&#xff0c;这个名…...

【C++】C++的简要介绍

简单不先于复杂&#xff0c;而是在复杂之后。 文章目录 1. 什么是C2. C的发展史3. C的重要性3.1 语言的使用广泛度3.2 在工作领域3.3 在校招领域3.3.1 岗位需求3.3.2 笔试题 3.3.3 面试题 4. 如何学习C4.1 别人怎么学&#xff1f; 1. 什么是C C语言是结构化和模块化的语言&…...

Golang数据库编程详解 | 深入浅出Go语言原生数据库编程

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站https://www.captainbed.cn/kitie。 Golang学习专栏&#xff1a;https://blog.csdn.net/qq_35716689/category_12575301.html 前言 对数据库…...

《游戏引擎架构》 -- 学习2

声明&#xff0c;定义&#xff0c;以及链接规范 翻译单元 声明与定义 链接规范 C/C 内存布局 可执行映像 程序堆栈 动态分配的堆 对象的内存布局 kilobyte 和 kibibyte 流水线缓存以及优化 未完待续。。。...

#Js篇:js里面递归的理解

定义&#xff1a; 递归是一种编程技术&#xff0c;它是指一个函数在其定义内部调用自身的过程。 特点&#xff1a; 一个问题可以分解为更小的问题用同样的方法解决&#xff1b;分解后的子问题求解方式一样&#xff0c;不同的是数据规模变小&#xff1b;存在递归终止条件 作…...

Qt博客目录

一.Qt安装配置和创建项目 Qt所有版本下载地址 Qt安装配置教程windows版&#xff08;包括&#xff1a;Qt5.8.0版本&#xff0c;Qt5.12&#xff0c;Qt5.14版本下载安装教程&#xff09;&#xff08;亲测可行&#xff09; QT从入门到入土&#xff08;一&#xff09;——Qt5.14.…...