数据采集与融合技术实验课程作业三

news/2024/11/14 19:08:14/文章来源:https://www.cnblogs.com/KaiInssy/p/18540630

数据采集与融合技术实验课程作业三

作业所属课程 https://edu.cnblogs.com/campus/fzu/2024DataCollectionandFusiontechnology
作业链接 https://edu.cnblogs.com/campus/fzu/2024DataCollectionandFusiontechnology/homework/13287
gitee码云代码位置 https://gitee.com/wang-qiangsy/crawl_project/tree/master/作业三
学号 102202106

目录
  • 数据采集与融合技术实验课程作业三
    • 任务①:
      • 主要代码
      • 作业心得
    • 任务②:
      • 主要代码
      • 作业心得
    • 任务③:
      • 主要代码
      • 作业心得

任务①:

主要代码

## image_spider.py
class ImageSpider(scrapy.Spider):name = "image_spider"allowed_domains = ["weather.com.cn"]start_urls = ["http://www.weather.com.cn"]def parse(self, response):# Find all image URLs on the pageimg_urls = response.css('img::attr(src)').getall()img_urls = [response.urljoin(url) for url in img_urls]  # Handle relative URLs# Print image URLs in consolefor img_url in img_urls:self.log(f"Image URL: {img_url}")# Yield image requestsfor img_url in img_urls:yield scrapy.Request(img_url, callback=self.save_image)def save_image(self, response):# Save each image in 'images' folderpath = 'images'os.makedirs(path, exist_ok=True)filename = os.path.join(path, response.url.split('/')[-1])with open(filename, 'wb') as f:f.write(response.body)self.log(f"Saved file {filename}")

运行后查看抓取的图片

作业心得

    1. Scrapy 框架的强大功能
      Scrapy 是一个功能强大的网页抓取框架,它提供了许多方便的工具和方法来处理网页抓取任务。在这个项目中,我使用 Scrapy 来抓取天气网站上的所有图片,并将它们保存到本地。Scrapy 的 Spider 类和 Request 对象使得抓取和处理网页内容变得非常简单和直观。
    1. 使用 CSS 选择器提取数据
      在 parse 方法中,我使用了 CSS 选择器来提取页面上的所有图片 URL。CSS 选择器是一种非常强大的工具,它允许我们轻松地选择和提取网页中的特定元素。在这个项目中,我使用 response.css('img::attr(src)').getall() 来获取所有图片的 URL。
    1. 处理相对 URL
      在抓取网页内容时,经常会遇到相对 URL。为了确保我们能够正确地访问这些资源,我使用了 response.urljoin(url) 方法将相对 URL 转换为绝对 URL。这是一个非常重要的步骤,因为它确保了我们能够正确地下载和保存所有图片。

任务②:

主要代码

# stock_spider.py
def parse(self, response):# 提取 JSON 数据data = json.loads(response.text[response.text.find('(') + 1 : response.text.rfind(')')])  # 去除 JSONP 包裹for stock in data['data']['diff']:item = StockScraperItem()item['id'] = stock['f12']item['code'] = stock['f12']item['name'] = stock['f14']item['latest_price'] = stock['f2']item['price_change_percentage'] = stock['f3']item['price_change'] = stock['f4']item['volume'] = stock['f5']item['turnover'] = stock['f6']item['amplitude'] = stock['f7']item['high'] = stock['f15']item['low'] = stock['f16']item['today_open'] = stock['f17']item['yesterday_close'] = stock['f18']yield item
# pipelines.py
def process_item(self, item, spider):# 插入数据self.cursor.execute("""INSERT INTO stock_data (id, code, name, latest_price, price_change_percentage, price_change, volume, turnover, amplitude, high, low, today_open, yesterday_close)VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)ON DUPLICATE KEY UPDATE latest_price=VALUES(latest_price),price_change_percentage=VALUES(price_change_percentage),price_change=VALUES(price_change),volume=VALUES(volume),turnover=VALUES(turnover),amplitude=VALUES(amplitude),high=VALUES(high),low=VALUES(low),today_open=VALUES(today_open),yesterday_close=VALUES(yesterday_close)""", (item['id'],item['code'],item['name'],item['latest_price'],item['price_change_percentage'],item['price_change'],item['volume'],item['turnover'],item['amplitude'],item['high'],item['low'],item['today_open'],item['yesterday_close']))

