Python爬取京东商品信息,详细讲解,手把手教学(附源码)
Python 爬虫爬取京东商品信息
下面我将逐一解释每一部分的代码
导入库
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.edge.options import Options
import time
import random
import csv
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from pyquery import PyQuery as pq
import os
import requests
from datetime import datetime
import re
-
作用:导入所有必要的库和模块。
-
技术栈:
-
selenium: 用于自动化浏览器操作。 -
time,random: 用于添加延迟和生成随机数。 -
csv: 用于读写CSV文件。 -
os: 用于文件系统操作。 -
requests: 用于发送HTTP请求(例如下载图片)。 -
datetime: 用于处理日期和时间。 -
re: 用于正则表达式匹配。
配置变量
KEYWORD = '美妆'
CSV_FILE = 'DepartmentStore.csv'
id = 3538
dratenums = 5
drate = 5
num = 5
-
作用:初始化全局变量。
-
技术栈:无特殊技术栈。
设置WebDriver
# 创建EdgeOptions对象
options = Options()# 设置Edge WebDriver的路径
webdriver_path = 'G:\\大三下暑期实训基于电商商品推荐平台\\爬虫\\a\\msedgedriver.exe'
service = Service(webdriver_path)# 初始化Edge WebDriver
driver = webdriver.Edge(service=service, options=options)# 窗口最大化
driver.maximize_window()wait = WebDriverWait(driver, 15)
-
作用:初始化Microsoft Edge WebDriver。
-
技术栈:
-
selenium: 用于自动化浏览器操作。
函数定义
search_goods 函数
def search_goods(start_page, total_pages):
-
作用:搜索特定商品并处理翻页逻辑。
-
技术栈:
-
selenium: 用于自动化浏览器操作。 -
pyquery: 用于解析HTML文档。 -
time: 用于添加延迟。 -
random: 用于生成随机数。
page_turning 函数
def page_turning(page_number):# ...
-
作用:实现翻页操作。
-
技术栈:
selenium: 用于自动化浏览器操作。
random_sleep 函数
def random_sleep(timeS, timeE):# ...
-
作用:随机等待一段时间,防止被网站检测到爬虫行为。
-
技术栈:
time,random: 用于添加延迟和生成随机数。
scroll_smoothly 函数
def scroll_smoothly(duration):# ...
-
作用:平滑滚动页面以模拟真实用户行为。
-
技术栈:
selenium: 用于自动化浏览器操作。
get_goods 函数
def get_goods():# ...
-
作用:获取商品列表中的具体信息。
-
技术栈:
-
selenium: 用于自动化浏览器操作。 -
pyquery: 用于解析HTML文档。 -
os: 用于文件系统操作。 -
requests: 用于发送HTTP请求(例如下载图片)。 -
datetime: 用于处理日期和时间。 -
re: 用于正则表达式匹配。
save_to_csv 函数
def save_to_csv(result):# ...
-
作用:将获取到的商品信息保存到CSV文件中。
-
技术栈:
csv: 用于读写CSV文件。
main 函数
def main():# ...
-
作用:主函数,用于启动爬虫并处理异常。
-
技术栈:无特殊技术栈。
主程序入口
if __name__ == '__main__':main()
-
作用:程序的入口点。
-
技术栈:无特殊技术栈。
接下来,我将针对每个函数进行详细的代码解释。
search_goods 函数
def search_goods(start_page, total_pages):print('正在搜索: ')try:driver.get('https://www.taobao.com')time.sleep(10)driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument",{"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""})input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#q")))submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#J_TSearchForm > div.search-button > button')))input.send_keys(KEYWORD)submit.click()time.sleep(10)if start_page != 1:driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")random_sleep(1, 3)pageInput = wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="root"]/div/div[3]/div[1]/div[1]/div[2]/div[4]/div/div/span[3]/input')))pageInput.send_keys(start_page)admit = wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="root"]/div/div[3]/div[1]/div[1]/div[2]/div[4]/div/div/button[3]')))admit.click()get_goods()for i in range(start_page + 1, start_page + total_pages):page_turning(i)except TimeoutException:print("search_goods: error")return search_goods(start_page, total_pages)
-
作用:搜索特定商品并处理翻页逻辑。
-
细节:
-
打开淘宝网站并等待页面加载。
-
使用CDP命令禁用WebDriver标志,以防被网站检测。
-
在搜索框中输入关键词并提交。
-
如果不是第一页,则跳转到指定的起始页。
-
调用
get_goods函数获取商品信息。 -
循环翻页并获取商品信息。
page_turning 函数
def page_turning(page_number):print('正在翻页: ', page_number)try:submit = wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="sortBarWrap"]/div[1]/div[2]/div[2]/div[8]/div/button[2]')))submit.click()wait.until(EC.text_to_be_present_in_element((By.XPATH, '//*[@id="sortBarWrap"]/div[1]/div[2]/div[2]/div[8]/div/span/em'), str(page_number)))get_goods()except TimeoutException:page_turning(page_number)
-
作用:实现翻页操作。
-
细节:
-
点击下一页按钮。
-
等待新的页面加载完成。
-
调用
get_goods函数获取商品信息。
random_sleep 函数
def random_sleep(timeS, timeE):random_sleep_time = random.uniform(timeS, timeE)time.sleep(random_sleep_time)
-
作用:随机等待一段时间,防止被网站检测到爬虫行为。
-
细节:
-
生成一个在
timeS到timeE之间的随机数作为睡眠时间。 -
使用
time.sleep暂停指定的时间。
scroll_smoothly 函数
def scroll_smoothly(duration):total_height = driver.execute_script("return document.body.scrollHeight")viewport_height = driver.execute_script("return window.innerHeight")steps = 30 # 分成30步step_duration = duration / steps # 每步的时间step_height = (total_height - viewport_height) / steps # 每步的高度for i in range(steps):driver.execute_script(f"window.scrollBy(0, {step_height});")time.sleep(step_duration)
-
作用:平滑滚动页面以模拟真实用户行为。
-
细节:
-
计算页面的总高度和视窗的高度。
-
计算每次滚动的距离和时间。
-
使用JavaScript执行平滑滚动效果。
get_goods 函数
def get_goods():global id, drate, dratenums, num # 声明使用全局变量 idrandom_sleep(2, 4)# 滑动浏览器滚轮,向下滑动scroll_smoothly(4)random_sleep(4, 4) # 等待页面加载html = driver.page_sourcedoc = pq(html)items = doc('div.PageContent--contentWrap--mep7AEm > div.LeftLay--leftWrap--xBQipVc > div.LeftLay--leftContent--AMmPNfB > div.Content--content--sgSCZ12 > div > div').items()for item in items:title = item.find('.Title--title--jCOPvpf span').text()price_int = item.find('.Price--priceInt--ZlsSi_M').text()price_float = item.find('.Price--priceFloat--h2RR0RK').text()if price_int and price_float:price = float(f"{price_int}{price_float}")else:price = 0.0deal = item.find('.Price--realSales--FhTZc7U').text()location = item.find('.Price--procity--_7Vt3mX').text()shop = item.find('.ShopInfo--TextAndPic--yH0AZfx a').text()postText = item.find('.SalesPoint--subIconWrapper--s6vanNY span').text()result = 1 if "包邮" in postText else 0image = item.find('.MainPic--mainPicWrapper--iv9Yv90 img').attr('src')# 图片的URLimage_url = imagepattern = r"https:\/\/.*?\.jpg"match = re.search(pattern, image_url)if match:print("Extracted URL:", match.group(0))else:print("No match found")image_url = match.group(0)# 保存图片的文件夹save_folder = "shopping_cover"# 确保保存路径存在if not os.path.exists(save_folder):os.makedirs(save_folder)# 将图片文件名固定为 '1.jpg'image_name = str(id) + ".jpg"# 完整的保存路径save_path = os.path.join(save_folder, image_name)# 获取当前日期current_date = datetime.now()# 格式化日期为 'yyyy-mm-dd'formatted_date = current_date.strftime('%Y-%m-%d')imdblink = item.find('.Card--doubleCardWrapper--L2XFE73 a').attr('href')# 下载图片并保存try:with requests.get(image_url, stream=True) as response:response.raise_for_status()with open(save_path, 'wb') as f:for chunk in response.iter_content(chunk_size=8192):if chunk: # filter out keep-alive new chunksf.write(chunk)print(f"图片已保存到: {save_path}")product = {'id': id,'name': title,'director': shop,'country': location,'years': formatted_date,'leader': price,'d_rate_nums': dratenums,'d_rate': drate,'intro': deal + str(result),'num': num,'orign_image_link': image,'image_link': save_folder + '/' + image_name,'imdb_link': imdblink}save_to_csv(product)id += 1except requests.RequestException as e:print(f"下载图片失败:{e}")# 直接滑动浏览器滚轮到最顶部driver.execute_script("window.scrollTo(0, 0);")
-
作用:获取商品列表中的具体信息。
-
细节:
-
使用
pyquery解析HTML源码。 -
提取每个商品的信息。
-
下载并保存商品图片。
-
调用
save_to_csv保存数据。
save_to_csv 函数
def save_to_csv(result):try:with open(CSV_FILE, mode='a', newline='', encoding='utf-8') as file:writer = csv.writer(file)writer.writerow([result['id'], result['name'], result['director'], result['country'], result['years'], result['leader'], result['d_rate_nums'], result['d_rate'], result['intro'], result['num'], result['orign_image_link'], result['image_link'], result['imdb_link']])print('存储到CSV成功: ', result)except Exception as e:print('存储到CSV出错: ', result, e)
-
作用:将获取到的商品信息保存到CSV文件中。
-
细节:
-
将商品信息追加到CSV文件中。
-
输出保存成功的消息或错误消息。
main 函数
def main():try:# 检查文件是否存在,如果不存在则创建并写入标题行if not os.path.exists(CSV_FILE):with open(CSV_FILE, mode='w', newline='', encoding='utf-8') as file:writer = csv.writer(file)writer.writerow(['id', 'name', 'director', 'country', 'years', 'leader', 'd_rate_nums', 'd_rate', 'intro', 'num', 'orign_image_link', 'image_link', 'imdb_link'])pageStart = int(input("输入您想开始爬取的页面数: "))pageAll = int(input("输入您想爬取的总页面数: "))search_goods(pageStart, pageAll)except Exception as e:print('main函数报错: ', e)
-
作用:主函数,用于启动爬虫并处理异常。
-
细节:
-
检查CSV文件是否存在,若不存在则创建并写入表头。
-
获取用户输入的起始页和总页数。
-
调用
search_goods函数开始爬取。
主程序入口
if __name__ == '__main__':main()
-
作用:程序的入口点。
-
细节:当直接运行此文件时,执行
main函数。
以下是完整代码
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.edge.options import Options
import time
import random
import csv
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from pyquery import PyQuery as pq
import os
import requests
from datetime import datetime
import reKEYWORD = '美妆'
CSV_FILE = 'DepartmentStore.csv'
id = 3538
dratenums = 5
drate = 5
num = 5# 创建EdgeOptions对象
options = Options()# 设置Edge WebDriver的路径
webdriver_path = 'G:\\大三下暑期实训基于电商商品推荐平台\\爬虫\\a\\msedgedriver.exe'
service = Service(webdriver_path)# 初始化Edge WebDriver
driver = webdriver.Edge(service=service, options=options)# 窗口最大化
driver.maximize_window()wait = WebDriverWait(driver, 15)def search_goods(start_page, total_pages):print('正在搜索: ')try:driver.get('https://www.taobao.com')time.sleep(10)driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument",{"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""})input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#q")))submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#J_TSearchForm > div.search-button > button')))input.send_keys(KEYWORD)submit.click()time.sleep(10)if start_page != 1:driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")random_sleep(1, 3)pageInput = wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="root"]/div/div[3]/div[1]/div[1]/div[2]/div[4]/div/div/span[3]/input')))pageInput.send_keys(start_page)admit = wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="root"]/div/div[3]/div[1]/div[1]/div[2]/div[4]/div/div/button[3]')))admit.click()get_goods()for i in range(start_page + 1, start_page + total_pages):page_turning(i)except TimeoutException:print("search_goods: error")return search_goods(start_page, total_pages)def page_turning(page_number):print('正在翻页: ', page_number)try:submit = wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="sortBarWrap"]/div[1]/div[2]/div[2]/div[8]/div/button[2]')))submit.click()wait.until(EC.text_to_be_present_in_element((By.XPATH, '//*[@id="sortBarWrap"]/div[1]/div[2]/div[2]/div[8]/div/span/em'), str(page_number)))get_goods()except TimeoutException:page_turning(page_number)def random_sleep(timeS, timeE):random_sleep_time = random.uniform(timeS, timeE)time.sleep(random_sleep_time)def scroll_smoothly(duration):total_height = driver.execute_script("return document.body.scrollHeight")viewport_height = driver.execute_script("return window.innerHeight")steps = 30 # 分成30步step_duration = duration / steps # 每步的时间step_height = (total_height - viewport_height) / steps # 每步的高度for i in range(steps):driver.execute_script(f"window.scrollBy(0, {step_height});")time.sleep(step_duration)def get_goods():global id, drate, dratenums, num # 声明使用全局变量 idrandom_sleep(2, 4)# 滑动浏览器滚轮,向下滑动scroll_smoothly(4)random_sleep(4, 4) # 等待页面加载html = driver.page_sourcedoc = pq(html)items = doc('div.PageContent--contentWrap--mep7AEm > div.LeftLay--leftWrap--xBQipVc > div.LeftLay--leftContent--AMmPNfB > div.Content--content--sgSCZ12 > div > div').items()for item in items:title = item.find('.Title--title--jCOPvpf span').text()price_int = item.find('.Price--priceInt--ZlsSi_M').text()price_float = item.find('.Price--priceFloat--h2RR0RK').text()if price_int and price_float:price = float(f"{price_int}{price_float}")else:price = 0.0deal = item.find('.Price--realSales--FhTZc7U').text()location = item.find('.Price--procity--_7Vt3mX').text()shop = item.find('.ShopInfo--TextAndPic--yH0AZfx a').text()postText = item.find('.SalesPoint--subIconWrapper--s6vanNY span').text()result = 1 if "包邮" in postText else 0image = item.find('.MainPic--mainPicWrapper--iv9Yv90 img').attr('src')# 图片的URLimage_url = imagepattern = r"https:\/\/.*?\.jpg"match = re.search(pattern, image_url)if match:print("Extracted URL:", match.group(0))else:print("No match found")image_url = match.group(0)# 保存图片的文件夹save_folder = "shopping_cover"# 确保保存路径存在if not os.path.exists(save_folder):os.makedirs(save_folder)# 将图片文件名固定为 '1.jpg'image_name = str(id) + ".jpg"# 完整的保存路径save_path = os.path.join(save_folder, image_name)# 获取当前日期current_date = datetime.now()# 格式化日期为 'yyyy-mm-dd'formatted_date = current_date.strftime('%Y-%m-%d')imdblink = item.find('.Card--doubleCardWrapper--L2XFE73 a').attr('href')# 下载图片并保存try:with requests.get(image_url, stream=True) as response:response.raise_for_status()with open(save_path, 'wb') as f:for chunk in response.iter_content(chunk_size=8192):if chunk: # filter out keep-alive new chunksf.write(chunk)print(f"图片已保存到: {save_path}")product = {'id': id,'name': title,'director': shop,'country': location,'years': formatted_date,'leader': price,'d_rate_nums': dratenums,'d_rate': drate,'intro': deal + str(result),'num': num,'orign_image_link': image,'image_link': save_folder + '/' + image_name,'imdb_link': imdblink}save_to_csv(product)id += 1except requests.RequestException as e:print(f"下载图片失败:{e}")# 直接滑动浏览器滚轮到最顶部driver.execute_script("window.scrollTo(0, 0);")def save_to_csv(result):try:with open(CSV_FILE, mode='a', newline='', encoding='utf-8') as file:writer = csv.writer(file)writer.writerow([result['id'], result['name'], result['director'], result['country'], result['years'], result['leader'], result['d_rate_nums'], result['d_rate'], result['intro'], result['num'], result['orign_image_link'], result['image_link'], result['imdb_link']])print('存储到CSV成功: ', result)except Exception as e:print('存储到CSV出错: ', result, e)def main():try:# 检查文件是否存在,如果不存在则创建并写入标题行if not os.path.exists(CSV_FILE):with open(CSV_FILE, mode='w', newline='', encoding='utf-8') as file:writer = csv.writer(file)writer.writerow(['id', 'name', 'director', 'country', 'years', 'leader', 'd_rate_nums', 'd_rate', 'intro', 'num', 'orign_image_link', 'image_link', 'imdb_link'])pageStart = int(input("输入您想开始爬取的页面数: "))pageAll = int(input("输入您想爬取的总页面数: "))search_goods(pageStart, pageAll)except Exception as e:print('main函数报错: ', e)if __name__ == '__main__':main()
这份完整版的代码已经上传至CSDN官方,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费获取【保证100%免费】。

