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

Python 网络爬虫教程与案例详解

Python 网络爬虫教程与案例详解

在当今数字化时代,数据的价值愈发凸显。Python 作为一门强大的编程语言,在数据获取领域有着广泛的应用,其中网络爬虫便是一项重要的技术。网络爬虫能够自动从网页中提取所需数据,极大地提高了数据收集的效率。接下来,让我们深入学习 Python 网络爬虫的相关知识,并通过实际案例来加深理解。

一、Python 网络爬虫基础

1.1 什么是网络爬虫

网络爬虫,简单来说,就是模拟人类用户在浏览器中访问网页的行为,自动地从互联网上获取数据的程序。它可以像人一样在网页之间跳转、点击链接、填写表单等操作,只不过爬虫的速度更快且不知疲倦。例如,搜索引擎的爬虫会遍历互联网上的大量网页,抓取网页内容,以便为用户提供搜索服务。

1.2 爬虫的工作原理

当我们在浏览器中输入一个网址并回车后,浏览器会向服务器发送一个 HTTP 请求,服务器接收到请求后,根据请求的内容返回相应的 HTML、CSS、JavaScript 等文件。浏览器再对这些文件进行解析和渲染,最终呈现出我们看到的网页界面。

爬虫的工作原理与之类似。它首先向目标网页发送 HTTP 请求,获取服务器返回的响应内容。这个响应内容通常是网页的源代码,包含了我们想要的数据。然后,爬虫需要对这些源代码进行解析,从中提取出有用的信息,比如文本、图片链接、表格数据等。最后,将提取到的数据进行存储,以便后续分析和使用。

1.3 爬虫的合法性与道德性

在进行网络爬虫开发之前,我们必须明确爬虫的合法性和道德性问题。虽然爬虫技术本身是中立的,但使用不当可能会违反法律法规和网站的使用条款。例如,未经授权爬取涉及个人隐私、商业机密的数据,或者对网站造成过大的负载影响其正常运行,都可能面临法律风险。

在道德层面,我们也应该尊重网站的意愿。许多网站都有明确的robots.txt文件,该文件规定了爬虫可以和不可以访问的内容。我们在编写爬虫时,应该遵守这些规则,避免对网站造成不必要的干扰。

二、Python 爬虫相关库介绍

2.1 requests 库

requests库是 Python 中用于发送 HTTP 请求的第三方库,它的使用非常简单且功能强大,相比 Python 内置的urllib库更加人性化。使用requests库前,需要先安装它,可以通过pip install requests命令进行安装。

下面是一个使用requests库获取网页内容的简单示例:

import requests
url = 'https://www.example.com'  # 替换为你要爬取的网址
response = requests.get(url)
if response.status_code == 200:print(response.text)
else:print(f'请求失败,状态码:{response.status_code}')

在这个示例中,我们使用requests.get()方法向目标网址发送了一个 GET 请求,并通过response.status_code检查请求是否成功。如果状态码为 200,表示请求成功,response.text中存储的就是网页的源代码。

2.2 BeautifulSoup 库

BeautifulSoup库是用于解析 HTML 和 XML 文档的库,它可以将复杂的 HTML 文档转换为一个树形结构,方便我们从中提取所需的数据。同样,在使用前需要通过pip install beautifulsoup4进行安装。

结合上面requests库获取到的网页内容,使用BeautifulSoup库来提取网页标题的示例如下:

from bs4 import BeautifulSoup
import requests
url = 'https://www.example.com'
response = requests.get(url)
if response.status_code == 200:soup = BeautifulSoup(response.text, 'html.parser')title = soup.title.stringprint(f'网页标题为:{title}')
else:print(f'请求失败,状态码:{response.status_code}')

这里我们创建了一个BeautifulSoup对象soup,并指定使用html.parser解析器。然后通过soup.title.string获取到了网页的标题。

2.3 lxml 库

lxml库也是一个高效的 HTML 和 XML 解析库,它支持 XPath 语法,在处理大型 XML 和 HTML 文档时性能表现出色。安装命令为pip install lxml

使用lxml库结合 XPath 语法提取网页中所有链接的示例代码如下:

