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

基于 Python 爬取 TikTok 搜索数据 Tiktok爬虫(2025.3.17)

1. 前言

在数据分析和网络爬虫的应用场景中,我们经常需要获取社交媒体平台的数据,例如 TikTok。本篇文章介绍如何使用 Python 爬取 TikTok 用户搜索数据,并解析其返回的数据。

结果截图

2. 项目环境准备

在正式运行代码之前,我们需要安装相关的 Python 库:

pip install requests pandas execjs loguru

此外,我们需要一个 JavaScript 运行环境(如 Node.js),用于执行加密签名代码。

3. 代码解析

3.1 初始化爬虫类

我们创建 TiktokUserSearch 类,并在初始化方法 __init__ 中设置请求头信息,并初始化输出文件。

class TiktokUserSearch:def __init__(self, output_file=None):self.headers = {  # 设置请求头"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ...","referer": "https://www.tiktok.com/"}self.cookies = Noneself.output_file = output_file if output_file else f'tiktok_videos_{datetime.now().strftime("%Y%m%d_%H%M%S")}.csv'

3.2 处理 Cookie

我们需要将 TikTok 的 cookie 从字符串转换成字典格式,以便后续请求使用。

    def cookie_str_to_dict(self, cookie_str) -> dict:cookie_dict = {}cookies = [i.strip() for i in cookie_str.split('; ') if i.strip() != ""]for cookie in cookies:key, value = cookie.split('=', 1)cookie_dict[key] = valuereturn cookie_dict

3.3 发送请求

TikTok 需要使用 X-Bogus 进行签名,我们需要执行 JavaScript 代码来获取该参数。

为了防止网络不稳定,设置三次重试机制。

可根据自己需求设置代理。

    def get(self, keyword, cursor, search_id, cookie_str):self.cookies = self.cookie_str_to_dict(cookie_str)url = "https://www.tiktok.com/api/search/general/full/"if cursor == "0":focus_state = "true"else:focus_state = "false"params = {"WebIdLastTime": f"{int(time.time())}","aid": "1988","app_language": "zh-Hans","app_name": "tiktok_web","browser_language": "zh-CN","browser_name": "Mozilla","browser_online": "true","browser_platform": "Win32","browser_version": self.headers['user-agent'].replace('Mozilla/', ''),"channel": "tiktok_web","cookie_enabled": "true","cursor": cursor,"device_id": "7339506347602019870","device_platform": "web_pc","focus_state": focus_state,"from_page": "search","history_len": "7","is_fullscreen": "false","is_page_visible": "true","keyword": keyword,"os": "windows","priority_region": "","referer": "","region": "KR","screen_height": "1080","screen_width": "1920","tz_name": "Asia/Shanghai","web_search_code": "{\"tiktok\":{\"client_params_x\":{\"search_engine\":{\"ies_mt_user_live_video_card_use_libra\":1,\"mt_search_general_user_live_card\":1}},\"search_server\":{}}}","webcast_language": "zh-Hans","msToken": self.cookies["msToken"],}if cursor != "0":params.update({"search_id": search_id})x_b = execjs.compile(open('./encrypt.js', encoding='utf-8').read()).call("sign", urlencode(params), self.headers["user-agent"])params.update({"X-Bogus": x_b})headers = self.headers.copy()headers.update({"referer": "https://www.tiktok.com/search?q=" + keyword})max_retries = 3for attempt in range(max_retries):try:response = requests.get(url,headers=headers,cookies=self.cookies,params=params,timeout=(3, 10),proxies=None)return response.json()except (ex1, ex2, ex3) as e:print(f"尝试 {attempt + 1}/{max_retries} 发生网络错误:{e}")if attempt < max_retries - 1:time.sleep(2)else:return {"error": f"Network error after {max_retries} attempts: {str(e)}"}except Exception as e:print(f"发生其他错误:{e}")return {"error": str(e)}

3.4 解析数据并存储

解析 TikTok 返回的视频数据,并保存到 CSV 文件。

