102302109-胡贝贝-作业4

news/2025/12/10 14:02:32/文章来源:https://www.cnblogs.com/hubeibei/p/19272682

作业①:
(1)实验内容及结果
熟练掌握 Selenium 查找HTML元素、爬取Ajax网页数据、等待HTML元素等内容。
使用Selenium框架+ MySQL数据库存储技术路线爬取“沪深A股”、“上证A股”、“深证A股”3个板块的股票数据信息。
核心代码:


class StockDataSpider(scrapy.Spider):name = 'stock_data'allowed_domains = ['quote.eastmoney.com']# 定义要爬取的市场及其API参数markets = {'沪深A股': {'api_fs': 'm:0+t:6,m:0+t:80,m:1+t:2,m:1+t:23','url_suffix': 'hs_a_board'},'上证A股': {'api_fs': 'm:1+t:2','url_suffix': 'sh_a_board'},'深证A股': {'api_fs': 'm:0+t:6','url_suffix': 'sz_a_board'}}def start_requests(self):self.logger.info(" 开始爬取东方财富网股票数据...")for market_name, market_info in self.markets.items():web_url = f"http://quote.eastmoney.com/center/gridlist.html#{market_info['url_suffix']}"# API URLapi_url = self.construct_api_url(market_info['api_fs'])yield scrapy.Request(url=api_url,callback=self.parse_api,meta={'market_name': market_name,'web_url': web_url},headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36','Referer': web_url,'Accept': 'application/json, text/plain, */*','Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8','Origin': 'http://quote.eastmoney.com'},dont_filter=True)def construct_api_url(self, fs_param):"""构造API URL"""base_url = "http://82.push2.eastmoney.com/api/qt/clist/get"params = {'pn': '1','pz': '5000','po': '1','np': '1','ut': 'bd1d9ddb04089700cf9c27f6f7426281','fltt': '2','invt': '2','fid': 'f3','fs': fs_param,'fields': 'f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152','_': str(int(datetime.now().timestamp() * 1000))}param_str = '&'.join([f"{k}={v}" for k, v in params.items()])return f"{base_url}?{param_str}"def parse_api(self, response):market_name = response.meta['market_name']self.logger.info(f" 开始解析 {market_name} 数据...")try:data = json.loads(response.text)stocks = data.get('data', {}).get('diff', [])self.logger.info(f" 从API获取到 {len(stocks)} 只{market_name}数据")current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')processed_count = 0for index, stock in enumerate(stocks):item = StockItem()item['id'] = index + 1item['stock_code'] = stock.get('f12', '')  # 股票代码item['stock_name'] = stock.get('f14', '')  # 股票名称item['latest_price'] = stock.get('f2', 0)  # 最新价item['change_percent'] = stock.get('f3', 0)  # 涨跌幅item['change_amount'] = stock.get('f4', 0)  # 涨跌额item['volume'] = self.format_volume(stock.get('f5', 0))  # 成交量item['turnover'] = self.format_turnover(stock.get('f6', 0))  # 成交额item['amplitude'] = stock.get('f7', 0)  # 振幅item['high_price'] = stock.get('f15', 0)  # 最高item['low_price'] = stock.get('f16', 0)  # 最低item['open_price'] = stock.get('f17', 0)  # 今开item['previous_close'] = stock.get('f18', 0)  # 昨收item['market_type'] = market_nameitem['crawl_time'] = current_timeif item['stock_code'] and item['stock_name']:processed_count += 1if processed_count <= 5:self.logger.info(f" 示例数据: {item['stock_name']}({item['stock_code']}) - 价格: {item['latest_price']}")yield itemself.logger.info(f" {market_name} 数据处理完成,共处理 {processed_count} 条有效数据")except Exception as e:self.logger.error(f" 解析{market_name}数据失败: {e}")self.logger.debug(f"响应内容: {response.text[:500]}")def format_volume(self, volume):"""格式化成交量"""try:volume = float(volume)if volume >= 100000000:return f"{volume / 100000000:.2f}亿"elif volume >= 10000:return f"{volume / 10000:.2f}万"else:return f"{volume:.0f}"except (ValueError, TypeError):return "0"def format_turnover(self, turnover):"""格式化成交额"""try:turnover = float(turnover)if turnover >= 100000000:return f"{turnover / 100000000:.2f}亿元"elif turnover >= 10000:return f"{turnover / 10000:.2f}万元"else:return f"{turnover:.2f}元"except (ValueError, TypeError):return "0"

