尧图网络科技 Logo 尧图网络科技
  • 首页
  • 关于我们
  • 建站服务
  • UI 设计
  • 案例展示
  • SEO 优化
  • 资讯中心
  • 联系我们

资讯详情

深度解读 · 专业分析

  • 首页
  • 资讯中心
  • /
  • 数据采集_4

最新资讯

  • 全部资讯
  • 行业动态
  • UI 设计
  • SEO 优化
  • 网站开发

数据采集_4

📅 发布时间:2026/6/20 9:56:55 👁 浏览次数:
数据采集_4

数据采集_4

目录
  • 第一题:爬取股票信息
    • 关键步骤一:构造请求 URL:按板块分页抓取
    • 关键步骤二:解析 JSONP 数据
    • 关键步骤三:从diff里取出核心指标
    • 爬取结果:
    • 心得体会:
  • 第二题:爬取mooc课程
    • 整体思路简述
    • 关键步骤一:自动登录(iframe 中的账号密码登录)
    • 关键步骤二:解析课程信息
    • 爬取结果:
    • 心得体会:
  • 第三题:
    • 开通MapReduce服务
    • Python脚本生成测试数据
    • 配置Kafka
    • 安装Flume客户端
    • 配置Flume采集数据
    • 心得体会:

第一题:爬取股票信息

关键步骤一:构造请求 URL:按板块分页抓取

东方财富用 fs 参数区分不同板块,用 pn 控制页码,用 pz 控制每页数量。代码中把板块配置成字典,然后循环分页抓取
blocks = {
"沪深A股": "m:0+t:6,m:0+t:80,m:1+t:2",
"上证A股": "m:1+t:2",
"深证A股": "m:0+t:6"
}

for plate_name, fs in blocks.items():page = 1max_pages = 3all_items = []while page <= max_pages:url = ("https://7.push2.eastmoney.com/api/qt/clist/get?"f"pn={page}&pz=50&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281"f"&fltt=2&invt=2&fid=f3&fs={fs}""&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,""f15,f16,f17,f18,f20,f21,f23,f24,f25,f22")driver.get(url)time.sleep(0.5)text = driver.find_element("tag name", "body").text...page += 1

关键步骤二:解析 JSONP 数据

接口返回的是 JSONP 格式,需要用正则先把外层函数名去掉,再用 json.loads 解析,股票列表在data["data"]["diff"]
import re
import json

text = driver.find_element("tag name", "body").text# 去掉前缀函数名和末尾括号
data_str = re.sub(r'^.*?\(', '', text)
data_str = re.sub(r'\);?$', '', data_str)data = json.loads(data_str)if not data.get("data") or not data["data"].get("diff"):print(f"第 {page} 页无数据,提前结束")breakitems = data["data"]["diff"]

关键步骤三:从diff里取出核心指标

东方财富接口里用 f2、f3、f4… 这些字段表示行情数据,需要自己对照并映射成有意义的字段名
for item in items:
stock = {
"代码": item.get("f12", ""),
"名称": item.get("f14", ""),
"最新价": item.get("f2", 0),
"涨跌幅": item.get("f3", 0),
"涨跌额": item.get("f4", 0),
"成交量": item.get("f5", 0),
"成交额": item.get("f6", 0),
"振幅": item.get("f7", 0),
"最高": item.get("f15", 0),
"最低": item.get("f16", 0),
"今开": item.get("f17", 0),
"昨收": item.get("f18", 0),
}
all_items.append(stock)

爬取结果:

d9b419e176eead5d3f644258f2bf13a0

image

image

image

心得体会:

主要的难点在于理解接口参数含义以及处理JSONP格式的返回结果。刚开始直接对返回内容 json.loads会报错,后来通过正则去掉函数包装后才顺利解析;另外,不同板块依靠fs参数区分,字段编号(如f2、f3等)也需要对照文档或实际返回反复确认

第二题:爬取mooc课程

整体思路简述

  1. 启动 ChromeDriver,打开中国大学 MOOC 首页
  2. 模拟用户点击“登录/注册”,切到登录 iframe,输入手机号和密码完成登录
  3. 登录成功后,直接访问搜索结果页 URL:
    https://www.icourse163.org/search.htm?search=关键词
  4. 在搜索结果页中,逐个解析课程卡片,提取需要的 7 个字段
  5. 支持翻页爬取,并设置最大页数限制
  6. 最后用 pymysql 批量写入 MySQL