    def parse_data(self, data_list):resultList = []video_data = []for u in data_list:try:item = u['item']author = item['author']stats = item['stats']author_stats = item['authorStats']  # 添加作者统计信息# 提取需要的数据video_info = {'video_id': item['id'],'desc': item['desc'],'create_time': datetime.fromtimestamp(item['createTime']).strftime('%Y-%m-%d %H:%M:%S'),'duration': item['video']['duration'],# 作者基本信息'author_id': author['id'],'author_name': author['uniqueId'],'author_nickname': author['nickname'],'author_signature': author['signature'],'author_verified': author['verified'],# 作者统计信息'author_following_count': author_stats['followingCount'],  # 关注数'author_follower_count': author_stats['followerCount'],    # 粉丝数'author_heart_count': author_stats['heartCount'],          # 获赞总数'author_video_count': author_stats['videoCount'],          # 视频总数'author_digg_count': author_stats['diggCount'],           # 点赞数# 视频统计信息'digg_count': stats['diggCount'],'share_count': stats['shareCount'],'comment_count': stats['commentCount'],'play_count': stats['playCount'],'collect_count': stats.get('collectCount', 0),'video_url': item['video']['playAddr']}# 添加标签信息if 'challenges' in item:video_info['hashtags'] = ','.join([tag['title'] for tag in item['challenges']])else:video_info['hashtags'] = ''# 添加音乐信息if 'music' in item:music = item['music']video_info.update({'music_id': music['id'],'music_title': music['title'],'music_author': music['authorName'],'music_original': music['original']})video_data.append(video_info)resultList.append(f"https://www.tiktok.com/@{author['uniqueId']}")except Exception as e:logger.error(f"解析视频数据时出错: {str(e)}")continue# 将数据保存到CSV文件try:df = pd.DataFrame(video_data)# 检查文件是否存在file_exists = os.path.exists(self.output_file)# 如果文件不存在,创建新文件并写入表头# 如果文件存在,追加数据不写入表头df.to_csv(self.output_file, mode='a', header=not file_exists,index=False, encoding='utf-8-sig')logger.info(f"数据已{'追加' if file_exists else '保存'}到文件: {self.output_file}")except Exception as e:logger.error(f"保存CSV文件时出错: {str(e)}")return resultList

3.5 运行爬虫

我们定义 main 方法,负责调用 get 方法获取数据并解析。