输出信息:

image

image
image
image

image

Gitee文件夹链接:https://gitee.com/hu_beibei/data-collection-practice/tree/master/102302109_胡贝贝_作业4/作业一
(2)实验心得
通过完成沪深A股数据爬取项目,我深入掌握了Selenium在动态网页数据抓取中的应用技巧,特别是对Ajax加载内容的处理和元素等待机制。在数据存储环节,通过设计合理的MySQL表结构和字段映射关系,不仅实现了数据的有效存储,还加深了对数据库设计与Python交互的理解。

作业②:
(1)实验内容及结果
熟练掌握 Selenium 查找HTML元素、实现用户模拟登录、爬取Ajax网页数据、等待HTML元素等内容。
使用Selenium框架+MySQL爬取中国mooc网课程资源信息(课程号、课程名称、学校名称、主讲教师、团队成员、参加人数、课程进度、课程简介)
核心代码:

 def extract_course_info(self, url, expected_school, expected_name, expected_teacher):"""提取课程信息"""print(f"\n访问: {url}")try:self.driver.get(url)time.sleep(3)# 获取页面标题title = self.driver.title# 清理课程名称if expected_name:course_name = expected_nameelse:course_name = title.split('_')[0] if '_' in title else titlecourse_name = self.clean_text(course_name)# 获取学校名称school_name = expected_school# 获取教师名称teacher_name = expected_teacher# 提取参与人数participants = 0try:# 尝试多种方式查找参与人数body_text = self.driver.find_element(By.TAG_NAME, 'body').text# 多种人数匹配模式patterns = [r'(\d{1,3}(?:,\d{3})*)\s*人选课',r'(\d+)\s*人参加',r'已有\s*(\d+)\s*人',r'(\d+)\s*位同学',r'选课人数[::]\s*(\d+)',r'(\d+)\s*人学习']for pattern in patterns:match = re.search(pattern, body_text)if match:num_str = match.group(1).replace(',', '')try:participants = int(num_str)if participants > 0:breakexcept:continueexcept:participants = 0# 提取课程简介course_brief = "暂无简介"try:# 查找描述元素selectors = ['meta[name="description"]','.course-description','.m-course-desc','.course-summary']for selector in selectors:try:if selector == 'meta[name="description"]':element = self.driver.find_element(By.CSS_SELECTOR, selector)text = element.get_attribute('content')else:element = self.driver.find_element(By.CSS_SELECTOR, selector)text = element.textif text and len(text) > 30:course_brief = self.clean_text(text)[:300]breakexcept:continue# 如果还没找到,从页面提取if course_brief == "暂无简介":body_text = self.driver.find_element(By.TAG_NAME, 'body').text[:1000]# 找到相对较长的描述性段落lines = body_text.split('\n')for line in lines:line_clean = self.clean_text(line)if 50 < len(line_clean) < 200 and any(word in line_clean for word in ['课程', '学习', '教学', '简介']):course_brief = line_clean[:300]breakexcept:course_brief = "暂无简介"# 构建课程信息course_info = {'course_name': course_name,'college_name': school_name,'main_teacher': teacher_name,'participants': participants,'course_brief': course_brief,'course_url': url,'team_members': ''}print(f"课程名称: {course_name}")print(f"学校名称: {school_name}")print(f"主讲教师: {teacher_name}")print(f"参与人数: {participants}")print(f"课程简介: {course_brief[:50]}...")return course_infoexcept Exception as e:print(f"提取失败: {e}")import tracebacktraceback.print_exc()return None

输出信息:
image
image
image
image

Gitee文件夹链接:https://gitee.com/hu_beibei/data-collection-practice/tree/master/102302109_胡贝贝_作业4/作业二
(2)实验心得
中国MOOC网爬取项目让我全面体验了模拟登录和复杂页面结构的处理过程。在应对动态加载课程信息时,我学会了如何通过多维度定位策略确保数据抓取的准确性。通过将非结构化网页数据转化为规范的数据库记录,我提升了数据清洗和格式转换的能力,也深刻体会到用户模拟技术在反爬策略应对中的重要性。

