Python 爬虫爬取京东商品信息

news/2024/9/19 0:48:58/ 标签: 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)
  • 作用:随机等待一段时间,防止被网站检测到爬虫行为。

  • 细节
    • 生成一个在timeStimeE之间的随机数作为睡眠时间。

    • 使用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()

 最后,如果觉得本项目对你有帮助的话,求求点个star🤩吧,谢谢了~


http://www.ppmy.cn/news/1519161.html

相关文章

学习大数据DAY43 Sqoop 安装,配置环境和使用

目录 sqoop 安装 配置 mysql sqoop 安装 sqoop 指令集 sqoop 使用 sqoop 创建 hive 表 sqoop 全量导入表 sqoop 增量导入表 sqoop 全量导出表 sqoop 分区表导入表 sqoop 分区表导出表 上机练习 sqoop 安装 配置 mysql create database test DEFAULT CHARACTER S…

农产品智慧物流系统论文

摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱,出错率高,信息安全性差&#x…

python 实现一个简单的网页爬虫程序

最近在学习python,以下为网页爬虫代码,供参考 1、爬取指定网页的标题和所有的连接 2、并将这些信息保存到一个文件中。 前置:因使用到网页相关的功能,故需导入requests、BeautifulSoup 库来完成 #导入网页相关的库 import requ…

干货分享|分享一款高效的软件卸载神器 Geek Uninstaller

问题:卸载软件时,时常会留下残留文件和注册表。当遇到流氓软件,还常常卸载失败。 1.软件介绍 特点:高效快速,小巧便携。100% 免费 2.下载方法 官方下载网站:Geek Uninstaller - the best FREE uninstaller …

中锂天源锂电池:为卡车驻车空调提供高效、安全、持久的能源解决方案

随着我国运输行业的飞速发展,卡车司机对驾驶环境和行车舒适度的要求越来越高。在炎炎夏日或寒冷冬季,驻车空调已成为卡车司机的必需品。然而,传统驻车空调供电方式存在诸多问题,如电力不足、续航时间短等。为解决这一痛点&#xf…

Unet改进17:添加ShuffleAttention||减少冗余计算和同时存储访问

本文内容:在不同位置添加ShuffleAttention注意力机制 目录 论文简介 1.步骤一 2.步骤二 3.步骤三 4.步骤四 论文简介 注意机制使神经网络能够准确地关注输入的所有相关元素,已成为提高深度神经网络性能的重要组成部分。在计算机视觉研究中广泛应用的注意机制主要有空间注…

ElasticSearch7.12.1详细安装

部署ElasticSearch docker安装 因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络 创建网络 docker network create es-net 查看网络列表 docker network ls 获取镜像包 docker pull elasticsearch:7.12.1 运行 docker run -d \ -…

【扩散模型(七)】IP-Adapter 与 IP-Adapter Plus 的具体区别是什么?

系列文章目录 【扩散模型(二)】IP-Adapter 从条件分支的视角,快速理解相关的可控生成研究【扩散模型(三)】IP-Adapter 源码详解1-训练输入 介绍了训练代码中的 image prompt 的输入部分,即 img projection…

EXO:模型最终验证的地方;infer_tensor;step;MLXDynamicShardInferenceEngine

目录 EXO:模型最终验证的地方 EXO:infer_tensor EXO:step MXNet的 mx.array 类型是什么 NDArray优化了什么 1. 异步计算和内存优化 2. 高效的数学和线性代数运算 3. 稀疏数据支持 4. 自动化求导 举例说明 EXO:模型最终验证的地方 EXO:infer_tensor 这段代码定…

MariaDB 和 MySQL 版本关联

MariaDB 和 MySQL 是两个常用的关系型数据库管理系统(RDBMS),它们在很多方面非常相似,因为 MariaDB 是 MySQL 的一个分支。MariaDB 和 MySQL 之间的版本关联可以通过以下几个方面来理解: 1. 历史背景 MySQL: MySQL 是…

数学建模强化宝典(1)级比检验

前言 级比检验是灰色预测中一个重要的步骤,主要用于判断原始数据是否满足准指数规律,从而确定数据是否适合进行灰色预测分析。 一、级比检验的定义 级比检验是通过计算原始数据与其前一期数据的比值(即级比),并对级比进…

智普大模型API调用

接口 用python调用智普免费API接口的例子,写成函数, 类似于 def get_answer(prompt):url = http://34.132.32.68:8081/v1/chat/completionsheaders = {Content-Type: application/json,}data = {"model": "Qwen2-72B-int4","messages": [{&q…

强化学习——马尔可夫决策过程的理解

目录 一、马尔可夫决策过程1.策略2.状态价值函数3.动作价值函数4.贝尔曼期望方程 参考文献 一、马尔可夫决策过程 马尔可夫决策过程(MDP)是马尔可夫奖励过程(MRP)的扩展,它引入了“动作”这一外界的影响因素&#xff0…

vscode怎么改成黑色主题?

在Visual Studio Code(简称VS Code)中,将界面调整为黑色主题是一个简单的过程,可以通过几个步骤轻松完成。以下是详细的操作指南,涵盖了从基本设置到高级自定义化的不同方法。 通过用户设置更改主题 打开设置&#xf…

C# 去掉字符串最后一个字符的5种方法

C# 去掉字符串最后一个字符的 5 种方法 (1)Substring string original "Hello!"; string result original.Substring(0, original.Length - 1); Console.WriteLine(result); // 输出: Hello (2)Remove string o…

prometheus安装篇

一、安装 1、下载二进制安装包 https://github.com/prometheus/prometheus/releases/download/v2.25.0/prometheus-2.25.0.linux-amd64.tar.gz 2、解压 rootxxx:~# cd /data rootxxx:~# tar -xf prometheus-2.25.0.linux-amd64.tar.gz rootxxx:~# mv prometheus-2.25.0.li…

比较一下React与Vue

React和Vue都是现代前端开发中广泛使用的JavaScript库,它们各自具有独特的特点和优势。以下是对React和Vue的比较: 1. 开发模式和范式 React: 本质是一个前端组件框架,由后端组件演化而来。 鼓励将UI分解为小的、独立的、可复用…

零基础学习人工智能—Python—Pytorch学习(九)

前言 本文主要介绍卷积神经网络的使用的下半部分。 另外,上篇文章增加了一点代码注释,主要是解释(w-f2p)/s1这个公式的使用。 所以,要是这篇文章的代码看不太懂,可以翻一下上篇文章。 代码实现 之前,我们已经学习了概念…

神经网络搭建实战与Sequential的使用

一、需要处理的图像 二、对上述图片用代码表示: import torch from torch import nn from torch.nn import Conv2d, MaxPool2d, Flatten, Linearclass SUN(nn.Module):def __init__(self):super(SUN, self).__init__()self.conv1 Conv2d(3, 32, 5, padding2)self…

vivado 的 ila 接AXI 总线一直报错

反复测试都是The debug hub core was not detected。 接线正确的前提下总是报错,我的时钟接的ps端的时钟线FCLK_CLK0.对jtag的频率多次调整也没效果,后来参考他人意见,重启了ps端,解决问题。 重启PS端就是将vitis软件至于DEBUG状…