from lxml import etree
import requests
url = 'https://www.example.com'
response = requests.get(url)
if response.status_code == 200:html = etree.HTML(response.text)links = html.xpath('//a/@href')for link in links:print(link)else:print(f'请求失败,状态码:{response.status_code}')

在这个例子中,html.xpath('//a/@href')表示选取所有<a>标签的href属性值,即网页中的所有链接。

2.4 re 库(正则表达式库)

re库是 Python 内置的正则表达式库。正则表达式是一种强大的文本匹配工具,可以用于在复杂的文本中查找符合特定模式的字符串。在爬虫中,当其他解析库无法满足复杂的数据提取需求时,正则表达式就派上用场了。

例如,要从一段文本中提取所有的邮箱地址,可以使用以下代码:

import re
text = "我的邮箱是example@example.com,他的邮箱是test@test.com"
pattern = r'\w+@\w+\\.\w+'
emails = re.findall(pattern, text)
print(emails)

这里r'\w+@\w+\.\w+'是一个正则表达式模式,\w表示匹配字母、数字或下划线,+表示匹配前面的字符一次或多次。re.findall()函数会返回所有符合该模式的字符串。

三、Python 网络爬虫案例实战

3.1 爬虫工具类,以bilibili爬虫为例

首先就是需要定位自己需要抓哪个包,比如说我需要抓bilibili的某个包,以json为例,更好体现数据的获取
在这里插入图片描述

将cookie填入工具类,还有header按需复制上去,经过测试几遍,我发现就工具类中设置的几个就够了,然后就右键运行即可获取对应的数据
在这里插入图片描述

from re import U
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
import json
import timedef fetch_csdn_hot_words(url,params,headers):# 创建一个带有重试机制的sessionsession = requests.Session()retry_strategy = Retry(total=3,  # 最多重试3次backoff_factor=0.5,  # 重试间隔status_forcelist=[500, 502, 503, 504, 404]  # 需要重试的HTTP状态码)adapter = HTTPAdapter(max_retries=retry_strategy)session.mount("http://", adapter)session.mount("https://", adapter)try:# 发送GET请求response = session.get(url, params=params,headers=headers,timeout=10,verify=True)# 确保请求成功response.raise_for_status()# 解析JSON响应data = response.json()# 打印结果print(json.dumps(data, indent=2, ensure_ascii=False))return dataexcept requests.exceptions.ConnectTimeout:print("连接超时,请检查网络连接")except requests.exceptions.ReadTimeout:print("读取超时,服务器响应时间过长")except requests.exceptions.ConnectionError:print("连接错误,可能是网络问题或服务器拒绝连接")except requests.exceptions.HTTPError as e:print(f"HTTP错误: {e}")except json.JSONDecodeError:print("JSON解析错误,返回的数据格式不正确")except Exception as e:print(f"其他错误: {e}")return Nonedef get_data_template(url, params, headers):# 添加重试逻辑max_retries = 3retry_delay = 2  # 秒for attempt in range(max_retries):try:result = fetch_csdn_hot_words(url, params, headers)if result:return resultprint(f"第 {attempt + 1} 次尝试失败,等待 {retry_delay} 秒后重试...")time.sleep(retry_delay)except Exception as e:print(f"第 {attempt + 1} 次尝试发生错误: {e}")if attempt < max_retries - 1:print(f"等待 {retry_delay} 秒后重试...")time.sleep(retry_delay)else:print("已达到最大重试次数,程序退出")return Noneif __name__ == "__main__":URL="https://api.vc.bilibili.com/session_svr/v1/session_svr/single_unread"params = {'build': '0','mobi_app': 'web','unread_type': '0','web_location': '333.1007'}headers = {'Accept': 'application/json, text/plain, */*','Accept-Language': 'zh-CN,zh;q=0.9','Connection': 'keep-alive','Origin': 'https://www.bilibili.com','Referer': 'https://www.bilibili.com','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36','Cookie': ''# 去浏览器中抓包复制cookie}get_data_template(URL, params, headers)

3.2 案例一:爬取网页文章内容

假设我们要爬取某个博客网站上的文章内容。以某技术博客为例,我们的目标是获取文章的标题、发布时间和正文内容。