关键步骤一:自动登录(iframe 中的账号密码登录)

登录弹窗在一个 iframe 中,不能直接在主页面上找输入框,需要先切换 frame,再输入账号密码
68eac1bb-2e6d-49eb-9fb0-b3051f5b9e4c

import time
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECPHONE = "你的手机号"
PASSWORD = "你的登录密码"def close_privacy_popup(driver):try:btn = driver.find_element(By.XPATH, "//span[contains(text(),'同意')]/..")btn.click()time.sleep(1)except Exception:passdef auto_login(driver):driver.get("https://www.icourse163.org")login_btn = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//div[@role="button" and contains(text(), "登录/注册")]')))login_btn.click()WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, "iframe[id^='x-URS-iframe']")))phone_input = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "phoneipt")))pwd_input = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.j-inputtext.dlemail[type='password']")))phone_input.clear()phone_input.send_keys(PHONE)pwd_input.clear()pwd_input.send_keys(PASSWORD)pwd_input.send_keys(Keys.RETURN)time.sleep(5)driver.switch_to.default_content()close_privacy_popup(driver)

关键步骤二:解析课程信息

image

def parse_card(card):def t(by, sel):try:return card.find_element(by, sel).text.strip()except Exception:return ""def ts(by, sel):try:return [e.text.strip() for e in card.find_elements(by, sel)if e.text.strip()]except Exception:return []cCourse = t(By.CSS_SELECTOR, "div.m7l9I div._1vfZ-")cCollege = t(By.CSS_SELECTOR, "div.m7l9I div._1gMZA a._3vJDG")teachers = ts(By.CSS_SELECTOR, "div.m7l9I div._1gMZA div._1ONN1 a._3t_C8")cTeacher = teachers[0] if teachers else ""cTeam = "、".join(teachers) if teachers else ""cBrief = t(By.CSS_SELECTOR, "div.m7l9I div._3JEMz")cProcess = t(By.CSS_SELECTOR, "div.m7l9I div._2qY7l div.NOdDs")count_txt = t(By.CSS_SELECTOR, "div.m7l9I div._2qY7l div._CWjg")m = re.search(r"(\d+)", count_txt.replace(",", ""))cCount = int(m.group(1)) if m else 0return (cCourse, cCollege, cTeacher, cTeam, cCount, cProcess, cBrief)

爬取结果:

b3c3b106-94e0-4902-a559-da340c2d157c

afac9ea5555f93d4261c50654ce5d1b7

心得体会:

过程中遇到了不少问题,例如登录表单位于 iframe 中、课程卡片的 DOM 结构较复杂、以及翻页与重复数据处理等。通过不断调试元素定位、分析页面结构并结合日志输出排查错误,逐步完成了自动登录、搜索结果爬取以及数据入库的完整流程。整体实践加深了我对 Selenium 自动化操作和 MySQL 数据存储的理解。

第三题:

开通MapReduce服务

image

Python脚本生成测试数据

image

配置Kafka

image

安装Flume客户端

image

image

配置Flume采集数据

image
image

心得体会:

从开通 MapReduce 服务,到使用 Xshell 远程登录生成 Python 测试数据,再到配置 Kafka、安装和配置 Flume 完成日志采集,让我初步理解了“数据产生 → 消息队列传输 → Flume 采集 → 后端大数据平台处理”的完整流程。相比只停留在理论,这次动手实践帮助我把几个常见大数据组件的作用串联起来,为后续进一步学习实时计算和日志分析打下了基础

Gitee仓库路径:
https://gitee.com/wudilecl/2025_crawl

相关新闻

国产大容量/实验室/台式离心机选购全攻略!高性价比品牌+可定制服务+优质售后 - 品牌推荐大师1

国产大容量/实验室/台式离心机选购全攻略!高性价比品牌+可定制服务+优质售后 - 品牌推荐大师1

2026/6/20 12:04:01 查看详情
C# Avalonia 19- DataBinding- 例子公用类

C# Avalonia 19- DataBinding- 例子公用类

