Python 获取微博用户信息及作品(完整版)
在当今的社交媒体时代,微博作为一个热门的社交平台,蕴含着海量的用户信息和丰富多样的内容。今天,我将带大家深入了解一段 Python 代码,它能够帮助我们获取微博用户的基本信息以及下载其微博中的相关素材,比如图片等。
结果展示(文末附完整代码):
目录
结果展示(文末附完整代码):
一、代码整体介绍
二、代码准备与环境搭建
三、Weibo类的初始化方法(__init__)
1. 设置请求头(headers)
2. 设置 Cookies
四、获取用户基本信息的方法(Get和parse_user_info)
1. Get方法
2. parse_user_info方法
五、解析用户作品相关信息的方法(parse_statuses)
1. parse_statuses方法概述
2. 请求数据
3. 解析数据
六、创建文件夹路径并下载素材的方法(create_folder_path和download_video_with_requests)
1. create_folder_path方法
2. download_video_with_requests方法
七、运行代码(Run方法)
八、总结
全部代码:
注意:
一、代码整体介绍
我们先来看一下这段代码的整体结构。这段代码定义了一个名为Weibo
的类,在这个类中包含了多个方法,每个方法都承担着特定的功能,共同协作实现了从获取用户信息到解析并下载相关素材的完整流程。
二、代码准备与环境搭建
在开始详细讲解代码功能之前,确保你已经安装了以下必要的库:
os
:用于操作系统相关的操作,比如创建文件夹等。random
:虽然在这段代码中可能没有明显体现其主要作用,但它是 Python 中常用的随机数处理库,说不定在后续扩展功能时会用到哦。re
:正则表达式库,用于处理文本中的匹配等操作,不过在当前代码的主要逻辑里暂时未突出其作用。requests
:这是一个非常重要的库,用于发送 HTTP 请求,我们通过它来与微博的服务器进行交互,获取数据。tqdm
:用于在控制台显示进度条,让我们能直观地看到下载等操作的进度情况。
如果你还没有安装这些库,可以通过以下命令在命令行中进行安装(假设你已经安装了 Python 并且配置好了相应的环境):
pip install requests tqdm
三、Weibo
类的初始化方法(__init__
)
当我们创建Weibo
类的实例时,首先会执行__init__
方法。这个方法主要做了两件重要的事情:
1. 设置请求头(headers
)
请求头是我们在向微博服务器发送请求时附带的一些信息,它告诉服务器我们的客户端相关情况,比如使用的浏览器类型、版本等。在这段代码中,设置了如下的请求头信息:
self.headers = {
'填入你的headers'
}
这些信息模仿了一个常见的浏览器请求设置,有助于我们顺利地从微博服务器获取数据,避免因为请求头设置不当而被服务器拒绝访问。
2. 设置 Cookies
Cookies 是服务器在我们访问网页时发送给客户端的一些小数据块,它可以保存一些用户相关的信息,比如登录状态等。在代码中,我们设置了如下的 Cookies 信息:
self.cookies = {'填入你的cookies'
}
这里的 Cookies 信息应该是在你之前登录微博或者通过其他合法途径获取到的,它能让服务器识别我们的身份或者提供一些特定的权限,以便获取更多的用户相关数据。
四、获取用户基本信息的方法(Get
和parse_user_info
)
1. Get
方法
Get
方法接受一个参数uid
,这个参数就是微博用户的 ID。在这个方法中,我们首先构建了一个请求的 URL,用于获取用户的基本信息:
url = "https://weibo.com/ajax/profile/info"
params = {"uid": uid
}
response = requests.get(url, headers=self.headers, cookies=self.cookies, params=params).json()
self.parse_user_info(response)
这里通过requests
库发送了一个 GET 请求到指定的 URL,并带上了设置好的请求头、Cookies 以及用户 ID 作为参数。获取到响应后,我们将其转换为 JSON 格式,然后调用parse_user_info
方法来进一步解析这些数据。
2. parse_user_info
方法
这个方法主要负责解析从服务器获取到的用户基本信息。它从响应数据中提取出了以下关键信息:
- 用户名称:通过
Weibo_name = response.get('data').get('user').get('screen_name')
获取。 - 用户粉丝数量:
followers_count = response.get('data').get('user').get('followers_count')
。 - 用户关注数量:
follow_count = response.get('data').get('user').get('friends_count')
。 - 用户描述信息:
description = response.get('data').get('user').get('description')
。 - 用户微博认证信息:
verified_reason = response.get('data').get('user').get('verified_reason')
。
最后,还会将这些提取到的信息打印出来,方便我们查看:
print(Weibo_name, followers_count, follow_count, description, verified_reason)
五、解析用户作品相关信息的方法(parse_statuses
)
1. parse_statuses
方法概述
parse_statuses
方法同样接受用户 ID 作为参数uid
,它的主要目的是获取和解析用户发布的微博作品相关信息,比如微博内容、发布时间、包含的图片等。
2. 请求数据
首先,构建请求的 URL 和参数:
url = "https://weibo.com/ajax/statuses/mymblog"
params = {"uid": uid,"page": "0","feature": "0"
}
response = requests.get(url, headers=self.headers, cookies=self.cookies, params=params).json()
这里向另一个用于获取用户微博作品的 URL 发送了 GET 请求,并获取到响应数据,同样将其转换为 JSON 格式。
3. 解析数据
获取到响应后,从数据中提取出了以下重要信息:
- 微博内容(原始文本):
text_raw = statuses.get('text_raw')
。 - 发布时间:
created_at = statuses.get('created_at')
。 - 图片 ID 列表:
pic_ids = statuses.get('pic_ids')
。 - 地区名称:
region_name = statuses.get('region_name')
。
并且对于图片 ID 列表中的每一个图片 ID,还会进一步获取其最大尺寸的图片 URL:
i = []
for pic_id in pic_ids:pic_infos_urls = statuses.get('pic_infos').get(pic_id).get('largest').get('url')i.append(pic_infos_urls)
最后,会将这些提取到的信息(微博内容、发布时间、图片 URL 列表、地区名称)打印出来,并调用create_folder_path
方法来处理这些信息,以便后续下载相关素材。
六、创建文件夹路径并下载素材的方法(create_folder_path
和download_video_with_requests
)
1. create_folder_path
方法
这个方法首先根据获取到的微博用户名称创建一个以用户名为名称的主文件夹(如果不存在的话):
materials_dir = Weibo_name
if not os.path.exists(materials_dir):os.makedirs(materials_dir)
然后根据微博内容的前两个字符创建一个子文件夹,用于存放相关素材:
folder_name = str(title[:2])
folder_path = os.path.join(materials_dir, folder_name)
if not os.path.exists(folder_path):os.makedirs(folder_path)
最后,调用download_video_with_requests
方法,将创建好的文件夹路径和图片 URL 列表作为参数传递过去,以便下载图片素材。
2. download_video_with_requests
方法
这个方法负责实际的图片下载操作。它通过遍历图片 URL 列表,使用requests
库发送请求获取图片数据,并将其保存到指定的文件夹路径下。在下载过程中,还使用了tqdm
库来显示下载进度条,让我们能清楚地看到下载的进度情况。
try:j = 1for url in tqdm(i, desc="下载素材进度"):response = requests.get(url)image_name = f'{j}.{url[-3:]}' # 图片名称为数字+扩展名j += 1 # 累加计数器image_path = os.path.join(save_path, image_name)if response.status_code == 200:with open(image_path, 'wb') as f:total_size = int(response.headers.get('content-length', 0))block_size = 1024 # 每次写入的块大小progress_bar = tqdm(total=total_size, unit='iB', unit_scale=True)f.write(response.content)progress_bar.update(len(response.content))progress_bar.close()print(f"素材 {image_name} 已成功下载到 {save_path}")else:print(f"下载素材 {image_name} 失败,状态码: {response.status_code}")
except requests.exceptions.RequestException as e:print(f"下载素材时出错: {e}")
七、运行代码(Run
方法)
最后,我们来看一下Run
方法。这个方法是整个程序的入口点,当我们直接运行脚本时,就会执行这个方法。在这个方法中,首先会提示用户输入要获取信息的微博用户 ID:
uid = int(input('请输入你要获取信息的id:'))
然后依次调用Get
方法和parse_statuses
方法,来完成获取用户基本信息和解析用户作品相关信息以及下载相关素材的整个流程。
八、总结
全部代码:
# -*- coding:utf-8 -*-
import os
import random
import re
import requests
from tqdm import tqdmclass Weibo(object):def __init__(self):self.headers = {}self.cookies = {}# 传参uid输入用户id来获取数据def Get(self, uid):url = "https://weibo.com/ajax/profile/info"params = {"uid": uid}response = requests.get(url, headers=self.headers, cookies=self.cookies, params=params).json()self.parse_user_info(response)def parse_user_info(self, response):"""解析用户基本信息"""global Weibo_name# 获取用户名称Weibo_name = response.get('data').get('user').get('screen_name')# 获取用户粉丝数量followers_count = response.get('data').get('user').get('followers_count')# 获取用户关注数量follow_count = response.get('data').get('user').get('friends_count')# 获取用户描述信息description = response.get('data').get('user').get('description')# 获取用户微博认证信息verified_reason = response.get('data').get('user').get('verified_reason')# 打印数据print(Weibo_name, followers_count, follow_count, description, verified_reason)def parse_statuses(self, uid):"""解析用户作品相关信息"""url = "https://weibo.com/ajax/statuses/mymblog"params = {"uid": uid,"page": "0","feature": "0"}response = requests.get(url, headers=self.headers, cookies=self.cookies, params=params).json()statuses_list = response.get('data').get('list')since_id = response.get('data').get('since_id')print(since_id)for statuses in statuses_list:text_raw = statuses.get('text_raw')created_at = statuses.get('created_at')pic_ids = statuses.get('pic_ids')print(pic_ids)region_name = statuses.get('region_name')i = []for pic_id in pic_ids:pic_infos_urls = statuses.get('pic_infos').get(pic_id).get('largest').get('url')i.append(pic_infos_urls)print(text_raw, created_at, i, region_name)self.create_folder_path(text_raw,i)def create_folder_path(self, title,i):materials_dir = Weibo_nameif not os.path.exists(materials_dir):os.makedirs(materials_dir)folder_name = str(title[:2])folder_path = os.path.join(materials_dir, folder_name)if not os.path.exists(folder_path):os.makedirs(folder_path)self.download_video_with_requests(folder_path,i)def download_video_with_requests(self, save_path, i):try:j = 1for url in tqdm(i, desc="下载素材进度"):response = requests.get(url)image_name = f'{j}.{url[-3:]}' # 图片名称为数字+扩展名j += 1 # 累加计数器image_path = os.path.join(save_path, image_name)if response.status_code == 200:with open(image_path, 'wb') as f:total_size = int(response.headers.get('content-length', 0))block_size = 1024 # 每次写入的块大小progress_bar = tqdm(total=total_size, unit='iB', unit_scale=True)f.write(response.content)progress_bar.update(len(response.content))progress_bar.close()print(f"素材 {image_name} 已成功下载到 {save_path}")else:print(f"下载素材 {image_name} 失败,状态码: {response.status_code}")except requests.exceptions.RequestException as e:print(f"下载素材时出错: {e}")def Run(self):uid = int(input('请输入你要获取信息的id:'))self.Get(uid)self.parse_statuses(uid)if __name__ == '__main__':spider = Weibo()spider.Run()
通过以上对这段 Python 代码的详细讲解,我们可以看到它能够实现从微博获取用户基本信息以及下载用户微博中相关素材的功能。当然,在实际使用过程中,你可能需要根据自己的需求对代码进行一些调整和扩展,比如处理更多类型的素材、优化错误处理等。希望这篇教程能帮助你更好地理解和运用这段代码,让你在获取微博数据方面更加得心应手。
注意:
在使用本代码获取微博数据时,请务必遵守相关法律法规以及微博平台的使用规则和服务协议。本代码仅用于学习和研究目的,不得用于任何非法的商业用途或侵犯他人隐私、权益的行为。若因不当使用本代码而导致的任何法律纠纷或不良后果,使用者需自行承担全部责任。在进行数据抓取操作之前,请确保你已经充分了解并获得了合法的授权与许可,尊重网络平台的生态环境和其他用户的合法权益。
相关文章:
Python 获取微博用户信息及作品(完整版)
在当今的社交媒体时代,微博作为一个热门的社交平台,蕴含着海量的用户信息和丰富多样的内容。今天,我将带大家深入了解一段 Python 代码,它能够帮助我们获取微博用户的基本信息以及下载其微博中的相关素材,比如图片等。…...
使用element-plus el-table中使用el-image层级冲突table表格会覆盖预览的图片等问题
在日常开发项目中 使用element-plus 中表格中使用 el-image的点击图片出现图片预览 会出现以下问题 表格一行会覆盖预览的图片 鼠标滑过也会显示表格 el-image 的预览层级和表格的层级冲突导致的。 解决方法:有两种一种是直接使用样式穿透 第二种推荐方法 使用官网推…...
leetcode_25_k个一组翻转链表
力扣:k个一组翻转链表 链接:https://leetcode.cn/problems/reverse-nodes-in-k-group/ 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k…...
Python Selenium:Web自动化测试与爬虫开发
Python Selenium:Web自动化测试与爬虫开发 Python Selenium:Web自动化测试与爬虫开发安装Selenium设置WebDriver基础示例页面元素交互处理JavaScript和Cookies浏览器控制屏幕截图Headless Mode结束会话错误处理与调试 ***本文由AI辅助生成*** Python Se…...
C语言菜鸟入门·关键字·int的用法
目录 1. int关键字 1.1 取值范围 1.2 符号类型 1.3 运算 1.3.1 加法运算() 1.3.2 减法运算(-) 1.3.3 乘法运算(*) 1.3.4 除法运算(/) 1.3.5 取余运算(%) 1.3.6 自增()与自减(--) 1.3.7 位运算 2. 更多关键字 1. int关键字 int 是一个关键字࿰…...
Java语言编程,通过阿里云mongo数据库监控实现数据库的连接池优化
一、背景 线上程序连接mongos超时,mongo监控显示连接数已使用100%。 java程序报错信息: org.mongodb.driver.connection: Closed connection [connectionId{localValue:1480}] to 192.168.10.16:3717 because there was a socket exception raised by…...
论文阅读--Evidence for the utility of quantum computing before fault tolerance
量子计算有望在某些问题上提供比传统计算更快的速度。然而,实现其全部潜力的最大障碍是这些系统固有的噪声。这一挑战被广泛接受的解决方案是实现容错量子电路,而这超出了当前处理器的能力范围。我们在此报告了在嘈杂的127 量子比特处理器上进行的实验&a…...
Maven的安装——给Idea配置Maven
一、什么是Maven? Maven是一个开源的项目管理工具,它主要用于Java项目的构建、依赖管理和项目生命周期管理。 二、准备环境 maven安装之前,我们要先安装jdk,确保你已经安装了jdk环境。可以通过【win】【r】打开任务管理器,输入…...
【虚拟机】VMWare的CentOS虚拟机断电或强制关机出现问题
VMware 虚拟机因为笔记本突然断电故障了,开机提示“Entering emergency mode. Exit the shell to continue.”,如下图所示: 解决方法:输入命令: xfs_repair -v -L /dev/dm-0 注:报 no such file or direct…...
如何在WPF中嵌入其它程序
在WPF中嵌入其它程序,这里提供两种方案 一、使用WindowsFormHost 使用步骤如下 1、添加WindowsFormsIntegration和System.Windows.Forms引用 2、在界面上放置WindowsFormHost和System.Windows.Forms.Panel 1 <Grid> 2 <WindowsFormsHost> 3…...
集合Queue、Deque、LinkedList、ArrayDeque、PriorityQueue详解
1、 Queue与Deque的区别 在研究java集合源码的时候,发现了一个很少用但是很有趣的点:Queue以及Deque; 平常在写leetcode经常用LinkedList向上转型Deque作为栈或者队列使用,但是一直都不知道Queue的作用,于是就直接官方…...
实战 | C#中使用YoloV8和OpenCvSharp实现目标检测 (步骤 + 源码)
导 读 本文主要介绍在C#中使用YoloV8实现目标检测,并给详细步骤和代码。 详细步骤 【1】环境和依赖项。 需先安装VS2022最新版,.NetFramework8.0,然后新建项目,nuget安装 YoloSharp,YoloSharp介绍: https://github.com/dme-compunet/YoloSharp 最新版6.0.1,本文…...
OpenCV基本图像处理操作(六)——直方图与模版匹配
直方图 cv2.calcHist(images,channels,mask,histSize,ranges) images: 原图像图像格式为 uint8 或 float32。当传入函数时应 用中括号 [] 括来例如[img]channels: 同样用中括号括来它会告函数我们统幅图 像的直方图。如果入图像是灰度图它的值就是 [0]如果是彩色图像 的传入的…...
Hive离线数仓结构分析
Hive离线数仓结构 首先,在数据源部分,包括源业务库、用户日志、爬虫数据和系统日志,这些都是数据的源头。这些数据通过Sqoop、DataX或 Flume 工具进行提取和导入操作。这些工具负责将不同来源的数据传输到基于 Hive 的离线数据仓库中。 在离线…...
《macOS 开发环境配置与应用开发》
一、引言 macOS 作为一款强大而流行的操作系统,为开发者提供了丰富的开发机会和优秀的开发环境。无论是开发原生的 macOS 应用,还是进行跨平台开发,了解和掌握 macOS 开发环境的配置以及应用开发的方法至关重要。本文将详细介绍 macOS 开发环…...
DataGear 5.2.0 发布,数据可视化分析平台
DataGear 企业版 1.3.0 已发布,欢迎体验! http://datagear.tech/pro/ DataGear 5.2.0 发布,图表插件支持定义依赖库、严重 BUG 修复、功能改进、安全增强,具体更新内容如下: 重构:各模块管理功能访问路径…...
Knife4j快速入门
1 概述 Knife4j是一个用于生成和展示API文档的工具,同时它还提供了在线调试的功能,下图是其工作界面。 了解: Knife4j有多个版本,最新版的Knife4j基于开源项目springdoc-openapi,这个开源项目的核心功能就是根据Sprin…...
pcap_set_buffer_size()函数
功能简介 pcap_set_buffer_size()函数主要用于设置数据包捕获的内核缓冲区大小。这个缓冲区是操作系统内核用于临时存储捕获到的数据包的区域。通过调整缓冲区大小,可以在一定程度上优化数据包捕获的性能,特别是在高流量网络环境或者需要长时间捕获数据包…...
Ubuntu24.04——软件包系统已损坏
如果你在使用 Ubuntu 时遇到“软件包系统已损坏”的问题,可以尝试以下步骤来修复它: 更新软件包列表: 打开终端,运行以下命令以更新软件包列表: sudo apt update修复损坏的软件包: 运行以下命令来修复损坏的…...
项目实战:Vue3开发一个购物车
这段HTML代码实现了一个简单的购物车实战小项目的前端页面,结合了Vue.js框架来实现数据响应式和交互逻辑。页面展示了购物车中的商品项,每个商品项有增减数量的按钮,并且能显示商品总数以及目前固定为0元的商品总价和总价计算。 【运用响应式…...
OpenOCD之J-Link下载
1.下载USB Dirver Tool.exe,选择J-Link dirver,替换成WinUSB驱动。(⭐USB Dirver Tool工具可将J-Link从WinUSB驱动恢复为默认驱动⭐) 下载方式 ①官方网址:https://visualgdb.com/UsbDriverTool/ ②笔者的CSDN链接&…...
C++中定义类型名的方法
什么是 C 中的类型别名和 using 声明? 类型别名与using都是为了提高代码的可读性。 有两种方法可以定义类型别名 一种是使用关键字typedef起别名使用别名声明来定义类型的别名,即使用using. typedef 关键字typedef作为声明语句中的基本数据类型的一…...
241124学习日志——[CSDIY] [ByteDance] 后端训练营 [14]
CSDIY:这是一个非科班学生的努力之路,从今天开始这个系列会长期更新,(最好做到日更),我会慢慢把自己目前对CS的努力逐一上传,帮助那些和我一样有着梦想的玩家取得胜利!!&…...
丹摩|丹摩智算平台深度评测
1. 丹摩智算平台介绍 随着人工智能和大数据技术的快速发展,越来越多的智能计算平台涌现,为科研工作者和开发者提供高性能计算资源。丹摩智算平台作为其中的一员,定位于智能计算服务的提供者,支持从数据处理到模型训练的全流程操作…...
VSCode 快捷键
箭头函数 安装VSCODE插件用于在编辑器中生成ES6语法的JavaScript的代码段(支持JavaScript和Typescript)。 安装成功后输入an回车就可以了 (params) > {} 1、显示快捷键列表 快捷键:⌘ K S 可以通过上述按键显示vscode的快捷键列表&am…...
Java基础-Java多线程机制
(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 一、引言 二、多线程的基本概念 1. 线程与进程 2. 多线程与并发 3. 多线程的优势 三、Java多线程的实…...
【创建型设计模式】单例模式
【创建型设计模式】单例模式 这篇博客接下来几篇都将阐述设计模式相关内容。 接下来的顺序大概是:单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。 一、什么是单例模式 单例模式是一种创建型设计模式,它保证一个类仅有一个实例&#…...
SpringBoot集成多个rabbitmq
1、pom文件 <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-amqp --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId><versio…...
JavaScript将至
JS是什么? 是一种运行在客户端(浏览器)的编程语言,实现人机交互效果 作用捏? 网页特效 (监听用户的一些行为让网页作出对应的反馈) 表单验证 (针对表单数据的合法性进行判断) 数据交互 (获取后台的数据, 渲染到前…...
Java中的线程池(如果想知道Java中有关线程池的知识,那么只看这一篇就足够了!)
前言:线程池是 Java 中用于高效管理并发任务的工具,通过复用线程、降低线程创建销毁的开销,提升系统性能与响应速度。它帮助开发者更好地控制线程生命周期和资源消耗,是高并发应用的重要组成部分。 ✨✨✨这里是秋刀鱼不做梦的BLO…...
Java 获取本机 IP 地址的方法
文章目录 一、使用 InetAddress.getLocalHost二、遍历网络接口获取 在 Java 编程中,若有本机的 IP 地址的需求,小编来展示一下方法: 一、使用 InetAddress.getLocalHost 一是最基本的获取本机 IP 地址的方式。 示例代码: impo…...
开源动态表单form-create-designer 扩展个性化配置的最佳实践教程
在开源低代码表单设计器 form-create-designer 的右侧配置面板里,field 映射规则为开发者提供了强大的工具去自定义和增强组件及表单配置的显示方式。通过这些规则,你可以简单而高效地调整配置项的展示,提升用户体验。 源码地址: Github | G…...
c语言数据结构与算法--简单实现线性表(顺序表+链表)的插入与删除
老规矩,点赞评论收藏关注!!! 目录 线性表 其特点是: 算法实现: 运行结果展示 链表 插入元素: 删除元素: 算法实现 运行结果 线性表是由n个数据元素组成的有限序列ÿ…...
5、AI测试辅助-生成测试用例思维导图
AI测试辅助-生成测试用例思维导图 创建测试用例两种方式1、Plantuml思维导图版本 (不推荐)2、Markdown思维导图版本(推荐) 创建测试用例两种方式 完整的测试用例通常需要包含以下的元素: 1、测试模块 2、测试标题 3、前置条件 4、…...
c ++零基础可视化——vector
c 零基础可视化——vector 初始化 vector<int> v0(5); // 0 0 0 0 0 vector<int> v1(5, 1); // 1 1 1 1 1 vector<int> v2{1, 2, 3} // 1 2 3 vector<int> v3(v1); // 1 1 1 1 1 vector<vector<int>> v4(2, vect…...
网络安全应急响应及其发展方向
计算机信息系统和网络已经成为社会重要的基础设施,而网络安全始终是笼罩在Internet天空的一片乌云,对社会的威胁也与日俱增。自1988年莫里斯蠕虫事件以来,网络安全事件逐年上升,所造成的损失越来越大。自从CERT/CC成立以来&#x…...
Linux应用编程(C语言编译过程)
目录 1. 举例 2.预处理 2.1 预处理命令 2.2 .i文件内容解读 3.编译 4.汇编 5.链接 5.1 链接方式 5.1.1 静态链接 5.1.2 动态链接 5.1.3 混合链接 1. 举例 Linux的C语言开发,一般选择GCC工具链进行编译,通过下面的例子来演示GCC如何使用&#…...
003 STM32基础、架构以及资料介绍——常识
注: 本笔记参考学习B站官方视频教程,免费公开交流,切莫商用。内容可能有误,具体以官方为准,也欢迎大家指出问题所在。 01什么是STM32(宏观) STM32属于一个微控制器,自带了各种常用通…...
输入三个整数x,y,z,请把这三个数由小到大输出。-多语言实现
目录 C 语言实现 Python 实现 Java 实现 Js 实现 题目:输入三个整数x,y,z,请把这三个数由小到大输出。 程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后…...
Java爬虫:获取商品详情的实践之旅
在当今这个信息爆炸的时代,数据的价值日益凸显。对于电商行业来说,商品详情的获取尤为重要,它不仅关系到产品的销售,还直接影响到用户体验。传统的人工获取方式耗时耗力,而自动化的爬虫技术则提供了一种高效解决方案。…...
vue 富文本图片如何拖拽
在Vue项目中实现富文本编辑器(如vue-quill-editor)的图片拖拽功能,需要结合Quill.js及其相关插件进行配置 安装必要的依赖包: 你需要安装vue-quill-editor作为富文本编辑器的基础组件。为了支持图片拖拽功能,你还需要…...
C#里怎么样实现自己的类满足for-each循环访问?
C#里怎么样实现自己的类满足for-each循环访问? 由于foreach语句使用起来比较方便,并且又简单,不像for循环那样需要写三个语句, 并且还有可能判断不对,导致少访问的情况。 在使用库里提供的容器时,都会有实现foreach的方式。 如果自己的类也实现这种方式,使用起来就比较…...
【Elasticsearch入门到落地】2、正向索引和倒排索引
接上篇《1、初识Elasticsearch》 上一篇我们学习了什么是Elasticsearch,以及Elastic stack(ELK)技术栈介绍。本篇我们来什么是正向索引和倒排索引,这是了解Elasticsearch底层架构的核心。 上一篇我们学习到,Elasticsearch的底层是由Lucene实…...
ODBC连接PostgreSQL数据库后,网卡DOWN后,客户端进程阻塞问题解决方法
问题现象:数据库客户端进程数据库连接成功后,再把跟数据库交互的网卡down掉,客户端进程就会阻塞,无法进行其他处理。该问题跟TCP keepalive机制有关。 可以在odbc.ini文件中增加相应的属性来解决,在odbc.ini 增加如下…...
Java Springboot河北任丘非遗传承宣传平台
一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…...
SpringBoot整合MQTT利用EMQX完成消息的发布与接收+Python模拟硬件测试通信
教程说明 本教程主要内容为使用SpringBoot整合MQTT利用EMQX代理服务完成MQTT的消息发送与接收,然后用Python模拟硬件与SpringBoot应用进行了MQTT消息的通信,教程详细,并在最后讲解了开发中的注意事项,本教程适用于物联网领域、Ja…...
【数据结构】【线性表】栈的基本概念(附c语言源码)
栈的基本概念 讲基本概念还是回到数据结构的三要素:逻辑结构,物理结构和数据运算。 从逻辑结构来讲,栈的各个数据元素之间是通过是一对一的线性连接,因此栈也是属于线性表的一种从物理结构来说,栈可以是顺序存储和顺…...
【jvm】为什么java是半编译半解释型语言
目录 1. 编译过程2. 解释过程3. 即时编译(JIT)过程4. 半编译半解释型语言的特点 1. 编译过程 1.Java源代码首先会被编译成字节码(Bytecode),这是一种与具体平台无关的中间代码。2.这一编译过程由Java编译器࿰…...
人工智能之机器学习5-回归算法2【培训机构学习笔记】
培训班ppt内容: 个人精进总结: 可解释方差 定义 可解释方差的回归评分函数是一种用于评估回归模型性能的指标,以下从其定义、计算公式、取值范围及意义、应用场景等方面进行详细介绍: 可解释方差(Explained Varian…...
C#动态类型详解:应用场景与注意事项
C#中的动态类型(dynamic)是C# 4.0引入的一个关键字,它允许在编译时绕过类型检查,将类型确定推迟到运行时。这意味着,当使用dynamic类型时,编译器不会对调用的方法或访问的属性进行类型检查,而是…...