    def main(self, keyword, cookie_str, cursor="0", search_id=None):dataJson = self.get(keyword, cursor, search_id, cookie_str)if dataJson:if "error" in dataJson:return {"cursor": cursor, "search_id": search_id, "data": [], "status": "-2", "error": dataJson["error"]}elif "verify_event" in str(dataJson):return {"cursor": cursor, "search_id": search_id, "data": [], "status": "-1"}else:# 解析数据并保存到CSVif 'data' in dataJson:self.parse_data(dataJson['data'])return dataJson

3.6 运行入口

最后,我们编写 if __name__ == '__main__' 逻辑,定义要爬取的关键词,并进行循环爬取。

if __name__ == '__main__':os.makedirs('results1', exist_ok=True)topics = ["Chen Duxiu","Li Dazhao",
]for keyword in topics:logger.info(f"开始爬取 {keyword} 的视频")output_file = f'results1/{keyword}_videos.csv'  # 你可以自定义文件名tiktok = TiktokUserSearch(output_file=output_file)cookie_str = '_ttp=2ZzUB37CLclhWsrgyW56Erox1XM; tiktok_webapp_theme_auto_dark_ab=1; delay_guest_mode_vid=5; passport_csrf_token=d8e4d28ec7abdf12a7829d524dca64de; passport_csrf_token_default=d8e4d28ec7abdf12a7829d524dca64de; tt_chain_token=SSmpjX/0in/IP8BYwawD+Q==; multi_sids=7361707798058615814%3A53b730c284c4eaaa9bb2157eef01d70d; cmpl_token=AgQQAPNoF-RO0rYU5JqLsx0__dmghl8Nv5IhYNkWMA; passport_auth_status=a8a7a1e1c4b96a994a45acb38dc83509%2C; passport_auth_status_ss=a8a7a1e1c4b96a994a45acb38dc83509%2C; uid_tt=7857882a3366539dc1d9ca226b3fdc91f76b1b072c7da11dd4120368d88bf861; uid_tt_ss=7857882a3366539dc1d9ca226b3fdc91f76b1b072c7da11dd4120368d88bf861; sid_tt=53b730c284c4eaaa9bb2157eef01d70d; sessionid=53b730c284c4eaaa9bb2157eef01d70d; sessionid_ss=53b730c284c4eaaa9bb2157eef01d70d; store-idc=maliva; store-country-code=ca; store-country-code-src=uid; tt-target-idc=useast1a; tt-target-idc-sign=t3pz21FprSb2qc1ucJWFQbxzCKwgoBX9PKUWEbPHh7_4mpPThOuO0EN9pm2ORzFqk0bLFt6MtI9-gofvcVtQFoGSTOI_JvUWIAAUSHz1mM1A9jP1kRk_qucQnxEMOLvir3s4ffm0hJSh62RyKNO5LBTlT-fsqbi2tQVUwrgIGF-2HFT04S52ciyRnKAXr_0NyD3Aa0lM4J4hUGplo46wKRfId1DwwajXudUfjqJ3rvAuA8qURTsSHCKuDjLbcdfhcC0WKqemrmHFBJ11hGFJxiL4VEOClIoJGrF1_S9jvlx0H0Nph9BHlHNA-wzwi3NF6hPK17WL3TSvsqfEiKclZ5ScpHMv7ATYfOK4BVOzKXrq6fCxzNBT5kCNc4-ImuvjBNqpY8yL2s2KusWxslveOyIq3gwU3Dhxl084w5Tsp13xzuFOGNVHK5ZPeS5ERmykYFB6uTIHty9W_Z6pwN1tT9yQ-34qyZRZB7WONZn_NAFsywU6Hj4wcHLQkJ-tIiAO; last_login_method=google; tiktok_webapp_theme_source=auto; tiktok_webapp_theme=dark; sid_guard=53b730c284c4eaaa9bb2157eef01d70d%7C1740207607%7C15551996%7CThu%2C+21-Aug-2025+07%3A00%3A03+GMT; sid_ucp_v1=1.0.0-KDc2NDMxMTQzMTkwNTY2NTJiOWZhMmZhM2ZlMDg3ZDE0YzNiOGU5NTUKGQiGiIec0MeClWYQ9-vlvQYYsws4CEASSAQQAxoGbWFsaXZhIiA1M2I3MzBjMjg0YzRlYWFhOWJiMjE1N2VlZjAxZDcwZA; ssid_ucp_v1=1.0.0-KDc2NDMxMTQzMTkwNTY2NTJiOWZhMmZhM2ZlMDg3ZDE0YzNiOGU5NTUKGQiGiIec0MeClWYQ9-vlvQYYsws4CEASSAQQAxoGbWFsaXZhIiA1M2I3MzBjMjg0YzRlYWFhOWJiMjE1N2VlZjAxZDcwZA; odin_tt=a7027d0b8a102be6dd20600ca35291f4aee8c003895d8913d5c2f8276f16d6b974345357a22ed0bdcb57930d326afded3e5bd3105e061197876c80a92bbdbbfc29402634b8e7439ba178a1c7ed9ca552; tt_csrf_token=qs6ncqIZ-SbUZVzUbkUZ2SViJyY7VzYRki0M; perf_feed_cache={%22expireTimestamp%22:1742302800000%2C%22itemIds%22:[%227481325874978000134%22%2C%227463463290065161505%22%2C%227466633420098112799%22]}; msToken=BnkIjkPpJEc1i9jiiwT_paC5FW-NL62UVF7-lzpHYki9WIA_KpLrplpY-qlZfuG7V12rbCDHiyQYNrZcOnTzZLk1cvnH3_E_89nfOpqpVquKbSR-Nqr6bGDmL220vjBHdutm4R-gfVnYIG7fvWOJUkZ7yg==; ttwid=1%7Cv5j4n07c_G3ZtA91KIuree-ptnDLwgTwFuM8BnZINnQ%7C1742131441%7Ce88a85fcc36fd7e79815fddb10d16ef553b5e2e4a51c65e2c40098ade19023e2; msToken=iYDKRqCM8rSqc_9ZDzQnWcQiv_iJqPk15-6Y-iFBUmk4uIzb61dM13b9fWHcg4hxGkl9L3n56glok05TllvGurkwpgBYEF8N76ZRIii7OvNEkrk004dagNuoqQVeV9Bzd0_9naXjFXtEiMRi330G5Jdakw==; passport_fe_beating_status=false'has_more = 1cursor = '0'search_id = Nonewhile has_more:data = tiktok.main(keyword, cookie_str, cursor, search_id)logger.info(data)if data and isinstance(data, dict):has_more = data.get('has_more', 0)logger.info(has_more)cursor = data.get('cursor', '0')search_id = data.get('log_pb', {}).get('impr_id')if 'data' in data:data = data['data']else:logger.error("No data found in response")breakelse:logger.error("Invalid response format")breaktime.sleep(1)  # 添加延时避免请求过快logger.info(f"爬取 {keyword} 的视频完成")time.sleep(30)logger.info(f"等待30秒后继续爬取下一个主题")logger.info("所有主题的视频爬取完成")

4. 关键问题与解决方案