2026/6/20 23:51:23 查看详情
老旧水厂改造一体化净水设备推荐资质认证与工艺适配

老旧水厂改造一体化净水设备推荐资质认证与工艺适配

2026/6/18 21:41:55 查看详情
Java 冒泡排序:最简单的排序,没有之一

Java 冒泡排序:最简单的排序,没有之一

2026/6/20 23:50:56 查看详情
iOS PDF阅读器终极指南:快速集成开源核心库的完整方案

iOS PDF阅读器终极指南:快速集成开源核心库的完整方案

2026/6/20 23:50:40 查看详情
20万级中大型SUV车型哪个可靠?实测多款甄选值得选车型 - 外贸老黄

20万级中大型SUV车型哪个可靠?实测多款甄选值得选车型 - 外贸老黄

2026/6/20 23:48:59 查看详情
20万级中大型SUV车型哪个专业?理性筛选,哪些车型值得入手南 - 外贸老黄

20万级中大型SUV车型哪个专业?理性筛选,哪些车型值得入手南 - 外贸老黄

2026/6/20 23:48:59 查看详情
CANN/ge SetShape API文档

CANN/ge SetShape API文档

2026/6/20 23:48:59 查看详情
MySQL和MariaDB的向量搜索:Neighbor二进制向量实战教程

MySQL和MariaDB的向量搜索:Neighbor二进制向量实战教程

2026/6/20 23:48:30 查看详情
团队博客 5:Sprint 3——收官与优化

团队博客 5:Sprint 3——收官与优化

2026/6/20 0:00:19 查看详情
3分钟掌握微信语音转换:Silk v3解码器完整使用指南

3分钟掌握微信语音转换:Silk v3解码器完整使用指南

2026/6/20 0:01:25 查看详情
VAC进程监控模块完全解析:3种扫描类型与虚拟方法表技术揭秘

VAC进程监控模块完全解析:3种扫描类型与虚拟方法表技术揭秘

2026/6/20 0:01:25 查看详情
从Landsat到高分系列:手把手教你选择适合自己项目的遥感卫星数据

从Landsat到高分系列:手把手教你选择适合自己项目的遥感卫星数据

2026/6/20 3:05:19 查看详情
福州空调维修上门加氟移机空调不制冷、推荐本地老牌鑫盛达、冷顺安 - 我叫一

福州空调维修上门加氟移机空调不制冷、推荐本地老牌鑫盛达、冷顺安 - 我叫一

2026/6/20 4:00:16 查看详情
嵌入式调试器组件化界面与拖拽交互技术详解

嵌入式调试器组件化界面与拖拽交互技术详解

2026/6/20 2:29:50 查看详情
YOLOv11涨点改进| CVPR 2026 | 独家创新首发、特征融合改进篇| 引入CMGF 引导特征融合机制,实现对不同模态特征的自适应增强与高效融合,助力多模态目标检测,小目标检测或分割有效涨点

YOLOv11涨点改进| CVPR 2026 | 独家创新首发、特征融合改进篇| 引入CMGF 引导特征融合机制,实现对不同模态特征的自适应增强与高效融合,助力多模态目标检测,小目标检测或分割有效涨点

2026/6/19 22:53:17 查看详情
E-E-A-T 成第一权重:2027 年无经验内容将被彻底淘汰

E-E-A-T 成第一权重:2027 年无经验内容将被彻底淘汰

2026/6/20 4:40:29 查看详情
深圳福田园岭老小区搬家公司推荐 经验足师傅高效搬运攻略 - 从来都是英雄出少年

深圳福田园岭老小区搬家公司推荐 经验足师傅高效搬运攻略 - 从来都是英雄出少年

2026/6/20 22:03:27 查看详情

关于尧图

立足北京本地的一站式网站建设服务与设计教学平台,深耕企业网站定制开发、全网 SEO 优化及网络推广服务。

快速链接

  • 关于我们
  • 建站服务
  • 案例展示
  • 资讯中心

服务项目

  • 企业官网定制
  • UI 界面设计
  • SEO 优化推广
  • 移动端适配

联系方式

电话:400-XXX-XXXX

邮箱:info@zskr.cn

地址:北京市朝阳区 XXX 路 XX 号

© 2026 尧图网络科技 版权所有 | 京 ICP 备 XXXXXXXX 号