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 相关名词解释: 在之前的主从复制中,存在一个问题,那就是当主节点挂了后,通过人工干预的方式来解决是比较繁琐且不那么靠谱的。 在实际开发中,对…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...

R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...