  1. TikTok 反爬措施

    • 需要定期更新 Cookie
    • 适当增加请求间隔
    • 使用代理提高稳定性
  2. X-Bogus 参数

    • 需要使用 JavaScript 计算签名
    • 依赖 encrypt.js 进行加密
  3. 数据存储

    • 使用 pandas 处理数据
    • 追加模式写入 CSV,避免数据丢失

6. 总结

本文介绍了如何使用 Python 爬取 TikTok 用户搜索数据,包括如何构造请求、解析数据并存储到 CSV 文件。希望对有类似需求的读者有所帮助!

帮助与咨询:私信博主或在评论区留言

 

相关文章:

基于 Python 爬取 TikTok 搜索数据 Tiktok爬虫(2025.3.17)

1. 前言 在数据分析和网络爬虫的应用场景中&#xff0c;我们经常需要获取社交媒体平台的数据&#xff0c;例如 TikTok。本篇文章介绍如何使用 Python 爬取 TikTok 用户搜索数据&#xff0c;并解析其返回的数据。 结果截图 2. 项目环境准备 在正式运行代码之前&#xff0c;我…...

本专栏开栏通知相关申明

通知 本专栏主要介绍本人C开发过程中遇到的各种技术栈问题&#xff0c;开此栏用于整合自己所学习到的所有知识点&#xff0c;现在无偿分享给大伙。大伙有好的建议或者问题可以在评论直接留言&#xff0c;我不一定有时间看到&#xff0c;但是看到会回复的。 技术栈1 截止到202…...

数据库设计实验(3)—— 分离与附加、还原与备份

一、目的与要求 掌握SQL Server2012拷贝物理文件的方法&#xff1b;掌握SQL Server 2012附加数据库的方法&#xff1b;掌握SQL Server 2012备份和还原的方法&#xff1b;掌握SQL Server 2012定期自动备份的方法。开始简单的SQL查询 二、实验准备 了解数据库分离和附加的意义&…...

Swift 并发中的任务让步(Yielding)和防抖(Debouncing)

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…...

hibernate 自动生成数据库表和java类 字段顺序不一致 这导致添加数据库数据时 异常

hibernate 自动生成的数据库表和java类 字段顺序不一致 这导致该书写方式添加数据库数据时 异常 User user new User( null, username, email, phone, passwordEncoder.encode(password) ); return userRepository.save(user);Hibernate 默认不会保证数据库表字段的顺序与 Ja…...

05 MP4解码AAC + 格式知识

AAC⾳频格式ADIF这种格式的特征是可以确定的找到这个⾳频数据的开始,不需进⾏在⾳频数据流中间开始的解码,即它的解码必须在明确定义的开始处进⾏。故这种格式常⽤在磁盘⽂件中 ADTS是AAC⾳频的传输流格式。AAC⾳频格式在MPEG-2(ISO-13318-7 2003)中有定义。AAC后来⼜被采⽤…...

docker和k8s区别详解

一、核心定位对比 维度DockerKubernetes (K8s)引用来源核心功能容器引擎&#xff08;构建、运行、分发容器&#xff09;容器集群管理系统&#xff08;编排、调度、扩展&#xff09;[1][2][5]抽象层级单机容器化技术跨主机集群管理平台[5][6]技术目标解决应用环境一致性解决大规…...

生信分析服务作图TCGA/GEO数据库挖掘细胞测序转录学代做指导辅导

生信分析服务作图、TCGA/GEO数据库挖掘、细胞测序转录学代做指导辅导等相关内容&#xff0c;是当前生命科学研究中不可或缺的一部分。以下是对这些服务的详细解析&#xff1a; 一、生信分析服务作图 生信分析服务作图是生信分析中的重要环节&#xff0c;它通过将复杂的生物信…...

修改HuggingFace模型默认缓存路径

huggingface模型的默认缓存路径是~/.cache/huggingface/hub/ 通常修改为自己的路径会更为方便。 方式一&#xff1a;cache_dir 参数 可以通过from_pretrained函数中的 cache_dir 参数来指定&#xff0c;缺点&#xff0c;每次都需要手动指定&#xff0c;比较麻烦。 如&#x…...

游戏引擎学习第167天

回顾和今天的计划 我们不使用引擎&#xff0c;也不依赖库&#xff0c;只有我们自己和我们的小手指在敲击代码。 今天我们会继续进行一些工作。首先&#xff0c;我们会清理昨天留下的一些问题&#xff0c;这些问题我们当时没有深入探讨。除了这些&#xff0c;我觉得我们在资产…...

阿里云服务器环境部署 三 Minio文件服务集群的搭建

Minio文件服务集群的搭建 一 准备工作 1、三台机器 配置 vim /etc/hosts 172.16.108.44 minio4 172.16.108.43 minio3 172.16.108.42 minio2 [rootbigdata41 es]# docker --version Docker version 26.1.4, build 5650f9b [rootbigdata43 minio]# docker-compose -v -bash…...

让人感到疑惑的const

const 关键字在不同的编程语言中有着不同的含义和限制&#xff0c;但通常它被用来声明一个常量或只读变量。然而&#xff0c;在 JavaScript 中&#xff0c;const 的行为有时可能会让人感到困惑&#xff0c;因为它并不总是意味着“不可变”&#xff08;immutable&#xff09;。让…...

网易云信架构升级实践,故障恢复时间缩至8秒

一、项目背景 网易云信是网易旗下集IM与音视频技术于一体的PaaS服务平台&#xff0c;为全球提供融合通信与视频的核心功能和组件&#xff0c;包括IM即时通讯、短信、信令等通信服务&#xff0c;以及RTC、直播、点播、互动直播、互动白板等音视频服务&#xff0c;此外&#xf…...

算法刷题记录——LeetCode篇(3) [第201~300题](持续更新)

(优先整理热门100及面试150&#xff0c;不定期持续更新&#xff0c;欢迎关注) 207. 课程表 你这个学期必须选修 numCourses 门课程&#xff0c;记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出&#xff0c;其中 prerequ…...

navicat导出文件密码解密

文章目录 一、概念二、导出文件1、创建的数据库连接信息2、导出带密码的连接信息3、查看导出后的文件 三、Python代码解析四、参考地址 一、概念 Navicat中导出的带密码的文件后缀是.ncx结尾的&#xff0c;里面是xml格式的文件&#xff0c;存储了数据库的连接&#xff0c;方便…...

uniapp vue3项目定义全局变量,切换底部babar时根据条件刷新页面

前言 uniapp项目中&#xff0c;每个tabbar页面来回点时候&#xff0c;不会触发页面更新。但是有时页面上有数据发生改变需要更新模版时&#xff0c;就得能及时的通知到页面。如果在onshow生命周期里每次都调用异步请求更新数据&#xff0c;有些不合理&#xff0c;况且页面有时…...

Linux上的`i2c-tools`工具集的详细介绍;并利用它操作IMX6ULL的I2C控制器进而控制芯片AP3216C读取光照值和距离值

IC-Tools 工具集介绍 i2c-tools 是 Linux 下用于 IC 设备调试 的用户空间工具集(你也可以把它看成是一个库&#xff0c;类似于之前自己用过的触摸屏库tslib库、FreeType矢量字符库)&#xff0c;它提供了一系列命令行工具&#xff0c;可以扫描、读取、写入 IC 设备&#xff0c;…...

## DeepSeek写射击手机小游戏

DeepSeek写射击手机小游戏 提问 根据提的要求&#xff0c;让DeepSeek整理的需求&#xff0c;进行提问&#xff0c;内容如下&#xff1a; 请生成一个包含以下功能的可运行移动端射击小游戏H5文件&#xff1a; 要求 可以重新开始游戏 可以暂停游戏 射击位置在底部中间&#xff…...

奇安信全流量(天眼)面试题

一、全流量设备&#xff08;天眼&#xff09;的部署架构 天眼系统采用旁路部署模式&#xff0c;通过流量镜像实现非侵入式监测&#xff0c;核心组件包括流量传感器、分析平台和文件威胁鉴定器&#xff0c;具体部署架构如下&#xff1a; 传感器部署 关键节点覆盖&#xff1a;在…...

计算机四级 - 数据库原理(操作系统部分)- 第2章「操作系统运行机制」

系统调用是应用程序请求操作系统核心完成某一特定功能的一种过程调用&#xff0c;与一般调用的最大区别就是调用程序运行在用户态&#xff0c;而被调用程序则运行在系统态寄存器类型&#xff1a; 用户不可见寄存器&#xff1a;程序计数器、指令寄存器、程序状态字&#xff08;P…...

【css酷炫效果】纯CSS实现虫洞穿越效果

【css酷炫效果】纯CSS实现穿越效果 缘创作背景html结构css样式完整代码基础版进阶版&#xff08;虫洞穿越&#xff09; 效果图 想直接拿走的老板&#xff0c;链接放在这里&#xff1a;https://download.csdn.net/download/u011561335/90491973 缘 创作随缘&#xff0c;不定时…...

火山引擎(豆包大模型)(抖音平台)之火山方舟的Prompt的使用测试

前言 在大模型的使用过程当中&#xff0c;Prompt的使用非常的关键。原来&#xff0c;我对Prompt的理解不深&#xff0c;觉得Prompt的产生并不是很有必要。但是&#xff0c;自从使用了火山方舟中的“Prompt优解”之后&#xff0c;感受加深了&#xff0c;觉得Prompt是我们和大模型…...

多线程(四)----线程安全

线程安全问题的万恶之源就是多线程的抢占式执行所带来的随机性. 有了多线程, 此时抢占式执行下, 代码执行的顺序, 会出现更多的变数, 代码执行顺序的可能性就从一种情况变成了无数种情况. 只要有一种情况使得代码结果不正确, 都是视为bug, 线程不安全. 有线程安全的代码 以下…...

跨系统投屏:Realme手机(远程)投屏到Linux系统的简单方法

家里长辈年纪上来了&#xff0c;有点老花眼&#xff0c;平常看手机总是觉得字体不够大&#xff0c;还一个劲儿地将手机拿很远。其实那台手机的字体已经调到最大了。 为了让长辈刷手机的时候可以轻松快乐一点&#xff0c;我们帮他将手机投屏到电脑上。毕竟电脑屏幕比手机大多了&…...

【eNSP基础使用教程-1】

座右铭: 纵有疾风起&#xff0c;人生不言弃。 文章目录 前言一、更改设备名称指令1、双击路由器进入2、 进入系统视图3、更改设备名称为R14、使用同样的办法修改路由器R2、R3 二、配置路由物理接口的IP 地址1、查看R1路由器当前接口IP 地址配置与路由表2、查看路由器上的路由表…...

android开发:组件事件汇总

在 Android 开发中&#xff0c;Java 文件中有许多组件事件可以处理用户交互。以下是一些常见的组件事件及其用途和示例&#xff1a; 1. 点击事件 (Click) 用于处理用户点击控件的操作。 示例代码&#xff1a; Button button findViewById(R.id.button); button.setOnClickL…...

C++|向函数传递对象

在 C 里&#xff0c;对象作为函数的参数和返回值&#xff0c;有值传递、指针传递和引用传递这三种传递方式&#xff0c;下面为你详细介绍。 1.值传递 在值传递时&#xff0c;把实参对象的值复制给形参对象&#xff0c;函数会接收实参的一个副本&#xff0c;而非实参本身。函数…...

网络爬虫【爬虫库urllib】

我叫不三不四&#xff0c;很高兴见到大家&#xff0c;欢迎一起学习交流和进步 今天来讲一讲爬虫 urllib介绍 Urllib是Python自带的标准库&#xff0c;无须安装&#xff0c;直接引用即可。 Urllib是一个收集几个模块来使用URL的软件包&#xff0c;大致具备以下功能。 ● urlli…...

【一起来学kubernetes】17、Configmap使用详解

前言概述核心特性创建 ConfigMap使用 ConfigMap1. **环境变量**2. **Volume 挂载**3. **命令行参数** 更新与热重载Docker容器中Java服务使用Configmap**一、通过环境变量注入****步骤说明****示例配置** **二、通过 Volume 挂载配置文件****步骤说明****示例配置** **三、动态…...

QT程序双击可执行文件运行方法

1、qt编译选择release模式 在pro文件添加&#xff1a;QMAKE_LFLAGS -no-pie 2、cmake编译qt界面程序 在CMakeLists.txt文件中添加&#xff1a; set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -no-pie") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -no-pie")注意 …...

【css酷炫效果】实现鱼群游动动态效果

【css酷炫效果】实现小鱼游动动态效果 缘创作背景css代码创建div容器引入jquery引入鱼群js完整代码效果图成品资源下载链接:点击下载 缘 在开发系统功能的时候,无意间看到了小鱼游动特效,感觉很有意思,就在网上找了相关教程,分享给大家。 创作背景 刚看到csdn出活动了…...

【GNN】GAT

消息传递 层数越多&#xff0c;聚合更多的消息...

Prims region.Views 为null

原因&#xff1a; 导航未完成或异步问题 解决方式&#xff1a;使用回调确认导航完成后再操作视图 _regionManager.RequestNavigate("MonitorRegion", "MonitorView", nps, navigationResult > {if (navigationResult.Result true){var region _regio…...

在windows10系统上安装docker,然后在容器中运行GPU版本的Pytorch,并使用vscode连接该容器

一 . 安装Docker Desktop 首先打开网址https://docs.docker.com/desktop/install/windows-install/ 下载完后&#xff0c;双击下面的exe文件进行安装&#xff0c;默认情况下&#xff0c;Docker Desktop 安装在C:\Program Files\Docker\Docker 出现提示时&#xff0c;请确保…...

WPS 搭配 Zotero 插件使用

安装Zotero后&#xff0c;Word自动引入了插件&#xff0c;但WPS却没有&#xff0c;做为WPS的重度用户&#xff0c;这是不行的。 解决方案&#xff1a; 1.找到 Zotero.dotm 一般在安装目录下&#xff0c; 2.然后复制到WPS的startup下 我的目录是&#xff1a;C:\Users\lianq…...

卷积神经网络 - 卷积层(具体例子)

为了更一步学习卷积神经网络之卷积层&#xff0c;本文我们来通过几个个例子来加深理解。 一、灰度图像和彩色图像的关于特征映射的例子 下面我们通过2个例子来形象说明卷积层中“特征映射”的概念&#xff0c;一个针对灰度图像&#xff0c;一个针对彩色图像。 例子 1&#x…...

新造车不再比拼排名,恰是曲终人散时,剩者为王

据称新能源汽车周销量不再发布&#xff0c;这可能也预示着新造车终于到了给出答案的时候了&#xff0c;新造车企业前三强已基本确立&#xff0c;其余那些落后的车企已很难有突围的机会&#xff0c;而特斯拉无疑是其中的最大赢家。 3月份第一周的数据显示&#xff0c;销量最高的…...

学有所得-Deepin linux操作系统在安装nvidia显卡驱动后的问题修复

目标&#xff1a; 装有deepin V20.9的移动硬盘在系统启动后无法进入图形化界面&#xff0c;修复系统。 背景&#xff1a; 为了方便随时随地开发研究&#xff0c;又不破坏笔记本电脑原装的正版操作系统&#xff0c;在一个朗科&#xff08;容量&#xff15;&#xff10;&…...

【QT:网络编程】

网络编程的本质就是在编写应用层代码。需要传输层支持。而传输层的协议有UDP、TCP等 使用QT网络编程的API&#xff0c;需要在.pro文件中添加network模块&#xff0c;而QT中的控件和其他内容都是包含在QtCore模块中的&#xff08;默认添加&#xff09; QT为什么要划分模块&…...

基于srpingboot高校智慧校园教学管理服务平台的设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...

分布式事务3PC解决了2PC哪些问题?

三阶段提交(3PC,Three-Phase Commit) 是对 二阶段提交(2PC,Two-Phase Commit) 的改进,旨在解决 2PC 的一些固有缺陷,特别是在分布式系统中的容错性和性能问题。以下是 3PC 比 2PC 更好的原因及其优势的详细分析: 1. 二阶段提交(2PC)的问题 2PC 是一种经典的分布式事…...

Dify 使用 - 创建 翻译 工作流

文章目录 1、选择 模板2、设置 和 基本使用3、运行应用 1、选择 模板 2、设置 和 基本使用 翻译模板 自带了系统提示词&#xff0c;你也可以修改 3、运行应用 右上角 点击 发布 – 更新&#xff0c;运行应用&#xff0c;就可以在新的对话界面中使用此功能 2025-03-18&#x…...

集成学习(上):Bagging集成方法

一、什么是集成学习&#xff1f; 在机器学习的世界里&#xff0c;没有哪个模型是完美无缺的。就像古希腊神话中的"盲人摸象"&#xff0c;单个模型往往只能捕捉到数据特征的某个侧面。但当我们把多个模型的智慧集合起来&#xff0c;就能像拼图一样还原出完整的真相&a…...

c盘清理宝藏小工具

引言 在数字化时代&#xff0c;电脑的存储空间和系统性能直接影响着我们的工作效率和用户体验。C盘作为系统盘&#xff0c;常常因为文件堆积、缓存冗余等问题变得臃肿不堪&#xff0c;导致电脑运行缓慢。为了解决这一问题&#xff0c;我最近试用了一款名为“小番茄C盘清理”的…...

QT多媒体播放器类:QMediaPlayer

QMediaPlayer 是 Qt Multimedia 模块中的核心类&#xff0c;用于播放音频和视频媒体文件。它支持本地文件、网络流媒体以及实时数据源&#xff0c;具备播放控制、状态管理、元数据访问等功能。QMediaPlayer的基本用法可能包括设置媒体源、控制播放&#xff08;播放、暂停、停止…...

Java动态代理模式深度解析

1. 动态代理基础 1.1 核心组件 Proxy 类&#xff1a;动态生成代理对象的工厂类&#xff0c;核心方法为 newProxyInstance()。 InvocationHandler 接口&#xff1a;代理逻辑的处理器&#xff0c;所有方法调用会转发到其 invoke() 方法。 1.2 实现步骤 定义接口&#xff1a;代…...

【WRF模拟】垂直层设置/与观测数据对比

【WRF模拟】垂直层设置/与观测数据对比 WRF 中 有关垂直层的namelist变量1. 主要垂直层设置参数2. 详细解释3. 典型设置示例WRF 输出的垂直剖面数据与观测数据进行比较WRF 采用 地形跟随坐标(terrain-following coordinate)WRF 输出的垂直剖面数据与观测数据进行比较参考WRF …...

植物知识分享论坛毕设

1.这四个文件直接是什么关系&#xff1f;各自都是什么作用&#xff1f;他们之间是如何联系的&#xff1f; 关系与联系 UserController.java 负责接收外部请求&#xff0c;调用 UserService.java 里的方法来处理业务&#xff0c; 而 UserService.java 又会调用 UserMapper.jav…...

可视化图解算法:链表中倒数(最后)k个结点

1. 题目 描述 输入一个长度为 n 的链表&#xff0c;设链表中的元素的值为ai &#xff0c;返回该链表中倒数第k个节点。 如果该链表长度小于k&#xff0c;请返回一个长度为 0 的链表。 数据范围&#xff1a;0≤n≤105&#xff0c;0 ≤ai≤109&#xff0c;0 ≤k≤109 要求&am…...

qt下载和安装教程国内源下载地址

qt不断在更新中&#xff0c;目前qt6日渐成熟&#xff0c;先前我们到官方下载或者国内镜像直接可以下载到exe文件安装&#xff0c;但是最近几年qt官方似乎在逐渐关闭旧版本下载通道&#xff0c;列为不推荐下载。但是qt5以其广泛使用和稳定性&#xff0c;以及积累大量代码使得qt5…...