原创: 慕仙少白
相关文章:
Python爬取京东商品信息,详细讲解,手把手教学(附源码)
Python 爬虫爬取京东商品信息 下面我将逐一解释每一部分的代码 导入库 from selenium import webdriver from selenium.webdriver.edge.service import Service from selenium.webdriver.edge.options import Options import time import random import csv from selenium.c…...
大家有没有了解过TLKS-PLGS这款接地电阻在线监测装置?它在电力系统中能发挥什么作用呢?
接地电阻在线监测仪(输电铁塔接地电阻监测装置、变电站接地电阻监测装置、三极法接地网电阻监测装置)在电力系统中发挥着至关重要的作用,具体来说,有以下几个方面: 一、实时监测预警。该装置采用激励脉冲技术…...
Shell中的函数
目录 一、系统函数 (一)前言 (二)常用的函数 basename [string/pathname] [suffix] 二、自定义函数 (一)语法 (二)脚本例子 三、函数实际案例 过程中的报错: …...
通过IP地址或者主机名添加打印机20241023
文印室打印机连接方式20241023 Win键盘搜索打印机和扫描仪点击添加打印机或扫描仪,等候片刻点击“我需要的打印机不在列表中”添加打印机,选择使用IP地址或主机名添加打印机点击下一步,设备类型选择自动检测输入主机名:即打印机有…...
基于SpringBoot+Vue智慧养老关爱系统【提供源码+答辩PPT+参考文档+项目部署】
💥 这两年毕业设计和毕业答辩的要求和难度不断提升,传统的JavaWeb项目缺少创新和亮点,往往达不到毕业答辩的要求! ❗如何解决这类问题? 让我们能够顺利通过毕业,我也一直在不断思考、努力、精进。通过2024年…...
新手教学系列——利用短效代理快速搭建代理池
引言 在进行高并发数据抓取时,很多人都会遇到频繁IP被封的问题。要解决这个问题,代理池的搭建就成了关键。通过频繁更换代理IP,我们可以绕过网站的反爬机制,提升抓取效率。然而,很多初学者可能会觉得构建一个健壮的代理池颇为复杂,尤其是需要快速切换的短效代理池。在这…...
实体与DTO如何转换
下面是一些常用的转换库: Dozer 该项目目前不活跃,并且很可能在未来被弃用。 ModelMapper 一个智能对象映射库,可自动将对象相互映射。它采用基于约定的方法,同时提供简单、重构安全的应用程序接口(API)来…...
Docker 安装Postgres和PostGIS,并制作镜像
1. 查找postgres和postgis现有的镜像和版本号 镜像搜索网站:https://docker.aityp.com/ 测试使用的是postgres:15.4 和 postgis:15-3.4 2、镜像拉取 docker pull postgres:15.4docker pull postgis/postgis:15-3.4镜像下载完成,docker images 查看如…...
ES6:let和const命令解读以及变量的解构赋值
有时候,我们需要的不是答案,而是一双倾听的耳朵 文章目录 let和const命令变量的解构赋值 let和const命令 let和const命令都是声明变量的关键字,类同varlet特点 用来声明变量,不能再次定义,但是值可以改变存在块级作用…...
java-collection集合整理0.9.4
java-集合整理0.9.0 基本结构基本概念实例化举例遍历获取指定值 2024年10月17日09:43:16–0.9.0 2024年10月18日11:00:59—0.9.4 基本结构 Collection 是最顶级的接口。分为 List 和 Set 两大类。List 分为:ArrayList、LinkedList、Vector。Set 分为:Ha…...
ParallelsDesktop20最新版本虚拟机 一键切换系统 游戏娱乐两不误
让工作生活更高效:Parallels Desktop 20最新版本虚拟机的神奇之处 大家好!👋 今天我要跟大家安利一款让我工作效率飞升的神器——Parallels Desktop 20最新版本虚拟机。作为一个日常需要在不同操作系统间来回穿梭的人,这款软件简直…...
现代C语言:C23标准重大更新
虽然没有固定标准,但一般将C99之后的C语言标准称为“现代C语言”,目前的最新标准为C23。C语言的演化包括标准C89、C90、C99、C11、C17和C23,C23是C语言标准的一次重大修订,截至2024年3月,最新版本的gcc和 clang实现了C…...
Maven进阶——坐标、依赖、仓库
目录 1.pomxml文件 2. 坐标 2.1 坐标的概念 2.2 坐标的意义 2.3 坐标的含义 2.4 自己项目的坐标 2.5 第三方项目坐标 3. 依赖 3.1 依赖的意义 3.2 依赖的使用 3.3 第三方依赖的查找方法 3.4 依赖范围 3.5 依赖传递和可选依赖 3.5.1 依赖传递 3.5.2 依赖范围对传…...
Android中的内存泄漏及其检测方式
Android中的内存泄漏及其检测方式 一、Android内存泄漏概述 在Android开发中,内存泄漏是一个常见且严重的问题。内存泄漏指的是在应用程序中,由于某些原因,已经不再使用的对象仍然被引用,导致垃圾回收器(Garbage Col…...
【雷电模拟器命令合集操作大全】官方文档整理贴
此贴是官方的帮助整理文档在这里插入代码片 一起来看看几个主要命令,大部分命令读者可以自己试试~ 1、launch 支持2种启动雷电模拟器的方式 –name顾名思义,应该是模拟器的标题栏的名字,本人经过验证果然如此! –index mnq_idx,模…...
redis的配置文件解析
我的后端学习大纲 我的Redis学习大纲 1.1.Redis的配置文件: 1.Redis的配置文件名称是:redis.conf 2.在vim这个配置文件的时候,默认是不显示行号的,可以编辑下面这个文件,末尾加上set nu,就会显示行号: 1.…...
Python中的元组和列表
Python 列表 Python有6个序列的内置类型,但最常见的是列表和元组。 列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。 列表的数据项不需要具有相同的类型 创建一个列表,只要把逗号分隔的不同的数据项使用方括号…...
【AI战略思考7】粮草筹集完毕和我的朋友分类
注明:这是我昨晚12点多发布在朋友圈的,更新加工后的版本 粮草筹集完毕 统计完成 昨晚从7点半到晚上11点,借款的意向统计完成了,刚好凑够6个月😄,我觉得应该够了,我乐观估计是3个月内找到工作&…...
科大讯飞AI开发者大赛颁奖典礼,万码优才荣获前三甲!
在近日揭晓的科大讯飞AI开发者大赛中,万码优才APP凭借其卓越的技术实力、创新的应用方案以及深厚的行业洞察力,在上百个参赛队伍中脱颖而出,在AI Agent助力行业应用升级赛道荣获三甲排名!再次证明了其在人工智能领域的领先地位与无…...
Redis 哨兵机制
哨兵机制 哨兵机制的介绍 哨兵 (Sentinel) 先来看一下Redis Sentinel 相关名词解释: 在之前的主从复制中,存在一个问题,那就是当主节点挂了后,通过人工干预的方式来解决是比较繁琐且不那么靠谱的。 在实际开发中,对…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
ZYNQ学习记录FPGA(一)ZYNQ简介
一、知识准备 1.一些术语,缩写和概念: 1)ZYNQ全称:ZYNQ7000 All Pgrammable SoC 2)SoC:system on chips(片上系统),对比集成电路的SoB(system on board) 3)ARM:处理器…...