import requests
from bs4 import BeautifulSoup
url = 'https://www.exampleblog.com/article/123'
response = requests.get(url)
if response.status_code == 200:soup = BeautifulSoup(response.text, 'html.parser')# 获取文章标题title = soup.find('h1', class_='article - title').text.strip()# 获取发布时间time = soup.find('span', class_='article - time').text.strip()# 获取正文内容content = soup.find('div', class_='article - content').text.strip()print(f'文章标题:{title}')print(f'发布时间:{time}')print(f'正文内容:{content}')
else:print(f'请求失败,状态码:{response.status_code}')

在这个案例中,我们通过BeautifulSoup库的find()方法,根据 HTML 标签和类名找到了对应的元素,提取出了我们需要的数据。

3.2 案例二:爬取图片

现在我们来实现一个爬取网页上图片的爬虫。以某图片分享网站为例,我们要下载该网站上所有图片。

import requests
from bs4 import BeautifulSoup
import os
url = 'https://www.exampleimage.com'
response = requests.get(url)
if response.status_code == 200:soup = BeautifulSoup(response.text, 'html.parser')img_tags = soup.find_all('img')if not os.path.exists('images'):os.makedirs('images')for img in img_tags:img_url = img.get('src')if img_url.startswith('http'):img_response = requests.get(img_url)img_name = img_url.split('/')[-1]with open(f'images/{img_name}', 'wb') as f:f.write(img_response.content)else:print(f'请求失败,状态码:{response.status_code}')

这段代码首先获取网页中所有的<img>标签,然后通过requests.get()方法获取图片的二进制内容,并将其写入本地文件。注意,我们创建了一个名为images的文件夹来存储下载的图片。

3.3 案例三:爬取表格数据