作业③:
(1)实验内容及结果
掌握大数据相关服务,熟悉Xshell的使用
完成文档 华为云_大数据实时分析处理实验手册-Flume日志采集实验(部分)v2.docx 中的任务,即为下面5个任务,具体操作见文档。
环境搭建:
任务一:开通MapReduce服务
image
image
image

实时分析开发实战:

任务一:Python脚本生成测试数据
image

任务二:配置Kafka
image

任务三: 安装Flume客户端
image

任务四:配置Flume采集数据
image
image
image
image

(2)实验心得
Flume日志采集实验让我首次接触完整的大数据采集流水线。从云端环境搭建到多组件协调配置,我理解了分布式系统中各服务组件的角色定位和协作原理。通过亲手部署数据生成、传输和采集的完整链路,我对实时数据处理架构有了直观认识,这种从编码到运维的全流程实践极大拓展了我的技术视野。

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

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

相关文章

2025涡轮/涡街/电磁流量计十大品牌推荐、知名品牌排行榜、口碑头部厂家 - 品牌推荐大师1

天津迅尔科技——工信部流量仪表"小巨人",2006年深耕工业计量,75000㎡智造基地,200+专利,物联网方案覆盖水、气、热、油全场景,为三维流量数据提供高可靠"精准入口",值得智慧工厂与数字孪生…

2025涡轮/涡街/电磁流量计十大品牌推荐、知名品牌排行榜、口碑头部厂家 - 品牌推荐大师1

天津迅尔科技——工信部流量仪表"小巨人",2006年深耕工业计量,75000㎡智造基地,200+专利,物联网方案覆盖水、气、热、油全场景,为三维流量数据提供高可靠"精准入口",值得智慧工厂与数字孪生…

2025英国留学中介机构排名榜 - 留学品牌推荐官

2025英国留学中介机构排名榜一、2025英国留学中介机构排名榜解析作为从业15年的国际教育规划师,我经常被学生和家长询问如何选择可靠的英国留学中介。在2025年,英国留学申请竞争加剧,许多申请者希望通过专业机构提升…

2025年国产加热循环器/制冷循环器/油浴定制:国内专业油浴/加热循环器/制冷循环器哪家好?优质厂家推荐/品牌推荐 - 品牌推荐大师1

在化工、制药、新材料、新能源、生物工程等高精尖产业中,对温度控制的精度、稳定性及安全性要求日益严苛。作为关键配套设备,加热循环器、制冷循环器以及油浴系统在实验与生产过程中扮演着不可或缺的角色。面对市场上…

2025年四川优秀的网络推广企业排行榜,抖音推广/快手代运营/小红书推广/短视频代运营/抖音代运营/新闻营销/GEO优化网络推广品牌哪家好 - 品牌推荐师

在数字化浪潮持续深入的今天,网络推广已成为企业获取市场、建立品牌不可或缺的一环。四川地区作为西南经济重镇,孕育了一批专业、高效、富有创新精神的网络推广服务商。本文旨在基于公开市场表现、服务口碑、技术实力…

2025年起重电磁铁厂家五大大排名:江苏靠谱的起重电磁铁公司 - myqiye

本榜单依托行业技术参数实测、客户满意度调研及供应链溯源分析,深度筛选十家标杆企业,为工业领域客户选型提供客观依据,助力精准匹配适配的起重电磁铁服务伙伴。 TOP1 推荐:无锡国磁机械设备有限公司 推荐指数:★…

2025起重电磁铁生产商TOP5权威推荐:正规厂商助力工业高 - mypinpai

工业自动化进程中,起重电磁铁作为物料搬运核心设备,需求持续攀升。2024年数据显示,其市场规模超120亿元,年增速32%,但28%的投诉集中在吸力不稳定、使用寿命短、定制适配差三大问题——冶金厂因电磁铁透磁深度不足…

2025固化地坪按需定制TOP5品牌供应商权威推荐:甄选供应 - mypinpai

工业生产场景中,厂房地面的耐磨度、稳定性与美观性直接影响生产效率与企业形象。2024年数据显示,华南地区工业地坪维修需求年增35%,62%的企业因地面起灰起砂、开裂脱落导致叉车损耗率提升20%、生产中断超10小时/月。…

