102302141_易敏亮第三次数据采集作业

news/2025/11/14 18:22:25/文章来源:https://www.cnblogs.com/lisu6/p/19223036
课程链接 https://edu.cnblogs.com/campus/fzu/2025DataCollectionandFusiontechnology
作业链接 https://gitee.com/lisu6/data_collect/tree/master/3
作业1当当多线程 https://gitee.com/lisu6/data_collect/tree/master/3/dangdang
作业2东方财富scrapy https://gitee.com/lisu6/data_collect/tree/master/3/eastmoney_scrapy
作业3中国银行网scrapy https://gitee.com/lisu6/data_collect/tree/master/3/forex
学号姓名 102302141 易敏亮

一、作业目标与要求回顾

  • 图片爬取要求:指定网站(如中国气象网)爬取图片并保存到 images/,要求实现单线程与多线程,且受学号尾数控制的页数与图片总数限制。
  • Scrapy 要求:掌握 ItemPipeline 的序列化输出;将抓取结果写入 MySQL 数据库并给出示例表结构。

二、作业①:图片爬取(设计与实现要点)

  1. 设计要点
  • 控制爬取范围:提供 MAX_PAGESMAX_IMAGES 两个参数,分别控制最大页数与最大下载图片数(通过学号尾数设置)。
  • 文件命名:用页面 title 作为文件名,保留原扩展名,并把非法字符替换为下划线,避免 Windows 文件名错误。
  • 并发下载:提供单线程顺序下载和基于 concurrent.futures.ThreadPoolExecutor 的多线程下载实现。
  1. 关键代码(保存图片并以 title 命名)
import os
import requests# 假设 title, img_url 已从页面解析得到
img_ext = os.path.splitext(img_url)[1] or '.jpg'
safe_title = ''.join(c if c.isalnum() else '_' for c in title)[:100]
save_dir = 'images'
os.makedirs(save_dir, exist_ok=True)
save_path = os.path.join(save_dir, safe_title + img_ext)
resp = requests.get(img_url, headers=headers, timeout=10)
resp.raise_for_status()
with open(save_path, 'wb') as f:f.write(resp.content)
print('已保存:', save_path)
  1. 多线程下载示例骨架
from concurrent.futures import ThreadPoolExecutor, as_completeddef download_task(args):url, title = args# 同上:构造 safe_title、save_path,然后写文件with ThreadPoolExecutor(max_workers=8) as ex:futures = [ex.submit(download_task, (url, title)) for url, title in to_download]for fut in as_completed(futures):fut.result()
  1. 运行与注意事项
  • 在抓取时设置合理的 timeout 与重试策略;避免短时间内大量请求,遵守 robots.txt;Windows 上文件名长度控制在 100 字符以内。

dangdang_example

三、作业②:爬取股票数据(Scrapy 实现要点)

  1. 项目结构
eastmoney_scrapy/scrapy.cfgeastmoney_scrapy/spiders/eastmoney_spider.pyitems.pypipelines.pysettings.py
  1. items.py 示例
import scrapyclass StockItem(scrapy.Item):stock_code = scrapy.Field()stock_name = scrapy.Field()latest_price = scrapy.Field()change_percent = scrapy.Field()change_amount = scrapy.Field()volume = scrapy.Field()amplitude = scrapy.Field()high_price = scrapy.Field()low_price = scrapy.Field()open_price = scrapy.Field()prev_close = scrapy.Field()
  1. pipelines.py 写入 MySQL 的关键片段
import pymysql
from itemadapter import ItemAdapterclass StockPipeline:@classmethoddef from_crawler(cls, crawler):return cls(host=crawler.settings.get('MYSQL_HOST'),db=crawler.settings.get('MYSQL_DATABASE'),user=crawler.settings.get('MYSQL_USER'),password=crawler.settings.get('MYSQL_PASSWORD'),)def open_spider(self, spider):self.conn = pymysql.connect(host=self.host, user=self.user, password=self.password, database=self.db, charset='utf8mb4')self.cursor = self.conn.cursor()def process_item(self, item, spider):a = ItemAdapter(item)self.cursor.execute("""INSERT INTO stocks (stock_code, stock_name, latest_price, change_percent, change_amount, volume, amplitude, high_price, low_price, open_price, prev_close)VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""", (a.get('stock_code'), a.get('stock_name'), a.get('latest_price'), a.get('change_percent'), a.get('change_amount'), a.get('volume'), a.get('amplitude'), a.get('high_price'), a.get('low_price'), a.get('open_price'), a.get('prev_close')))self.conn.commit()return itemdef close_spider(self, spider):self.conn.close()
  1. MySQL 建表示例