假设我们要从 [某数据统计网站](https://www.exampledata.com/data - table) 上爬取一个表格中的数据。该表格包含了一些产品的名称、价格和销量信息。

import requests
from bs4 import BeautifulSoup
url = 'https://www.exampledata.com/data - table'
response = requests.get(url)
if response.status_code == 200:soup = BeautifulSoup(response.text, 'html.parser')table = soup.find('table', class_='data - table - class')if table:rows = table.find_all('tr')for row in rows:cols = row.find_all('td')if cols:product_name = cols[0].text.strip()price = cols[1].text.strip()sales = cols[2].text.strip()print(f'产品名称:{product_name},价格:{price},销量:{sales}')else:print(f'请求失败,状态码:{response.status_code}')

在这个案例中,我们先找到包含表格的<table>标签,然后遍历表格的每一行(<tr>标签),再在每一行中找到每一列(<td>标签)的数据并进行打印。

四、应对反爬虫机制

许多网站为了防止爬虫过度抓取数据,会设置一些反爬虫机制。常见的反爬虫机制有以下几种:

User - Agent 检测:网站通过检查请求头中的 User - Agent 字段来判断请求是否来自浏览器。爬虫可以在请求头中设置一个合理的 User - Agent 来伪装成浏览器,例如:

headers = {'User - Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
response = requests.get(url, headers = headers)

IP 限制:如果某个 IP 在短时间内发送过多请求,网站可能会限制该 IP 的访问。解决方法可以使用代理 IP,每次请求时随机更换代理 IP,避免单个 IP 被封禁。可以通过一些代理 IP 服务提供商获取代理 IP 列表,然后在代码中使用:

proxies = {'http': 'http://your_proxy_ip:port','https': 'https://your_proxy_ip:port'
}
response = requests.get(url, headers = headers, proxies = proxies)

验证码:当网站检测到异常请求时,可能会弹出验证码要求用户验证。对于简单的验证码,可以使用一些 OCR(光学字符识别)库进行识别,如pytesseract库。但对于复杂的验证码,可能需要人工辅助或使用第三方验证码识别服务。

五、总结

通过本文的学习,我们了解了 Python 网络爬虫的基本概念、工作原理,学习了常用的爬虫库,如requestsBeautifulSouplxmlre库,并通过实际案例掌握了爬取网页文章内容、图片和表格数据的方法。同时,我们也认识到了反爬虫机制以及应对方法。

网络爬虫是一把双刃剑,合理使用可以帮助我们高效地获取有价值的数据,但滥用则可能带来法律风险和道德问题。在进行爬虫开发时,请务必遵守法律法规和网站的相关规定,以合法、合规、道德的方式使用这项技术。希望本文能为你在 Python 网络爬虫的学习和实践中提供有益的帮助,让你能够在数据获取的道路上迈出坚实的步伐。

相关文章:

Python 网络爬虫教程与案例详解

Python 网络爬虫教程与案例详解 在当今数字化时代&#xff0c;数据的价值愈发凸显。Python 作为一门强大的编程语言&#xff0c;在数据获取领域有着广泛的应用&#xff0c;其中网络爬虫便是一项重要的技术。网络爬虫能够自动从网页中提取所需数据&#xff0c;极大地提高了数据…...

最新的前端场景面试题

1、如何实现一个Vue3的弹框组件,你会如何设计? 如果要实现一个 Vue3 的弹框组件,我会从以下几个关键点进行设计: 组件结构:定义组件的基础结构,包括模块(template)、脚本(script)和样式(style);显示和隐藏逻辑:设计和实现弹框的显示和隐藏机制,通常通过传递 pro…...

冲刺高分!挑战7天一篇孟德尔联合meta分析 DAY1-7

Day1 此前我们完成了若干篇关于meta的挑战&#xff0c;这一次挑战想在meta分析基础上进一步创新一些&#xff0c;这一次想要挑战孟德尔联合meta分析的文章&#xff0c;有想学习的师弟师妹跟我们一起完成这波挑战吧&#xff5e; Day1任务收集信息明确选题明确目标期刊精读范文…...

win32汇编环境,对话框中使用树形视图示例二

;运行效果 ;win32汇编环境,对话框中使用树形视图示例二 ;得到树形视图控件Treeview的全路径字符串,这里的方法是由子项向父项挨个找的算法找齐路径 ;直接抄进RadAsm可编译运行。重要部分加备注。 ;下面为asm文件 ;>>>>>>>>>>>>>>&g…...

前端开发10大框架深度解析

摘要 在现代前端开发中&#xff0c;框架的选择对项目的成功至关重要。本文旨在为开发者提供一份全面的前端框架指南&#xff0c;涵盖 React、Vue.js、Angular、Svelte、Ember.js、Preact、Backbone.js、Next.js、Nuxt.js 和 Gatsby。我们将从 简介、优缺点、适用场景 以及 实际…...

tomcat的web管理

进入到conf cd /usr/local/tomcat/conf/备份tomcat-users.xml cp tomcat-users.xml{.,bak}编辑tomcat-users.xml vim tomcat-users.xml增加以下内容 配置tomcat-users.xml <role rolename"manager-gui"/><role rolename"admin-gui"/><use…...

类和对象(上)

1.面向过程与面向对象的初步认识 面向过程&#xff1a;以步骤为中心&#xff0c;适合简单逻辑&#xff0c;但复杂系统易混乱。 面向对象&#xff1a;以对象职责为中心&#xff0c;通过抽象和模块化应对复杂需求。 C语言&#xff1a;面向过程&#xff0c;关注的是过程&#xff0…...

springcloud智慧工地物联网云管理系统源码

智慧工地以物联网云平台为核心&#xff0c;基于智慧工地物联网云平台与现场多个子系统的互联&#xff0c;实现现场各类工况数据采集&#xff0c;存储、分析与应用。通过接入智慧工地物联网云平台的多个子系统板块&#xff0c;根据现场管理实际需求灵活组合&#xff0c;实现一体…...

SLAM评估工具安装及使用EVO(Ubuntu20.04安装evo)--缺少 onnx 库还有Pandas 版本不兼容解决

介绍一下我的是ubuntu20.04.机载电脑是orinnx&#xff0c;通过源码烧写的系统。 首先打开终端&#xff0c;输入 pip install evo --upgrade --no-binary evo 安装过程中出现如下问题 缺少 onnx 库还有Pandas 版本不兼容&#xff0c; ONNX&#xff08;Open Neural Network E…...

K8S学习之基础十五:k8s中Deployment扩容缩容

deployment扩容缩容比较简单&#xff0c;下面介绍两种常用方法 vi deploy-demo.yaml kind: Deployment metadata:name: myapp-v1 spec:replicas: 2selector:matchLabels:app: myappversion: v1template:metadata:labels:app: myappversion: v1spec:containers:- name: myappim…...

ClickHouse 中出现 DB::Exception: Too many parts 错误

在 ClickHouse 中出现 DB::Exception: Too many parts 错误&#xff0c;通常是由于表中数据分片&#xff08;parts&#xff09;数量超过系统限制&#xff0c;导致合并&#xff08;merge&#xff09;操作无法及时处理。以下是逐步解决方案&#xff1a; 1. 理解问题原因 MergeTr…...

PPT 小黑第20套

对应大猫21 Word转PPT 图片也得复制 题目要求两套PPT母板&#xff0c;应用不同版式&#xff08;版式那就可以选&#xff09; 竖排文字...

大模型管理工具:LLaMA-Factory

目录 一、安装与环境配置 二、​启动 Web 界面 三、数据准备 四、模型训练 五、模型评估 七、模型导出 八、API服务部署 LLaMA-Factory 是一个开源的大语言模型&#xff08;LLM&#xff09;微调框架&#xff0c;旨在简化大规模模型的训练、微调和部署流程。它支持多种主…...

【机器人栅格地图】基于鹭鹰算法SBOA实现机器人栅格地图路径规划(目标函数:最短距离)附Matlab代码

基于鹭鹰算法&#xff08;SBOA&#xff09;的机器人栅格地图路径规划实现 一、鹭鹰算法&#xff08;SBOA&#xff09;的基本原理 鹭鹰优化算法&#xff08;Secretary Bird Optimization Algorithm, SBOA&#xff09;是一种新型元启发式算法&#xff0c;灵感源自鹭鹰的捕猎和逃…...

【Linux篇】版本控制器-Git

&#x1f4cc; 个人主页&#xff1a; 孙同学_ &#x1f527; 文章专栏&#xff1a;Liunx &#x1f4a1; 关注我&#xff0c;分享经验&#xff0c;助你少走弯路&#xff01; 文章目录 1.如何理解版本控制&#xff1f;2.Git的操作补充细节问题 1.如何理解版本控制&#xff1f; 版…...

论文阅读:KAM-CoT: Knowledge Augmented Multimodal Chain-of-Thoughts Reasoning

论文来源&#xff1a;AAAI 2024 论文地址&#xff1a;https://ojs.aaai.org/index.php/AAAI/article/view/29844 Abstract LLM通过利用能够逐步思考的思维链在NLP任务中取得了很好的性能&#xff0c;但是为LLM扩展多模态能力时计算成本高&#xff0c;且需要大量的硬件资源。…...

linux内存页块划分及位图存储机制

page_alloc.c - mm/page_alloc.c - Linux source code v5.4.285 - Bootlin Elixir Cross Referencer 一. 什么是页块&#xff08;Pageblock&#xff09;&#xff1f; 定义&#xff1a;页块是物理内存中的一个连续区域&#xff0c;由 2^pageblock_order 个物理页&#xff08;Pag…...

一台云工作站是否能通过共享云桌面让10人流畅进行三维设计

云工作站&#xff0c;作为一种基于云计算技术的远程工作站解决方案&#xff0c;它将高性能的计算资源集中在云端服务器上&#xff0c;用户通过网络访问这些资源&#xff0c;实现高效、灵活的办公和创作环境。而三维设计&#xff0c;尤其是涉及复杂模型、高精度渲染等领域&#…...

安卓应用之服务

服务 服务也是四大组件之一&#xff0c;用于执行长时间运行操作的组件&#xff0c;它与用户界面&#xff08;UI&#xff09;是分开的&#xff0c;因此即使用户切换到其他应用&#xff0c;服务依然可以继续运行。主要用于处理一些不需要用户交互的任务。例如&#xff0c;播放音…...

【Vue CLI脚手架开发】——6.scoped样式

文章目录 一、scoped是什么二、应用案例1.使用代码2.原理3父组件App未添加scoped影响 一、scoped是什么 我们知道vue为了防止css样式污染&#xff0c;在每个组件中提供了 scoped属性进行限定css作用域&#xff1b;当<style>标签有 scoped 属性时&#xff0c;它的 CSS 只…...

JVM参数调整

一、内存相关参数 1. 堆内存控制 -Xmx&#xff1a;最大堆内存&#xff08;如 -Xmx4g&#xff0c;默认物理内存1/4&#xff09;。-Xms&#xff1a;初始堆内存&#xff08;建议与-Xmx相等&#xff0c;避免动态扩容带来的性能波动&#xff09;。-Xmn&#xff1a;新生代大小&…...

NodeJS学习笔记

NodeJS软件安装 node环境安装&#xff1a; https://nodejs.org 安装好后的node通常在C:\Program Files\nodejs验证安装是否成功 node -v npm -v 进入REPL模式命令行模式 nodeNodeJS在REPL模式和编辑器使用 windos在dos下常用命令 windos命令&#xff1a; 1、cmd dos系统2、…...

缺陷管理工具-禅道

目录 一、禅道的介绍 二、禅道的特点 三、禅道使用流程 1.管理缺陷 2.管理用例 黑马测试视频学习记录 一、禅道的介绍 二、禅道的特点 三、禅道使用流程 1.管理缺陷 2.管理用例...

C++ 单词识别_牛客题霸_牛客网

点击链接即可查看题目: 单词识别_牛客题霸_牛客网 一、题目 描述 输入一个英文句子&#xff0c;把句子中的单词(不区分大小写)按出现次数按从多到少把单词和次数在屏幕上输出来&#xff0c;次数一样的按照单词小写的字典序排序输出&#xff0c;要求能识别英文单词和句号。 输入…...

qt open3dAlpha重建

qt open3dAlpha重建 效果展示二、流程三、代码效果展示 二、流程 创建动作,链接到槽函数,并把动作放置菜单栏 参照前文 三、代码 1、槽函数实现 void on_actionAlpha_triggered();//alpha重建 void MainWindow::...

PS内发光、外发光

内外发光&#xff08;图层样式–》内发光、外发光&#xff09;&#xff1a;&#xff08;滤色 效果最好&#xff09; 内发光–》结构&#xff1a;内发光的外形 内发光–》图素&#xff1a;渐变发光细节的调整 内发光–》品质&#xff1a;增加质感 内发光–》图素–》阻塞&#x…...

C++之thread_local变量

C之thread_local变量_c threadlocal-CSDN博客 thread_local简介 thread_local 是 C11 为线程安全引进的变量声明符。表示对象的生命周期属于线程存储期。 线程局部存储(Thread Local Storage&#xff0c;TLS)是一种存储期(storage duration)&#xff0c;对象的存储是在…...

鸿蒙开发中,数据持久化之Transaction(事务)的概念及应用

SQLite 数据库具备事务处理能力。 事务本质上是一组操作的集合&#xff0c;它具有原子性&#xff0c;意味着这一系列操作要么全部成功执行&#xff0c;要么全部失败&#xff0c;不存在部分操作成功而部分失败的中间状态。 以常见的转账功能为例&#xff0c;A 账户向 B 账户转账…...

软考高项笔记 1.1.1 信息

1.1.1 信息 &#x1f4da; 信息(Information) 是物质、能量及其属性的标示的集合&#xff0c;是确定性的增加。它以物质介质为载体&#xff0c;传递和反映世界各种事物存在方式、运动状态等的表征。信息不是物质&#xff0c;也不是能力&#xff0c;它以一种普遍形式&#xff0c…...

【TCP/IP协议栈】计算机网络知识补充

参考资料&#xff1a; 前言 【计算机网络知识】 总结 IP 在互联网中MAC 在局域网中 1. IP地址 IP地址有两个版本&#xff0c;IPv4和IPv6。IPv6现在并没有普及使用&#xff0c;所以现在使用的地址大部分依然是IPv4。 IP地址是在IP协议中&#xff0c;用来标识网络中不同主机的…...

【C++进阶学习】第一讲——继承(下)---深入挖掘继承的奥秘

目录 1.隐藏 1.1隐藏的概念 1.2隐藏的两种方式 2.继承与友元 3、继承与静态成员 4.单继承和多继承 4.1单继承 4.2多继承 5.菱形继承 问题1&#xff1a;冗余性 问题2&#xff1a;二义性 6.虚拟继承 7.总结 1.隐藏 1.1隐藏的概念 在 C 中&#xff0c;继承是一种机制…...

IDEA Generate POJOs.groovy 踩坑小计 | 生成实体 |groovy报错

一、无法生成注释或生成的注释是null 问题可能的原因&#xff1a; 1.没有从表里提取注释信息&#xff0c;修改def calcFields(table)方法即可 def calcFields(table) {DasUtil.getColumns(table).reduce([]) { fields, col ->def spec Case.LOWER.apply(col.getDataType().…...

数据结构与算法 计算机组成 八股

文章目录 数据结构与算法数组与链表的区别堆的操作红黑树定义及其原理 计算机组成int和uint的表示原码反码补码移码的定义&#xff1f;为什么用补码&#xff1f; 数据结构与算法 数组与链表的区别 堆的操作 红黑树定义及其原理 计算机组成 int和uint的表示 原码反码补码移…...

【奇点时刻】通义千问开源QwQ-32B技术洞察报告(扫盲帖)

以下报告将基于今天各大社区对 Qwen/QwQ-32B&#xff08;下文简称「QwQ-32B」&#xff09;模型的讨论、测评与实测体验进行综合性分析与洞察。本报告将从模型背景与定位、核心技术、性能表现与对比、部署与使用方式&#xff0c;以及未来潜力与可能的影响五个维度&#xff0c;帮…...

神经网络中梯度计算求和公式求导问题

以下是公式一推导出公式二的过程。 表达式一 ∂ E ∂ w j k − 2 ( t k − o k ) ⋅ sigmoid ( ∑ j w j k ⋅ o j ) ⋅ ( 1 − sigmoid ( ∑ j w j k ⋅ o j ) ) ⋅ ∂ ∂ w j k ( ∑ j w j k ⋅ o j ) \frac{\partial E}{\partial w_{jk}} -2(t_k - o_k) \cdot \text{sigm…...

IDEA 2024.1.7 Java EE 无框架配置servlet

1、创建一个目录&#xff08;文件夹&#xff09;lib来放置我们的库 2、将tomcat目录下的lib文件夹中的servlet-api.jar文件复制到刚创建的lib文件夹下。 3、把刚才复制到lib下的servlet-api.jar添加为库 4、在src下新建一个package&#xff1a;com.demo&#xff0c;然后创…...

Three.js 快速入门教程【十四】使用Stats.js监控渲染帧率和性能优化

系列文章目录 Three.js 快速入门教程【一】开启你的 3D Web 开发之旅 Three.js 快速入门教程【二】透视投影相机 Three.js 快速入门教程【三】渲染器 Three.js 快速入门教程【四】三维坐标系 Three.js 快速入门教程【五】动画渲染循环 Three.js 快速入门教程【六】相机控件 Or…...

基于RapidOCR与DeepSeek的智能表格转换技术实践

基于RapidOCR与DeepSeek的智能表格转换技术实践 一、技术背景与需求场景 在金融分析、数据报表处理等领域&#xff0c;存在大量图片格式的表格数据需要结构化处理。本文介绍基于开源RapidOCR表格识别与DeepSeek大模型的智能转换方案&#xff0c;实现以下典型场景&#xff1a; …...

简单多状态 dp 问题(典型算法思想)—— OJ例题算法解析思路

目录 一、面试题 17.16. 按摩师 - 力扣&#xff08;LeetCode&#xff09; 算法代码&#xff1a; 代码思路解析&#xff1a; 问题分析&#xff1a; 动态规划定义&#xff1a; 状态转移方程&#xff1a; 初始化&#xff1a; 填表&#xff1a; 返回值&#xff1a; 优化空…...

【电路笔记 TMS320C6***DSP】外部存储器接口 A EMIFA向FPGA(作为异步存储器)写入数据的示例

目录 DSP和FPGA的连接DSP端&#xff1a;传输数据给FPGAFPGA端&#xff1a;接收数据 EMIFA&#xff08;External Memory Interface A&#xff09;的“异步存储器”&#xff08;Asynchronous Memory&#xff09;指的是那些不与系统时钟同步进行读写操作的外部存储设备。这类存储器…...

pgsql 查看数据库、表、索引大小等

查询数据库大小 -- 查询单个数据库大小 select pg_size_pretty(pg_database_size(postgres)) as size;-- 查询所有数据库大小 select datname, pg_size_pretty (pg_database_size(datname)) AS size from pg_database; 查询表大小 -- 查询单个表大小 select pg_size_pretty(p…...

物联网感知层采集的数据 经过etl 后 ,输送给ai 训练模型 和模型本身调优

在物联网(IoT)系统中,感知层采集的数据经过 ETL(Extract, Transform, Load) 处理后,可以作为 AI 模型的训练数据,用于模型训练和调优。以下是实现这一过程的详细步骤和技术方案: 一、数据流程概述 数据采集:通过传感器和物联网设备采集原始数据。ETL 处理:对原始数据…...

C语言基础

一、基础 C语言文件 后缀 .c为源文件 .h为头文件 以 Visual studio 为例右键点击源文件点击添加&#xff0c;新建项 .c为C语言文件&#xff0c;.cpp为C文件 后缀不同编译器会按照不同的编译语法进行编译 .cpp以C语法 第一个程序 #include <stdio.h> //包含 st…...

pinginfoview网络诊断工具中文版

介绍 pinginfoview中文版本是一款实用的网络诊断工具&#xff0c;它专为中文用户设计&#xff0c;提供了方便易用的界面&#xff0c;使得在Windows环境下进行ping测试变得更加简单。该工具是由NirSoft开发的一款免费的桌面应用程序&#xff0c;尽管官方可能并未正式发布中文版…...

Anyting LLM LLM温度设置范围

在Anything LLM中&#xff0c;LLM&#xff08;Language Model&#xff09;的温度设置是一个关键参数&#xff0c;它影响着模型生成文本时的随机性和确定性。关于Anything LLM的LLM温度设置范围&#xff0c;虽然没有官方的明确数值范围说明&#xff0c;但通常温度参数的设置遵循…...

鸿蒙Android4个脚有脚线

效果 min:number122max:number150Row(){Stack(){// 底Text().border({width:2,color:$r(app.color.yellow)}).height(this.max).aspectRatio(1)// 长Text().backgroundColor($r(app.color.white)).height(this.max).width(this.min)// 宽Text().backgroundColor($r(app.color.w…...

RecyclerView与ListView的优化

RecyclerView与ListView的优化 一、基础概念对比 1.1 ListView与RecyclerView概述 ListView和RecyclerView都是Android中用于展示列表数据的重要控件&#xff0c;但RecyclerView是更现代化的解决方案&#xff0c;提供了更多的灵活性和性能优势。 ListView特点 Android早期…...

【人工智能】GPT-4 vs DeepSeek-R1:谁主导了2025年的AI技术竞争?

前言 2025年&#xff0c;人工智能技术将迎来更加激烈的竞争。随着OpenAI的GPT-4和中国初创公司DeepSeek的DeepSeek-R1在全球范围内崭露头角&#xff0c;AI技术的竞争格局开始发生变化。这篇文章将详细对比这两款AI模型&#xff0c;从技术背景、应用领域、性能、成本效益等多个方…...

2025年Cursor最新安装使用教程

Cursor安装教程 一、Cursor下载二、Cursor安装三、Cursor编辑器快捷键(1) 基础编辑快捷键(2) 导航快捷键(3) 其他常用快捷键 一、Cursor下载 Cursor官方网站&#xff08;https://www.cursor.com/ &#xff09; 根据自己电脑操作系统选择对应安装包 二、Cursor安装 下载完成后…...

原码、反码和补码的介绍和区别

在计算机中&#xff0c;有符号整数的表示方法主要有 原码、反码和补码&#xff0c;它们解决了二进制数表示正负数及简化运算的问题。以下是分步说明&#xff1a; 1. 原码&#xff08;Sign-Magnitude&#xff09; 定义&#xff1a;最高位为符号位&#xff08;0正1负&#xff09…...