运行查看MySQL中查看股票数据

作业心得

    1. 处理 JSON 数据
      在 StockSpider 爬虫中,我需要从 API 响应中提取 JSON 数据。通过使用 Python 的 json 模块,我能够轻松地解析 JSON 数据,并提取所需的字段。在这个项目中,我使用 json.loads 方法解析 JSON 数据,并使用字典访问提取到的数据。
    1. 使用 Scrapy Item
      为了更好地组织和管理抓取到的数据,我使用了 Scrapy 的 Item 类。在 StockScraperItem 中定义了各个字段,并在爬虫中将提取到的数据赋值给这些字段。这种方法不仅使代码更加清晰,还能确保数据的一致性和完整性。
    1. 数据存储到 MySQL
      在 StockScraperPipeline 中,我使用了 mysql.connector 模块将抓取到的数据存储到 MySQL 数据库中。通过在 open_spider 方法中建立数据库连接,并在 close_spider 方法中关闭连接,我确保了数据库连接的正确管理。在 process_item 方法中,我使用 SQL 语句将数据插入到数据库中,并使用 ON DUPLICATE KEY UPDATE 语句处理重复数据。

任务③:

主要代码

# work3.pydef parse(self, response):data = response.body.decode()selector=scrapy.Selector(text=data) data_lists = selector.xpath('//table[@align="left"]/tr')for data_list in data_lists:datas = data_list.xpath('.//td')if datas != []:item = work3_Item()keys = ['name','price1','price2','price3','price4','price5','date']str_lists = datas.extract()for i in range(len(str_lists)-1):item[keys[i]] = str_lists[i].strip('<td class="pjrq"></td>').strip()yield item
# pipelines.py
class work3_Pipeline:def open_spider(self,spider):try:self.db = pymysql.connect(host='127.0.0.1', user='root', passwd='wq1233', port=3306,charset='utf8',database='forex')self.cursor = self.db.cursor()self.cursor.execute('DROP TABLE IF EXISTS bank')sql = """CREATE TABLE bank(Currency varchar(32),p1 varchar(17),p2 varchar(17),p3 varchar(17),p4 varchar(17),p5 varchar(17),Time varchar(32))"""self.cursor.execute(sql)except Exception as e:print(e)def process_item(self, item, spider):if isinstance(item,work3_Item):sql = 'INSERT INTO bank VALUES ("%s","%s","%s","%s","%s","%s","%s")' % (item['name'],item['price1'],item['price2'],item['price3'],item['price4'],item['price5'],item['date'])self.cursor.execute(sql)self.db.commit()return item

运行查看MySQL查看外汇数据

作业心得

    1. 使用 XPath 提取数据
      在 Work3Spider 爬虫中,我使用了 XPath 表达式来提取网页中的数据。XPath 是一种非常强大的工具,它允许我们轻松地选择和提取网页中的特定元素。在这个项目中,我使用 selector.xpath('//table[@align="left"]/tr') 来获取所有数据行,并进一步提取每行中的各个数据单元格。
    1. 使用 Scrapy Item
      为了更好地组织和管理抓取到的数据,我使用了 Scrapy 的 Item 类。在 work3_Item 中定义了各个字段,并在爬虫中将提取到的数据赋值给这些字段。这种方法不仅使代码更加清晰,还能确保数据的一致性和完整性。

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

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

相关文章

HTTPS ppt素材

本来的主题是介绍一下我之前做的搜索与推荐的业务,但9月份开始我主要开始承担一些医那块的业务测试,就想做点别的分享,但换成医的业务介绍,想了想我目前对医的了解程度,实在没勇气拿出来分享,所以就换了这个主题。 这个主题其实也是早有预谋,一个初衷是想对某一个通用性…