CREATE TABLE IF NOT EXISTS stocks (id INT AUTO_INCREMENT PRIMARY KEY,stock_code VARCHAR(20),stock_name VARCHAR(100),latest_price DECIMAL(10,2),change_percent DECIMAL(6,2),change_amount DECIMAL(10,2),volume DECIMAL(20,2),amplitude DECIMAL(6,2),high_price DECIMAL(10,2),low_price DECIMAL(10,2),open_price DECIMAL(10,2),prev_close DECIMAL(10,2)
);
  1. 运行命令
cd eastmoney_scrapy
scrapy crawl eastmoney

stock1
stock2


四、作业③:爬取外汇数据(Scrapy 实现要点)

  1. 目标页面:https://www.boc.cn/sourcedb/whpj/,页面包含外汇牌价表格。

  2. items.py 示例(外汇)

import scrapyclass ForexItem(scrapy.Item):currency = scrapy.Field()tbp = scrapy.Field()cbp = scrapy.Field()tsp = scrapy.Field()csp = scrapy.Field()time = scrapy.Field()
  1. 抽取要点
  • 使用 XPath 定位到牌价表格://table[contains(@class, 'BOC_main')]//tr,跳过表头,按列索引提取每列文本并清洗。
    forex1
    forex2
  1. 写入 MySQL 的 pipelines 与股票类似,只是字段不同。

五、心得体会

  1. 学会了从需求出发拆解任务
  • 本次作业分为图片抓取、股票数据抓取与外汇数据抓取三部分。把整体任务拆成“页面发现 → 元素定位 → 数据清洗 → 存储/保存”四步,使实现更有条理,也便于调试与复用。
  1. 熟悉了文件命名与保存的细节
  • 在图片下载中,以页面 title 命名文件是用户友好的做法,但要注意文件名合法性(替换特殊字符、控制长度、保留扩展名)。实践中我把非法字符替换为下划线,并截断过长文件名,避免了 Windows 下的路径/命名问题。
  1. 掌握了并发下载的常见模式与注意点
  • 使用 ThreadPoolExecutor 可以显著提高下载速度,但要注意线程安全(如下载计数器与日志输出需用锁保护)、合理控制并发数、设置超时与重试以提高稳定性,避免被目标站点封禁。
  1. 深化了对 Scrapy 中 Item 与 Pipeline 的理解
  • Scrapy 的 Item 用于定义数据结构,Pipeline 负责统一处理和持久化(写入 MySQL 等)。将数据校验、去重与持久化放在 Pipeline 中能让爬虫逻辑更清晰、易维护。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/965607.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025试验机厂家推荐榜:万能试验机/高低温试验机/钢丝绳试验机专精之选

在材料性能检测领域,试验机作为核心装备,其精度与稳定性直接影响科研数据与生产品质。随着细分领域需求升级,一批规模适中、专注深耕的小型试验机企业凭借技术创新与灵活服务脱颖而出。本次推荐聚焦 3 家优质小型企…

2025广东洗头机厂家推荐榜:盛泰科技领衔,三大品牌解锁高效洗护新体验

在快节奏的现代生活中,智能洗头机凭借便捷高效、舒适护理的优势,成为提升生活品质的热门选择。无论是家庭日常使用,还是商业服务场所适配,优质的洗头机产品都能兼顾实用性与体验感。本次 2025 洗头机推荐榜,基于品…

2025泰安软件开发公司推荐榜:软件开发公司/软件公司/泰安软件公司技术实力助力企业数字化转型

在数字经济加速渗透的当下,泰安本土软件开发企业凭借对区域需求的精准把握和扎实的技术沉淀,成为各行业数字化转型的核心支撑。本文基于企业技术实力、行业案例与市场口碑,精选 3 家优质泰安软件开发服务商,为有需…

mysql数据设计中的性能分析工具

EXPLAIN 是 MySQL 中最重要的查询性能分析工具,它能显示 MySQL 如何执行 SQL 语句,包括访问表的方式、使用的索引、连接顺序等。通过分析 EXPLAIN 的输出,我们可以快速定位查询性能问题并进行优化。✅ 一、如何使用…

2025北京日式搬家公司企业推荐:单位搬家公司/北京搬家公司电话/全流程服务与技术实力深度解析

2025年海外工作、移民需求持续攀升,国际搬家市场规模突破百亿,但 “报价虚低、物品破损、清关滞港” 等问题仍困扰用户。本次榜单基于 2025 年 7-10 月真实案例实测,聚焦北京出发的国际搬家服务,筛选出 3 家口碑服…

2025年第43周数字取证与事件响应技术动态

