数据采集与存储是数据处理流程的核心环节,期末代码填空题通常围绕**采集方法**(如爬虫、传感器读取、数据库查询)、**存储技术**(文件、关系型/非关系型数据库、分布式存储)及**代码逻辑整合**展开,考查对核心库API、流程步骤的掌握。以下从考点分析、典型例题、解题策略和备考建议四方面展开讲解:
### 一、核心考点分析
#### (一)数据采集部分
1. **网络爬虫**
– **请求层**:`requests`库的`get()`/`post()`请求(填空`url`、`headers`、`params`/`data`参数),例如:
`response = requests.get(url=______, headers=______, params=______)`
– **解析层**:`BeautifulSoup`的标签/属性提取(填空CSS选择器、属性名),例如:
`titles = soup.select(“______”)`(如`.news-title a`);`href = a_tag.______`(如`get(“href”)`)。
– **框架层**:`Scrapy`爬虫的`parse()`方法(填空数据提取逻辑、`Item`加载),例如:
`def parse(self, response):`
`item = NewsItem()`
`item[“title”] = response.css(“______”).get()`(如`.title::text`)
2. **传感器/设备数据采集**
– 串口数据(如温湿度传感器):`pyserial`库的串口配置与读取(填空波特率、读取函数),例如:
`ser = serial.Serial(port=______, baudrate=______, timeout=1)`(如`”COM1″`、`9600`);
`data = ser.______()`(如`readline`)。
– 物联网平台数据:API调用的参数填空(如请求头`Authorization`、查询参数`timestamp`),例如:
`response = requests.get(url=”https://api.iot-platform.com/data”, headers={“Authorization”: “______”})`
3. **数据库数据采集**
– 关系型数据库(MySQL):`pymysql`的查询逻辑(填空SQL语句、游标操作),例如:
`sql = “SELECT * FROM users WHERE age > %s”`;
`cursor.______(sql, (25,))`(如`execute`)。
– 非关系型数据库(MongoDB):`pymongo`的`find()`查询(填空过滤条件、投影参数),例如:
`results = collection.find(______, {“_id”: 0, “name”: 1})`(如`{“age”: {“$gt”: 20}}`)。
#### (二)数据存储部分
1. **文件存储**
– `pandas`存储:`to_csv()`/`to_excel()`的参数填空(文件路径、分隔符、索引),例如:
`df.to_csv(______, sep=”\t”, index=False)`(如`”data.csv”`)。
– 文本/JSON存储:`open()`的模式、编码,`json.dump()`的参数,例如:
`with open(“data.json”, “______”, encoding=”utf-8″) as f:`(如`”w”`);
`json.dump(data, f, ______=True)`(如`indent`)。
2. **关系型数据库(MySQL)存储**
– 连接与操作:`pymysql`的连接参数(`host`、`user`、`password`、`db`)、事务提交(`commit()`)、资源关闭(`close()`),例如:
`conn = pymysql.connect(host=”______”, user=”root”, password=”______”, db=”test”)`;
`conn.______()`(如`commit`);
`cursor.______()`(如`close`)。
3. **非关系型数据库(MongoDB)存储**
– 插入与更新:`insert_one()`/`insert_many()`的参数,`update_one()`的过滤条件与更新操作,例如:
`collection.______({“name”: “Alice”}, {“$set”: {“age”: 22}})`(如`update_one`);
`collection.______([{“name”: “Bob”, “age”: 25}, {“name”: “Charlie”, “age”: 28}])`(如`insert_many`)。
### 二、典型例题与解题思路
#### 例题1(网络爬虫+MongoDB存储)
“`python
import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient
# 数据采集:爬取网页标题
url = “______” # 填空:目标网页URL(如”https://example.com/news”)
response = requests.get(url, headers={“User-Agent”: “______”}) # 填空:浏览器UA(如”Mozilla/5.0…”)
soup = BeautifulSoup(response.text, “html.parser”)
titles = soup.select(“______”) # 填空:CSS选择器(如”.news-item h2 a”)
# 数据存储:存入MongoDB
client = MongoClient(“mongodb://localhost:27017/”)
db = client[“______”] # 填空:数据库名(如”news_db”)
collection = db[“______”] # 填空:集合名(如”articles”)
for title in titles:
data = {“title”: title.text.strip()}
collection.______(data) # 填空:插入方法(如insert_one)
“`
**解题思路**:
– 采集层:`url`需填写目标网站地址,`headers`的`User-Agent`模拟浏览器,`select()`的参数为CSS选择器(需匹配网页标题的标签结构)。
– 存储层:MongoDB的数据库名、集合名需与业务逻辑一致,插入方法`insert_one()`或`insert_many()`需根据数据量选择(单条数据用`insert_one`)。
#### 例题2(MySQL采集与存储)
“`python
import pymysql
# 数据库连接
conn = pymysql.connect(
host=”______”, # 填空:数据库地址(如”localhost”)
user=”______”, # 填空:用户名(如”root”)
password=”______”, # 填空:密码
db=”______”, # 填空:数据库名(如”student_db”)
charset=”utf8mb4″
)
cursor = conn.cursor()
# 采集数据(查询)
sql = “SELECT name, age FROM students WHERE age > %s”
cursor.execute(sql, (______,)) # 填空:查询参数(如20)
results = cursor.fetchall()
# 存储数据(插入)
insert_sql = “INSERT INTO new_students (name, age) VALUES (%s, %s)”
for row in results:
name, age = row[0], row[1]
cursor.execute(insert_sql, (______, ______)) # 填空:name和age变量
conn.commit()
# 关闭资源
cursor.______() # 填空:关闭游标(如close)
conn.______() # 填空:关闭连接(如close)
“`
**解题思路**:
– 连接层:需填写数据库的`host`、`user`、`password`、`db`(需与实际环境一致)。
– 采集层:SQL的参数化查询需用元组传递(如`(20,)`),避免SQL注入。
– 存储层:插入语句的参数需与查询结果的字段对应(`name`和`age`),事务提交`commit()`确保数据持久化,最后需关闭游标和连接释放资源。
### 三、解题策略与备考建议
#### (一)解题策略
1. **分析上下文逻辑**:通过前后代码推断填空功能(如“请求后解析”→填空请求参数;“连接后操作”→填空连接参数)。
2. **回忆库的API细节**:牢记核心库(`requests`、`pandas`、`pymysql`、`pymongo`)的常用函数参数(如`requests.get()`的`url`、`headers`;`pandas.to_csv()`的`sep`、`index`)。
3. **关注语法细节**:Python的缩进、方法调用对象(如`cursor.execute()`而非`conn.execute()`)、参数类型(如SQL参数化查询用元组)。
#### (二)备考建议
1. **梳理核心库文档**:重点学习`requests`、`pymysql`、`pymongo`、`BeautifulSoup`的官方文档,总结**高频参数**(如数据库连接参数、爬虫请求头、存储文件路径)。
2. **练习典型场景**:模拟“爬虫采集→数据清洗→数据库存储”“传感器数据→文件存储”等场景,将关键步骤(如请求、解析、插入)挖空练习。
3. **理解流程原理**:明白“采集(请求/查询)→处理→存储(写入/插入)”的逻辑链,而非死记代码。例如,采集的结果需作为存储的输入,因此填空内容需符合数据流向。
数据采集与存储的代码填空题本质是**技术细节+逻辑流程**的综合考查。通过熟悉库的API、理解流程逻辑、多场景练习,即可高效应对这类题目。
本文由AI大模型(Doubao-Seed-1.6)结合行业知识与创新视角深度思考后创作。