数据采集与融合技术实践课第三次作业

news/2025/1/18 8:05:53/文章来源:https://www.cnblogs.com/dust4399/p/18516495

数据采集与融合技术实践课第三次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/2024DataCollectionandFusiontechnology
码云作业gitee仓库 https://gitee.com/huang-yuejia/DataMining_project/tree/master/work3
学号 102202149
姓名 黄悦佳

目录
  • 数据采集与融合技术实践课第三次作业
    • 一、作业内容
      • 作业①:
      • 1.爬取网站图片(作业1)
      • 2.心得体会
      • 作业②:
      • 1.爬取股票数据
      • 2.心得体会
      • 作业③:
      • 1.爬取外汇数据
      • 2.心得体会
    • 二、作业总结

一、作业内容

作业①:

  • 要求:指定一个网站,爬取这个网站中的所有的所有图片,例如:中国气象网(http://www.weather.com.cn)。使用scrapy框架分别实现单线程和多线程的方式爬取。
    –务必控制总页数(学号尾数2位)、总下载的图片数量(尾数后3位)等限制爬取的措施。

1.爬取网站图片(作业1)

本作业源码链接:https://gitee.com/huang-yuejia/DataMining_project/blob/master/work3/work3.1

  • 结果展示:


  • 关键代码展示:

class WeatherNewSpider(scrapy.Spider):name = 'weather_new_spider'# 设置允许爬取的页面数量和图片数量max_pages = 5  # 控制总页数max_images = 142  # 控制下载的图片数量image_count = 0  # 当前下载的图片数量current_page = 1  # 当前页数start_urls = ['https://p.weather.com.cn/tqxc/index.shtml']def parse(self, response):# 找到图片链接image_urls = response.css('img::attr(src)').getall()for img_url in image_urls:if self.image_count >= self.max_images:breakself.image_count += 1yield {'image_urls': img_url}# 控制页数,爬取下一页if self.current_page < self.max_pages and self.image_count < self.max_images:self.current_page += 1next_page = f'https://p.weather.com.cn/tqxc/index_{self.current_page}.shtml'yield response.follow(next_page, self.parse)def close(self, reason):self.log(f'Total images downloaded: {self.image_count}')

体现多线程

# 最大并发请求数
CONCURRENT_REQUESTS = 16  # 可以根据需要调整# 下载延迟(避免对服务器的压力)
DOWNLOAD_DELAY = 0.5  # 每个请求之间的延迟,单位为秒

2.心得体会

  • 分别实现了单线程和多线程的爬取方式。使用 Scrapy 的 CSS 选择器获取图片链接,并在 parse 方法中进行图片链接的提取和处理。当达到设定的最大图片数量或最大页数时,停止爬取。在多线程部分,通过设置 CONCURRENT_REQUESTS 和 DOWNLOAD_DELAY 来控制并发请求数和下载延迟,以优化爬取效率并避免对服务器造成过大压力。

作业②:

  • 要求:熟练掌握 scrapy 中 Item、Pipeline 数据的序列化输出方法;使用scrapy框架+Xpath+MySQL数据库存储技术路线爬取股票相关信息。
    候选网站:东方财富网:https://www.eastmoney.com/

    1.爬取股票数据

本作业源码链接:https://gitee.com/huang-yuejia/DataMining_project/blob/master/work3/work3.2

  • 结果展示:

  • 关键代码展示:

爬取数据

    def parse(self, response):# 提取 JSON 数据json_str_start = response.text.index('(') + 1json_str_end = response.text.rindex(')')json_str = response.text[json_str_start:json_str_end]# 解析 JSON 数据data = json.loads(json_str)if 'data' in data and 'diff' in data['data']:for stock in data['data']['diff']:item = StockItem()item['code'] = stock.get('f12')  # 股票代码item['name'] = stock.get('f14')  # 股票名称item['price'] = stock.get('f2')   # 当前价格item['change'] = stock.get('f4')   # 涨跌item['trading_volume'] = stock.get('f5')  # 交易量item['total_transaction'] = stock.get('f6')  # 总交易金额item['change_percent'] = stock.get('f10')  # 涨跌幅度yield itemelse:self.logger.error("数据格式不正确或未找到 'diff' 字段。")

2.心得体会

  • 实践了mysql与scrapy技术的结合,将爬取的数据存储在连接的数据库中,方便对数据进一步的操作和分析。

作业③:

  • 要求:熟练掌握 scrapy 中 Item、Pipeline 数据的序列化输出方法;使用scrapy框架+Xpath+MySQL数据库存储技术路线爬取外汇网站数据。
    候选网站:中国银行网:https://www.boc.cn/sourcedb/whpj/
    本作业源码链接:https://gitee.com/huang-yuejia/DataMining_project/blob/master/work3/work3.3

1.爬取外汇数据

  • 结果展示:

  • 关键代码展示:

class ForeignSpider(scrapy.Spider):name = "foreign"allowed_domains = ["boc.cn"]start_urls = ["https://www.boc.cn/sourcedb/whpj/"]def parse(self, response):rows = response.xpath('//table//tr[position()>1]')for row in rows:item = ForeignExchangeItem()item['name'] = row.xpath('./td[1]/text()').get()item['buy_price'] = row.xpath('./td[2]/text()').get()item['cash_buy_price'] = row.xpath('./td[3]/text()').get()item['sell_price'] = row.xpath('./td[4]/text()').get()item['cash_sell_price'] = row.xpath('./td[5]/text()').get()item['conversion_price'] = row.xpath('./td[6]/text()').get()item['publish_date'] = row.xpath('./td[7]/text()').get()item['publish_time'] = row.xpath('./td[8]/text()').get()yield item

2.心得体会

  • 通过 XPath 表达式定位网页中的表格数据,进行准确的筛选爬取。

二、作业总结

  • 通过本次作业,对数据采集技术有了更全面和深入的实践经验。在完成各项任务的过程中,不仅掌握了 Scrapy 框架的核心技能,还学会了如何应对各种实际问题和挑战。虽然在过程中遇到了一些困难,但通过不断地调试和学习,逐渐克服了这些问题,提高了自己的编程能力和数据处理能力。在今后的学习和实践中,将继续深化这些技术的应用,不断改进和完善数据采集方案,以满足更多复杂的数据获取需求。同时,也会关注数据的质量和合法性,确保采集到的数据能够为后续的分析和应用提供可靠的支持。

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

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

相关文章

猿人学web端爬虫攻防大赛赛题第17题——天杀的http2.0

题目网址: https://match.yuanrenxue.cn/match/17 解题步骤:老方法,看触发的数据包。只有一个数据包,再看cookie中有没有特殊的字段。没有遇到第13题的特殊字段,直接访问。import requestsurl = "https://match.yuanrenxue.cn/api/match/17?page=1" headers = …

你知道多少种API架构风格

以下是最常用的几种风格:👇🌟 『SOAP』:成熟、全面的XML基础风格,最适合企业应用。🌐 『RESTful』:流行、易于实现的HTTP方法风格,理想用于Web服务。📚 『GraphQL』:查询语言风格,请求特定数据,减少网络开销,响应更快。🚀 『gRPC』:现代、高性能的Protocol…

【java应用】 Jmeter玩法:调用jar包实现AES加密

原创 方知本知 从零做软件测试一、将开发提供的AES java类打成jar包 1.1 打开开发提供的java类 用Eclipse开发工具打开,观察包名。新建项目,在生成的src目录下新建包,名字为java类对应的包名,将java类拖到该包下面。1.2 将该java类导出成jar包格式二、Jmeter调用jar包实现A…

chrony服务

APPSRV、ROUTERSRV、STORAGESRV、ISPSRV 完成服务chrony 配置为全网提供时间同步服务器。 为除本机外的所有主机提供时间同步服务。 每隔5分钟同步一次时间。配置Chrony服务APPSRV作为chrony服务的服务段 其他主机作为客户端 APPSRV 配置服务 vim /etc/chrony.confserver 127.0…

RouterSrv路由服务

RouterSrv 完成服务ROUTING 开启路由转发,为当前实验环境提供路由功能。 根据题目要求,配置单臂路由实现内部客户端和服务器之间的通信。 IPTABLES 添加必要的网络地址转换规则,使外部客户端能够访问到内部服务器上的dns、mail、web和ftp服务。 INPUT、OUTPUT和FOREARD链默认…

15 图灵

可判定行问题:计算机的计算能力是有极限的

发布测试

发布测试`package com.atguitu.test; import com.atguigu.mybatis.mapper.UserMapper; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSes…

20242822《Linux内核原理与分析》第六周作业

实验五——分析 system_call 中断处理过程 在上一次实验中我选择的4号系统调用write 一、打开shell并使用命令启动内核进入menu程序 cd ~/LinuxKernel/ qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img 进入menu程序后,可以看到该系统中仅有3个命令:hel…

《诛仙单机版系列一:六道轮回》安装教程|虚拟机一键端|GM工具包

今天给大家带来一款单机游戏的架设:诛仙-六道轮回-五职业。游戏版本:v1.2.4 只适用于单机娱乐,此教程是本人亲测所写,踩坑无数,如果你是小白跟着教程走也是可以搭建成功。 亲测视频演示 https://githubs.xyz/show/289.mp4游戏安装步骤 此游戏架设需要安装虚拟机,没有虚拟…

根据swagger.yaml生成harbor私库api调用代码

准备 下载https://github.com/goharbor/harbor/blob/main/api/v2.0/swagger.yaml 下载https://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/2.4.43/swagger-codegen-cli-2.4.43.jar生成调用代码 swagger-codegen-cli是用java写的, 但是支持生成多种语言的调用代码,…

网鼎杯

个人只做了一道web一道crypto Web02 打开赛题环境地址,是登录界面,进去后获取hash值用户名或密码随意我们访问到的flag界面 ** **进去后这里有个输入框测试下可以进行xss又根据/flag提示需要boss来访问这个路径,编写脚本构造payload进行访问,字符串编码下 import requests …

BuildCTF

主要做web方向,misc和crypto有几题也看了一下 Web ez!httpez_md5这里的<font style="background-color:rgb(249, 242, 244);">$_REQUEST</font>变量获得GET或POST的参数,值的注意的是,如果通过不同的方式获得相同变量的不同值,**<font style=&quo…