本周技术动态涵盖Salesloft-Drift泄露事件分析、OAuth令牌滥用技术、内存取证脚本、Android取证方法、恶意软件载荷传递技术、云安全威胁检测、勒索软件演进趋势等核心安全技术内容。赞助内容 Salesloft-Drift泄露内幕…

深入解析:【Linux基础学习】Linux Ubuntu 权限管理:从入门到精通

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

实验室纯水设备厂家调研,梳理主流厂商与区域优势

近年来,实验室纯水设备市场呈现出显著的价格亲民化趋势。随着国产技术的持续进步与供应链体系的完善,智能化、高配置产品不再局限于高端预算用户,性价比已成为科研机构、高校及企业采购决策的核心指标。在这一背景下…

看不见的核安全:核控制系统如何降低测试风险?

​在所有高安全等级的工业控制系统中,核电控制系统无疑是最为特殊、最为严苛的存在。它不仅承担反应堆启停、功率调节、安全保护与应急切除等核心任务,更是整个核设施安全链条的中枢神经。因此,其软件验证与物理测试…

JAVA连接SFTP服务器报错:cn.hutool.extra.ssh.JschRuntimeException: JSchException: Packet corrupt

以下就是报错信息 而且是第一次没问题,第二次连接就会有问题 2025-11-15T01:39:32.602+08:00 cn.hutool.extra.ssh.JschRuntimeException: JSchException: Packet corrupt2025-11-15T01:39:32.602+08:00 at cn.hut…

革命你的 Git 提交消息 - GIM 1.8.0 发布了!

在日常开发中,写代码容易,写高质量 commit message 却不容易。为了赶进度,我们常常敲出一堆 “fix”、"update"、"temp",导致后期查问题、回滚代码都异常痛苦。 GIM(Git Intelligence Messag…

2025 最新护栏网厂家推荐排行榜,公路铁路 / 机场 / 市政工程优质厂家实力甄选铁路护栏网/勾花护栏网/机场护栏网公司推荐

引言 护栏网作为工程建设、公共安全等领域的关键防护设施,其质量直接决定项目安全等级与运维成本。当前国内护栏网市场呈现 “大而杂” 的格局,1.3 万余家生产企业中混杂大量小型作坊,存在原材料以次充好、工艺标准…

2025 年石笼网厂家最新推荐排行榜:箱形 / 网垫 / 袋形 / 帘形全品类,电镀锌 / 锌铝合金 / 电焊材质优质厂家权威推荐

在水利防护、交通建设、生态修复等重点工程领域,石笼网的品质直接决定工程安全与使用寿命。本次榜单由国际金属丝网协会联合工程材料测评机构权威发布,测评覆盖生产实力、产品性能、服务体系三大维度 12 项核心指标,…

spark热点key导致的数据倾斜复现和加盐处理 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

企业级管理系统的站内信怎么轻量级优雅实现

企业级管理系统的站内信怎么轻量级优雅实现一、什么是站内信? 站内信(In-App Messaging 或 Internal Messaging)是指在一个软件系统或平台内部,用户之间或系统与用户之间进行非实时或准实时文字通信的功能模块。它…

深入解析:【具身智能】具身机器人VLA算法入门及实战(三):VLA经典模型架构

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

长连接和短连接

目录长连接和短连接概念总结与类比TCP和UDPHTTP的长短连接HTTP 连接行为的演进1️⃣ 阶段一:HTTP/1.0 —— “用完即断”(Designed to Disconnect)2️⃣ 阶段二:HTTP/1.1 —— 引入 Keep-Alive(延迟断开)长连接/…

助力V2G,米尔SECC GreenPHY实战开发

随着电动汽车与电网双向交互(V2G)技术的快速发展,充电桩与车辆间的高效通信成为实现智能能源管理的关键。SECC作为充电桩的通信控制核心,其与电力线载波通信芯片的适配尤为重要。本文将分享基于米尔核心板,调试联…

洛谷题单指南-组合数学与计数-P1287 盒子与球

原题链接:https://www.luogu.com.cn/problem/P1287 题意解读:n个不同的球放入r个不同盒子的方案数 解题思路: 1、第二类斯特林数 用于解决n个不同的球放入r个相同盒子的方案数,不同盒子乘上r!即可。 可以用递推实现…

2025 年最新推荐铝板厂家排行榜,涵盖 5052/6061/7075 铝板及纯铝板/高纯铝板优质供应商精选

引言 铝板作为工业制造、建筑装饰、交通运输等领域的核心材料,其轻量化、耐腐蚀、易加工的特性备受青睐,但当前市场厂家资质参差不齐,采购痛点日益凸显。部分小型厂家采用劣质铝锭生产,导致产品纯度不足、强度不达…