2025东莞固化地坪服务商TOP5权威推荐:甄选优质固化地坪 - myqiye

工业生产场景中,厂房地面承担着重型设备碾压、高频物流运输等严苛考验,优质固化地坪成为企业保障生产效率、提升厂区形象的核心需求。2024年珠三角工业地坪市场数据显示,因地面起砂开裂导致的生产中断事件占比超35%…

2025重庆维修改造厂家TOP5权威推荐:资深供应商甄选指南 - 工业品牌热点

建筑维修改造是保障城市存量建筑安全、推动城市更新的核心环节。2024年数据显示,重庆存量建筑改造市场规模突破120亿元,年增速达32%,但行业内60%的投诉集中在施工质量不达标、交付延期、技术不合规三大问题——部分…

极客营销外贸陪跑/数字人/跨境托管服务商排行榜,专业推荐口碑 - 工业推荐榜

为帮助企业高效解决外贸陪跑、数字人应用及跨境托管的核心需求,避免选型踩坑,我们围绕服务专业度(含技术落地能力、场景适配性)、口碑反馈、实际成效、生态协同能力四大维度,对行业内主流服务商展开深度评测,终筛…

靠谱财务老牌公司排行,为你甄选比较不错的财务机构 - 工业品牌热点

在企业的发展历程中,财务问题犹如一座大山,时刻影响着企业的稳健前行。对于中小微企业主、初创公司创始人以及个体商户而言,选择一家靠谱的财务机构,无疑是为企业发展奠定坚实基础的关键一步。今天,就让我们一起来…

2025年数智化服务公司TOP5推荐:极客营销的市场适应性、 - 工业推荐榜

在数字化浪潮席卷全球的2025年,数智化服务已成为企业降本增效、个人技能变现的核心引擎。然而,面对市场上良莠不齐的数智化服务商,如何选择适配性强、口碑过硬、规模可靠的合作伙伴?以下结合企业与个人核心痛点,为…

门店顾客安全监控 AI 卫士:AI 跌倒防护系统

真实痛点与传统困境 每逢雨天或高峰期,门店门口10米内就是“滑倒重灾区”:老人踩到饮料残液、儿童追逐撞翻冰淇淋、轮椅被地砖缝卡住…… 传统方案:监控室保安盯着几十路画面,平均发现时间47秒,赶到现场已超2分钟…

2025年PP焊接土工格栅供货厂家权威推荐榜单:复合土工格栅/钢丝土工格栅/三向土工格栅源头厂家精选 - 品牌推荐官

在高速公路、铁路路基、水利堤坝及大型场坪等工程建设中,PP焊接土工格栅以其优异的抗拉强度、稳定的网格结构和对填料的良好咬合力,成为增强土体、分散荷载、防止不均匀沉降的关键土工合成材料。市场数据显示,随着基…

2025电磁流量计|涡街流量计|涡轮流量计十大厂家口碑推荐品牌厂家 - 品牌推荐大师1

天津迅尔科技股份有限公司 【推荐指数:★★★★★】【评分:9.8 分】 天津迅尔科技股份有限公司始创于2006年,作为国家级高新技术企业、工信部专精特新“小巨人”企业及天津市战略性新兴产业领军企业,公司专注流量仪…

IP_AUTODETECTION_METHOD

- name: IP_AUTODETECTION_METHOD value: interface=eth0 - name: FELIX_IPINIPMTU- name: CALICO_NETWORKING_BACKENDvalueFrom:configMapKeyRef:key: calico_backendname: calico-config- name: CLU…

数据备份全攻略:rsync同步/tar打包/云备份服务实操教程(2025版)

做好数据备份是保障数据安全的核心手段,本文从本地备份(tar打包)、跨设备同步(rsync)、异地容灾(云备份)三个维度,手把手教你搭建完整的备份体系,覆盖个人开发、中小企业服务器等场景。数据丢失是开发者和运维…

Qt中的QShortcut:高效键盘快捷方式编写指南

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

01 配置开发环境

01 配置开发环境$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");1、Eclipse:官网下载压缩包,解压直接用 2、Tomcat:进入cmd界面操作。安装完成后,可以直…