jvm 堆内存

堆、方法区、直接内存,多个线程之间是共享的。 ------------ 堆内存是会溢出的。 堆内存默认最大是7G

CdnCheck工具

前言:CdnCheck工具实现,记录下我这边实现的几个点 参考文章:https://github.com/projectdiscovery/cdncheck 参考文章:https://github.com/YouChenJun/CheckCdn 参考文章:https://github.com/zu1k/nali 参考文章:https://github.com/u9sky/cdn-cname-domain/blob/main/cd…

考研打卡(14)

开局(14) 开始时间 2024-11-11 20:21:43 结束时间 2024-11-11 22:00:55今天考研数学的资料到了数据结构设一组初始记录关键字序列为(50,40,95,20,15,70,60,45), 则以增量d=4的一趟希尔排序结束后前4条记录关键字为_____(中国地质大学2017年) A 40,50,20,95 B 15,40,6…

说明与笔记导航(咕咕咕)

对使用这些笔记的同学想说的话,以及更新进度。为什么写这么多B东西? 其一呢是帮助我自己,边写笔记边梳理知识;其二呢是帮助各位义父义母考试成功。 更新进度与内容说明 11.11:本周工作日需突击学习python,有限体积N-S方程推导已写完。 目前进度:3009 建模:数值方法写完…

运用Windows API进行编程

目录运用Windows API进行编程实验环境窗口创建基本流程基本代码流程1、头文件和库2、全局变量和函数3、入口主函数4、注册窗口类函数5、创建和显示窗口函数6、窗口过程函数运行结果实验小结 运用Windows API进行编程 运行Windows应用程序在桌面显示Windows窗口。窗口内背景色为…

Windows API窗口绘图程序设计

目录Windows API窗口绘图程序设计1、窗口过程函数2、WM_LBUTTONDOWN:处理鼠标左键按下的消息鼠标消息相关知识点基本鼠标消息双击消息附带信息滚轮消息附带信息:3、WM_PAINT:处理窗口重绘的消息窗口绘图相关知识点窗口绘图基本流程开始绘画绘制封闭图形(能使用画刷填充的图形…

Matlab常用的图像属性

线型、标记和颜色 线型、标记和颜色,指定为包含符号的字符串或字符向量。符号可以按任意顺序显示。不需要同时指定所有三个特征(线型、标记和颜色)。例如,如果忽略线型,只指定标记,则绘图只显示标记,不显示线条。以下是 MATLAB 在许多类型的绘图中使用的默认颜色的 RGB …

jvm Java虚拟机栈——栈内存溢出

----------- ---------------------- -----------------

学习笔记(三十五):ArkTs-@ohos.util.ArrayList (线性容器ArrayList)

概述: 一种线性数据结构,底层基于数组实现一、导入import { ArrayList } from @kit.ArkTS; 二、定义let arrayList: ArrayList<string | number> = new ArrayList(); 三、常用函数 1、 add,在ArrayList尾部插入元素 2、insert,在长度范围内任意位置插入指定元素3、…

Scrum冲刺-第一篇

这个作业属于哪个课程 广工计院计科34班这个作业要求在哪里 作业要求这个作业的目标 小队各成员的任务确认和项目期望一、团队简介: 队名:edg.gdut 成员:姓名 学号罗祖文 3121004537郑志涛 3122004547陈恺麟 3122004515许凌铎 3122004540邓茗骏 3122004517李晓彬 3122004531…

(1) Pytorch深度学习—数值处理

(1)Pytorch——数值处理参考于李沐“动手学深度学习”系列以及网上各路大佬的博客资料,感谢大家的分享,如错改,如侵删。torch中的数值处理 数值处理是深度学习中极其重要的一部分,张量(tensor)是后续进行处理和计算的基本单位。张量表示一个由数值组成的数组,这个数组…