Python爬虫系统搭建教程,从0开始搭建爬虫系统(附安装包)
文章目录
- 前言
- 一、Python环境搭建
- 1.Python安装
- 2.选择Python开发环境
- 3. 安装必要库
- 二、基础爬虫构建
- 1. 发送请求获取网页
- 2. 解析网页提取数据
- 三、使用 Scrapy 框架搭建系统
- 1. 创建 Scrapy 项目
- 2. 生成爬虫
- 3. 编写爬虫代码
- 4. 运行爬虫
- 四、应对反爬虫机制
- 1. 常见反爬虫手段
- 2. 解决策略
- 五、数据存储
- 1. 存储到文件
- 2. 存储到数据库
- 六、系统优化与扩展
- 1. 性能优化
- 2. 功能扩展
前言
本教程将以循序渐进、深入浅出的方式,带领你从零基础开始,逐步揭开 Python 爬虫系统搭建的神秘面纱。无论你是初涉编程领域的新手,还是希望拓展技能边界的有经验开发者,都能在本教程中找到实用的指导和启发。让我们一同踏上这场充满挑战与惊喜的技术探索之旅,用 Python 爬虫开启数据世界的无限可能!
一、Python环境搭建
1.Python安装
访问 Python 官方网站,根据你的操作系统(Windows、Mac 或 Linux)下载并安装 Python 3.x 版本。安装时勾选 “Add Python to PATH”,方便在命令行中使用 Python。
Python 3.7安装教程:https://blog.csdn.net/u014164303/article/details/145620847
Python 3.9安装教程:https://blog.csdn.net/u014164303/article/details/145570561
Python 3.11安装教程:https://blog.csdn.net/u014164303/article/details/145549489
2.选择Python开发环境
下载 PyCharm 社区版(免费)或专业版(需付费或申请教育版)。安装完成后,打开 PyCharm,创建一个新的项目,在项目设置中选择之前创建的虚拟环境作为项目的 Python 解释器。PyCharm 功能强大,提供代码自动补全、调试等功能,适合开发大型项目。
Pycharm安装教程:https://blog.csdn.net/u014164303/article/details/145674773
PyCharm下载地址:https://pan.quark.cn/s/5756c8cf8b2a
3. 安装必要库
- requests:用于发送 HTTP 请求获取网页内容。在命令行输入 pip install requests 进行安装。
- BeautifulSoup:方便解析 HTML 和 XML 文档,提取所需数据。安装命令为 pip install beautifulsoup4。
- Scrapy:强大的爬虫框架,能高效抓取和处理数据。使用 pip install scrapy 进行安装。
二、基础爬虫构建
1. 发送请求获取网页
import requests# 目标网页 URL
url = 'https://www.example.com'
try:# 发送 GET 请求response = requests.get(url)# 检查响应状态码,200 表示请求成功if response.status_code == 200:html_content = response.textprint(html_content)else:print(f"请求失败,状态码: {response.status_code}")
except requests.RequestException as e:print(f"请求出错: {e}")
2. 解析网页提取数据
from bs4 import BeautifulSoup
import requestsurl = 'https://www.example.com'
response = requests.get(url)
if response.status_code == 200:html = response.text# 使用 BeautifulSoup 解析 HTMLsoup = BeautifulSoup(html, 'html.parser')# 示例:提取所有链接links = soup.find_all('a')for link in links:href = link.get('href')print(href)
三、使用 Scrapy 框架搭建系统
1. 创建 Scrapy 项目
在命令行输入 scrapy startproject myproject 创建项目,然后 cd myproject 进入项目目录。
2. 生成爬虫
运行 scrapy genspider myspider example.com 生成一个名为 myspider 的爬虫,允许爬取 example.com 域名下的网页。
3. 编写爬虫代码
打开 myproject/spiders/myspider.py 文件,编写如下代码:
import scrapyclass MySpider(scrapy.Spider):name = 'myspider'allowed_domains = ['example.com']start_urls = ['https://www.example.com']def parse(self, response):# 示例:提取所有链接links = response.css('a::attr(href)').getall()for link in links:yield {'link': link}
4. 运行爬虫
在项目目录下运行 scrapy crawl myspider -o output.json,爬虫会开始工作,并将结果保存到 output.json 文件中。
四、应对反爬虫机制
1. 常见反爬虫手段
- IP 封禁:网站检测到异常频繁的请求 IP 后会进行封禁。
- Agent 检测:通过请求的 User - Agent 信息判断是否为爬虫。
- 验证码:要求输入验证码验证身份,防止自动化爬虫。
2. 解决策略
- 使用代理 IP:借助第三方代理服务(如快代理、芝麻代理),通过代理服务器发送请求,隐藏真实 IP。
import requestsproxies = {'http': 'http://proxy.example.com:8080','https': 'http://proxy.example.com:8080'
}
response = requests.get(url, proxies=proxies)
设置随机请求头:在请求中设置随机的 User - Agent 信息,模拟真实用户请求。
python
import requests
import randomuser_agents = ['Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3','Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
]
headers = {'User - Agent': random.choice(user_agents)
}
response = requests.get(url, headers=headers)
- 处理验证码:简单验证码可使用 OCR 技术(如 pytesseract 库)识别;复杂验证码可借助第三方验证码识别服务。
五、数据存储
1. 存储到文件
- 保存为 CSV 文件
import csv
import requests
from bs4 import BeautifulSoupurl = 'https://www.example.com'
response = requests.get(url)
if response.status_code == 200:html = response.textsoup = BeautifulSoup(html, 'html.parser')links = soup.find_all('a')with open('links.csv', 'w', newline='', encoding='utf - 8') as csvfile:writer = csv.writer(csvfile)writer.writerow(['Link'])for link in links:href = link.get('href')writer.writerow([href])
2. 存储到数据库
- 存储到 MySQL
import requests
from bs4 import BeautifulSoup
import mysql.connector
# 连接数据库
mydb = mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword",database="yourdatabase"
)
mycursor = mydb.cursor()url = 'https://www.example.com'
response = requests.get(url)
if response.status_code == 200:html = response.textsoup = BeautifulSoup(html, 'html.parser')links = soup.find_all('a')for link in links:href = link.get('href')sql = "INSERT INTO links (link) VALUES (%s)"val = (href,)mycursor.execute(sql, val)mydb.commit()
六、系统优化与扩展
1. 性能优化
- 异步请求:使用 asyncio 和 aiohttp 库实现异步请求,提高并发性能。
import asyncio
import aiohttpasync def fetch(session, url):async with session.get(url) as response:return await response.text()async def main():async with aiohttp.ClientSession() as session:html = await fetch(session, 'https://www.example.com')print(html)asyncio.run(main())
- 分布式爬虫:结合 Scrapy - Redis 等技术,实现多台机器同时抓取数据,提升效率。
2. 功能扩展
- 数据清洗与预处理:使用 pandas 库去除重复数据、处理缺失值。
- 数据分析与可视化:用 pandas 分析数据,matplotlib 或 seaborn 进行可视化展示。
相关文章:
Python爬虫系统搭建教程,从0开始搭建爬虫系统(附安装包)
文章目录 前言一、Python环境搭建1.Python安装2.选择Python开发环境3. 安装必要库 二、基础爬虫构建1. 发送请求获取网页2. 解析网页提取数据 三、使用 Scrapy 框架搭建系统1. 创建 Scrapy 项目2. 生成爬虫3. 编写爬虫代码4. 运行爬虫 四、应对反爬虫机制1. 常见反爬虫手段2. 解…...
linux -对文件描述符的操作dup、fcntl有五种
dup #include<unistd.h> int dup(int oldfd);作用:复制一个新的文件描述符fd 3, int fd1 dup(fd);f指向的是a.txt,fd1指向的也是a.txt从空闲的文件描述符表中找一个最小的作为新的拷贝的文件描述符返回:成功返回新的文件描述符,失败…...
人工智能(AI)的不同维度分类
人工智能(AI)的分类 对机器学习进行分类的方式多种多样,可以根据算法的特性、学习方式、任务类型等不同维度进行分类这些分类都不是互斥的: 1、按数据模态不同:图像,文本,语音,多态等 2、按目标函数不同:判别式模型…...
MySQL的Union和OR查询
这里写目录标题 **1. 创建表和索引****2. 编写 UNION 查询****3. 使用 EXPLAIN 分析查询****4. 分析 EXPLAIN 结果****可能的结果分析**: **5. 验证索引合并****总结****1. UNION 操作的分析****为什么使用临时表?** 2. OR 条件的分析为什么使用索引合并…...
金融业的AI革命——量化交易与智能风控(五)
第五章 AI驱动的智能投顾与普惠金融服务体系 一、智能投顾技术架构的范式革新 1. 技术演进三阶段 阶段核心技术典型应用局限性规则引擎(2015-2020)决策树、专家系统银行理财风险评估自动化(覆盖率98%)无法应对黑天鹅事件机器学习(2020-2023)…...
机动车授权签字人考试题库及答案
一、单选题 11、 资质认定,是指( )以上质量技术监督部门依据有关法律法规和标准、技术规范的规定,对检验检测机构的基本条件和技术能力是否符合法定要求实施的评价许可。资质认定包括检验检测机构计量认证。 A、县级 B、市级 C、地区 D、省级 答案࿱…...
Kafka系列之:记录一次源头数据库刷数据,造成数据丢失的原因
Kafka系列之:记录一次源头数据库刷数据,造成数据丢失的原因 一、背景二、查看topic日志信息三、结论四、解决方法一、背景 源头数据库在很短的时间内刷了大量的数据,部分数据在hdfs丢失了 理论上debezium数据采集不会丢失,就需要排查数据链路某个节点是否有数据丢失。 数据…...
鸿蒙学习-
鸿蒙数据传值 //* 传值 //* State /**State创建一个响应式的数据,但不是所有的更改都会引起刷新,只有被框架观察到的修改才会被刷新UI* 1. 基本数据类型如 number string boolean等值的变化修改* 2. Object类型,只会观察到第一层的数据变化或…...
【多模态处理篇五】【DeepSeek文档解析:PDF/Word智能处理引擎】
你知道吗?全球每天产生的PDF文档超过10亿份,但90%的上班族还在用复制粘贴的笨办法处理文档!DeepSeek文档解析引擎就像给你的电脑装上了"文档翻译官",能把PDF/Word里的文字、表格、公式甚至排版样式都变成AI能理解的"语言"。举个真实场景:法务小姐姐用…...
WPS中如何批量上下居中对齐word表格中的所有文字
大家好,我是小鱼。 在日常制作Word表格时,经常需要对表格中的内容进行排版。经常会把文字设置成左对齐、居中对齐或者是右对齐,这些对齐方式都比较好设置,有时我们制作的表格需要把文字批量上下居中对齐,那么怎么操作…...
【LLM】增强大模型推理能力的四种范式
note 增强大模型推理能力的四种范式:推理时间扩展、纯强化学习(RL)、SFTRL、蒸馏(distillation) 。其实这几种方法本质就是SFTRL: 低成本做事就直接推理时间扩展稍微肯付出成本就蒸馏SFT,顺便搞点高质量COT SFT数据高级点就先用GRPO等RL学习…...
2025年华为手机解锁BL的方法
注:本文是我用老机型测试的,新机型可能不适用 背景 华为官方已经在2018年关闭了申请BL解锁码的通道,所以华为手机已经无法通过官方获取解锁码。最近翻出了一部家里的老手机华为畅玩5X,想着能不能刷个系统玩玩,但是卡…...
鸿蒙状态管理概述 v2
状态管理v2 概述状态管理之v2ObservedV2 和 Trace状态管理V1版本对嵌套类对象属性变化直接观测的局限性ObservedV2 和 Trace 使用场景 Local状态管理V1版本State装饰器的局限性 Param状态管理V1版本接受外部传入的装饰器的局限性 OnceEventComputedComputed 使用场景 TypePersi…...
阿里云上的网站配置HTTPS
1. 获取SSL证书 创建证书 下载证书 下载 上传 .key .pem 文件 到 阿里云服务器 /etc/nginx/ssl nginx.conf 配置 server { listen 443 ssl; server_name yuming; ssl_certificate /etc/nginx/ssl/*.pem; ssl_certificate_key /etc/nginx/ssl/*.key;...
【部署优化篇十四】【十万字全景拆解:GitHub Actions自动化流水线设计圣经(DeepSeek工业级实践大公开)】
一、从手工作坊到智能工厂:CI/CD的革命之路 想象一下,你所在的公司每天要手工组装1000台手机,每个环节都靠老师傅肉眼检查——这就是没有CI/CD的软件开发现状。GitHub Actions的出现,就像给软件交付装上了特斯拉的超级工厂流水线。 DeepSeek的CI/CD演进史就是一部血泪史:…...
Golang | 每日一练 (3)
💢欢迎来到张胤尘的技术站 💥技术如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 Golang | 每日一练 (3)题目参考答案map 实现原理hmapb…...
Java+SpringBoot+Vue+数据可视化的综合健身管理平台(程序+论文+讲解+安装+调试+售后)
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,我会一一回复,希望帮助更多的人。 系统介绍 在当今社会,随着人们生活水平的不断提高和健康意识的日益增强,健…...
深入解析Textual库:打造现代化的终端用户界面(TUI)
深入解析Textual库:打造现代化的终端用户界面(TUI) 在终端应用程序的世界里,过去的交互方式通常是简单的命令行输入和文本输出。然而,随着开发者对更高可用性和更友好界面的追求,现代终端用户界面…...
基于ffmpeg+openGL ES实现的视频编辑工具-opengl相关逻辑(五)
在我们的项目中,OpenGL ES 扮演着至关重要的角色,其主要功能是获取图像数据,经过一系列修饰后将处理结果展示到屏幕上,以此实现各种丰富多样的视觉效果。为了让大家更好地理解后续知识,本文将详细介绍 OpenGL 相关代码。需要注意的是,当前方案将对 OpenGL 的所有操作都集…...
加班限制了进步
今天周六,大家都在加班吗? 做个统计。 最近面试了很多硬件工程师,还没有找到如意的。 这些面试者都很会解决问题,但是不会闭环问题。 EMC不过,加个磁环就过了。为什么加磁环就过了,底层原理不清楚。 改…...
容器化部署tomcat
容器化部署tomcat 需求在docker容器中部署tomcat,并通过外部机器访问tomcat部署的项目 容器化部署要先装好docker容器(docker安装配置) 实现步骤: 拉取tomcat docker pull tomcat用于列出本地Docker主机上存储的所有镜像 docker images在root目录里面创建tomc…...
【HeadFirst系列之HeadFirst设计模式】第7天之命令模式:封装请求,轻松实现解耦!
命令模式:封装请求,轻松实现解耦! 大家好!今天我们来聊聊设计模式中的命令模式(Command Pattern)。如果你曾经需要将请求封装成对象,或者希望实现请求的撤销、重做等功能,那么命令模…...
尚硅谷爬虫note009
一、jsonpath 1.安装 pip install jsonpath 2.使用 只能解析本地文件 .json文件 {"store": {"book": [{"category": "reference","author": "Nigel Rees","title": "Sayings of the Century&qu…...
C语言(11)------------->while循环
一、if与while的区别 在C语言中,有三大结构,分别是顺序、选择和循环。在前面的博客文章中,我们解释了if语句的用法,可以参考:C语言(7)------------>if语句-CSDN博客 从文章中&…...
Unity 全局屏幕点击特效
思路: 1、生成一个点击特效实例,每点击屏幕,就调整特效实例的位置并控制特效的显隐状态即可。 2、需要注意要保证在编辑器开发时或手机上运行时都要显示点击效果。 方案一 (推荐) using UnityEngine; using UnityEn…...
【数据结构初阶第十二节】设计循环队列
云边有个稻草人-CSDN博客 必须有为成功付出代价的决心,然后想办法付出这个代价。 还有最后一道关于队列的习题,这题有点难,准备好迎接挑战吧! 目录 1.【题目】 2.实现循环队列推荐用数组,Why? 3.Q1:如…...
【小白学HTML5】盒模型(一文讲清margin、padding)_第三讲
根据第一讲的内容,我们知道margin是外边距、padding是内边距,那么内外边距该怎么设置呢? 1、margin:外边距 第一种情况:比如设置外边距为上10px、右20px、下30px、左40px 外边距可以分别设置为:margin-t…...
PLC数据采集网关(三格电子)
产品概述 PLC转Modbus网关型号SG-PLC-Private(PLC私有协议网关),是三格电子推出的工业级网关(以下简称网关),主要用于在不需要对PLC编程的情况下将PLC数据映射到Modbus TCP(映射的方式符合PLC工程师使用习惯…...
基于图扑 HT 可视化实现智慧地下采矿可视化
在前端开发领域,不断涌现的新技术为各行业带来了创新变革的可能。今天,让我们聚焦于图扑软件自研的 HT for Web 产品,看看它如何在前端 2D、3D 渲染方面发力,为智慧地下采矿可视化打造令人惊叹的解决方案,为开发者开启…...
【网络】高级IO(2)
或者在某些情况下,它可能是: typedef unsigned int nfds_t; 前言 由于select函数有下面几个特别明显的缺点,就推演出了改进版本——poll函数 比如select监视的fd是有上限的,我的云服务器内核版本下最大上限是1024个fd…...
论文解读 | AAAI'25 Cobra:多模态扩展的大型语言模型,以实现高效推理
点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 点击 阅读原文 观看作者讲解回放! 个人信息 作者:赵晗,浙江大学-西湖大学联合培养博士生 内容简介 近年来,在各个领域应用多模态大语言模型(MLLMs&…...
区块链共识机制详解
区块链共识机制详解 🤝 1. 什么是共识机制? 共识机制是区块链网络中,所有节点就某个状态(如交易的有效性)达成一致的规则和过程。它解决了在去中心化网络中如何确保数据一致性的问题。 2. 主流共识机制 2.1 工作量证…...
Unity游戏制作中的C#基础(1)界面操作基础
1.脚本有关注意事项 (1).进入项目之后,一般创建一个文件夹Scripts用来存放c#脚本; (2).在Scripts中创建脚本,双击脚本,进入VS编辑器,有如下结构: start&#…...
python学习笔记,python处理 Excel、Word、PPT 以及邮件自动化办公
文章目录 前言一、环境搭建1. 下载 Python2. 安装 Python 二、处理 Excel 文件(openpyxl库)三、 处理 Word 文件(python-docx库)四、 处理 PPT 文件(python-pptx库)五、 自动发送邮件(smtplib和…...
欢乐力扣:同构字符串
文章目录 1、题目描述2、 代码 1、题目描述 同构字符串。给定两个字符串 s 和 t ,判断它们是否是同构的。如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符,同时不改变字符…...
近10年气象分析(深度学习)
这是一个气象数据分析程序,主要用于分析和可视化气象数据。以下是该文件的主要功能: 1. 数据加载 在线数据:尝试从 GitHub 加载气象数据。 示例数据:如果无法加载在线数据,程序会自动生成示例数据。 2. 数据分析 …...
win11系统无法打开软件_组策略无法打开_gpedit.msc不生效_为了对电脑进行保护,已经阻止此应用---Windows工作笔记057
碰到这个问题挺麻烦的,要用的软件打不开了. 其实解决方法就是去组策略中修改一个策略就可以了,但是: 先来说: 而且,使用cmd输入的gpedit.msc也打不开了. 这个怎么解决? @echo off pushd "%~dp0"dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPo…...
【JAVA】封装多线程实现
系列文章目录 java知识点 文章目录 系列文章目录👉前言👉一、封装的目标👉二、常见的封装方式及原理👉壁纸分享👉总结 👉前言 在 Java 中,封装多线程的原理主要围绕着将多线程相关的操作和逻辑…...
长短期记忆网络:从理论到创新应用的深度剖析
一、引言 1.1 研究背景 深度学习在人工智能领域的发展可谓突飞猛进,而长短期记忆网络(LSTM)在其中占据着至关重要的地位。随着数据量的不断增长和对时序数据处理需求的增加,传统的神经网络在处理长序列数据时面临着梯度消失和梯…...
过程监督(Process Supervision)融入到 GRPO (Group Relative Policy Optimization)
下面演示如何把“过程监督(Process Supervision)”的思想融入到 GRPO (Group Relative Policy Optimization) 中,从而对每个输出的中间步骤逐一打分、计算相对优势。本文的示例代码与 grpo_train.py (来源见下文)类似&…...
ES6中Object.defineProperty 的详细用法和使用场景以及例子
ES6 Object.defineProperty() 用法总结 Object.defineProperty() 是 ES5 引入的一个方法,ES6 继续强化了该方法的使用,它允许我们为对象的属性定义或修改 属性描述符。它能够控制对象属性的行为,如读写权限、可枚举性和可配置性。 1. Objec…...
【服务器与本地互传文件】远端服务器的Linux系统 和 本地Windows系统 互传文件
rz 命令:本地上传到远端 rz 命令:用于从本地主机上传文件到远程服务器 rz 是一个用于在 Linux 系统中通过 串口 或 SSH 上传文件的命令,它实际上是 lrzsz 工具包中的一个命令。rz 命令可以调用一个图形化的上传窗口,方便用户从本…...
NVIDIA A100 SXM4与NVIDIA A100 PCIe版本区别深度对比:架构、性能与场景解析
NVIDIA A100 SXM4与PCIe版本深度对比:架构、性能与场景解析 作为NVIDIA Ampere架构的旗舰级数据中心GPU,A100系列凭借强大的计算能力和显存带宽,已成为人工智能训练、高性能计算(HPC)等领域的核心硬件。然而ÿ…...
RAG基本原理
1.RAG全称是Retrieval-Augmented Generation Generation 的含义是 基于用户的输入,生成具有上下文含义的一段文字。 Query 比如说 太阳系中,哪个行星拥有的卫星数目最多? 回答Answer 木星,木星目前有79个卫星 这样的回答存在两个…...
WPS接入deepseek-OfficeAI助手插件下载
功能简介 OfficeAI 助手 是一款免费的智能AI办公工具软件,专为 Microsoft Office 和 WPS 用户打造。 无论你是在寻找如何输入“打勾(√)符号”的方法,还是想知道“怎么在插入表格前添加文字”,或者“该用哪个公式”&a…...
【微中子代理踩坑-前端node-sass安装失败】
微中子代理踩坑-前端node-sass安装失败-windows 1.npm版本2.python2.73.安装Visual Studio 1.npm版本 当前使用node版本13.12.0 2.python2.7 安装python2.7.9并配置环境变量 3.安装Visual Studio 安装Visual Studio 我是直接勾选了3个windows的sdk,然后就好了 最后 npm in…...
在群晖上使用Docker安装思源笔记
最近一段时间,docker的镜像地址都失效了,在群晖系统中,无论是早期版本的docker,还是最新版本中的Container Manager,注册表中都无法链接到docker的镜像,于是,就花了点时间查找资料&#x…...
后端之路——阿里云OSS云存储
一、何为阿里云OSS 全名叫“阿里云对象存储OSS”,就是云存储,前端发文件到服务器,服务器不用再存到本地磁盘,可以直接传给“阿里云OSS”,存在网上。 二、怎么用 大体逻辑: 细分的话就是: 1、准…...
华为guass在dbever和springboot配置操作
下面记录华为guass在dbever和springboot配置操作,以备忘。 1、安装dbeaver-ce-23.2.0-x86_64-setup.exe和驱动程序 Download | DBeaver Community 2、配置高斯数据库驱动 3、新建数据库连接 4、操作指引 opengauss官方文档 https://docs-opengauss.osinfra.cn/zh…...
【STM32学习】标准库实现STM32 ADC采集1路、2路、多路
目录 ADC采集 ADC配置步骤 STM32F103C8T6的ADC 输入通道 编辑 1路ADC(A4 ADC 通道4) 1路ADC源码代码链接: 2路ADC(A4 ADC 通道4、A5 ADC 通道5)基于DMA实现 多路ADC实现采集 ADC采集 ADC配置步骤 使能GPIO…...