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

news/2025/1/18 3:56:18/文章来源:https://www.cnblogs.com/xuxuanyu/p/18516590

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

主要代码:

单线程:
class zy1_Pipeline:count = 0desktopDir = str(pathlib.Path.home()).replace('\\', '\\\\') + '\\Desktop'def open_spider(self, spider):picture_path = self.desktopDir + '\\images'if os.path.exists(picture_path):  # 判断文件夹是否存在for root, dirs, files in os.walk(picture_path, topdown=False):for name in files:os.remove(os.path.join(root, name))  # 删除文件for name in dirs:os.rmdir(os.path.join(root, name))  # 删除文件夹os.rmdir(picture_path)  # 删除文件夹os.mkdir(picture_path)  # 创建文件夹def process_item(self, item, spider):if isinstance(item, zy1_Item):url = item['img_url']print(f"Processing image URL: {url}")if self.count < 13:  # 只处理前13个项目try:img_data = urllib.request.urlopen(url=url).read()img_path = self.desktopDir + '\\images\\' + str(self.count + 1) + '.jpg'  # 从1开始编号with open(img_path, 'wb') as fp:fp.write(img_data)print(f"Downloaded image to {img_path}")self.count += 1  # 增加计数except Exception as e:print(f"Error downloading image from {url}: {e}")return itemdef close_spider(self, spider):# 单线程下,不需要等待线程结束pass
多线程:
class zy1_Pipeline:count = 0desktopDir = str(pathlib.Path.home()).replace('\\', '\\\\') + '\\Desktop'threads = []downloaded_urls = set()  # 用于记录已下载的图片 URLdef open_spider(self, spider):picture_path = self.desktopDir + '\\images'if os.path.exists(picture_path):  # 判断文件夹是否存在for root, dirs, files in os.walk(picture_path, topdown=False):for name in files:os.remove(os.path.join(root, name))  # 删除文件for name in dirs:os.rmdir(os.path.join(root, name))  # 删除文件夹os.rmdir(picture_path)  # 删除文件夹os.mkdir(picture_path)  # 创建文件夹# 多线程def process_item(self, item, spider):if isinstance(item, zy1_Item):url = item['img_url']print(f"Processing image URL: {url}")if url not in self.downloaded_urls and self.count < 13:image_number = self.count + 1  # 从1开始编号T = threading.Thread(target=self.download_img, args=(url, image_number))T.setDaemon(False)T.start()self.threads.append(T)self.downloaded_urls.add(url)  # 记录已下载的 URLself.count += 1return itemdef download_img(self, url, image_number):try:img_data = urllib.request.urlopen(url=url).read()img_path = self.desktopDir + '\\images\\' + str(image_number) + '.jpg'with open(img_path, 'wb') as fp:fp.write(img_data)print(f"Downloaded image to {img_path}")except Exception as e:print(f"Error downloading image from {url}: {e}")def close_spider(self, spider):for t in self.threads:t.join()

输出信息:
爬取前13张图片
单线程:

多线程:

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

主要代码:

class zy2_Pipeline:count = 0  # 用于计数def open_spider(self, spider):self.conn = sqlite3.connect('stock.db')self.cursor = self.conn.cursor()self.cursor.execute('DROP TABLE IF EXISTS stock')sql = """CREATE TABLE stock(Latest_quotation REAL,Chg REAL,up_down_amount REAL,turnover REAL,transaction_volume REAL,amplitude REAL,id TEXT PRIMARY KEY,name TEXT,highest REAL,lowest REAL,today REAL,yesterday REAL)"""self.cursor.execute(sql)def process_item(self, item, spider):if isinstance(item, zy2_Item):if self.count < 113:sql = """INSERT INTO stock VALUES (?,?,?,?,?,?,?,?,?,?,?,?)"""values = (item['f2'], item['f3'], item['f4'], item['f5'], item['f6'], item['f7'], item['f12'], item['f14'], item['f15'], item['f16'], item['f17'], item['f18'])self.cursor.execute(sql, values)self.conn.commit()self.count += 1  # 增加计数return itemdef close_spider(self, spider):self.cursor.close()self.conn.close()

输出信息:

作业③:
要求:熟练掌握 scrapy 中 Item、Pipeline 数据的序列化输出方法;使用scrapy框架+Xpath+MySQL数据库存储技术路线爬取外汇网站数据。
候选网站:中国银行网:https://www.boc.cn/sourcedb/whpj/

主要代码:

class zy3_Pipeline:count = 0  # 用于计数def open_spider(self, spider):self.conn = sqlite3.connect('bank.db')self.cursor = self.conn.cursor()self.cursor.execute('DROP TABLE IF EXISTS bank')sql = """CREATE TABLE bank(Currency TEXT,TBP TEXT,CBP TEXT,TSP TEXT,CSP TEXT,Time TEXT)"""self.cursor.execute(sql)def process_item(self, item, spider):if isinstance(item, zy3_Item):if self.count < 113:sql = 'INSERT INTO bank VALUES (?,?,?,?,?,?)'values = (item['name'], item['price1'], item['price2'], item['price3'], item['price4'], item['date'])self.cursor.execute(sql, values)self.conn.commit()self.count += 1  # 增加计数return itemdef close_spider(self, spider):self.cursor.close()self.conn.close()

输出信息:

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

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

相关文章

2024年网鼎杯青龙组 pwn

pwn2 开局泄露栈地址,又是栈溢出,直接栈转移拿下 from pwn import * from LibcSearcher import LibcSearcher #from Crypto.Util.number import bytes_to_long,bytes_to_long #--------------------setting context--------------------- context.clear(arch=amd64, os=linux…

新东方在线视频课程资料下载工具,如何在电脑端下载新东方在线视频课程讲义到本地?

一. 安装新东方在线课程下载器 1.获取学无止下载器 https://www.xuewuzhi.cn/koolearn_downloader 2.下载安装后,然后点击桌面快捷方式运行即可。 注意:杀毒软件可能会阻止外部exe文件运行,并将其当做成病毒,直接添加信任即可,本软件绝对没有木马病毒。 二. 使用说明 1.学…

强连通分量学习笔记+杂题

图论系列: 前言: 僕は 明快さ故にアイロニー 優柔不断なフォローミー 後悔後悔夜の果て 相关题单:戳我 一.强连通分量相关定义 基本摘自oi wiki ,相关定义还是需要了解。(实际就是搬了个oi wiki) 强连通分量主要在研究有向图可达性,针对的图类型为有向弱联通图。 1.强连通…

CMake 生成器表达式---条件表达式和逻辑运算符

CMake 的生成器表达式用于在构建系统级别上进行条件判断和逻辑运算,它们通常用在目标属性和生成器表达式上下文中。这些表达式允许你根据不同的平台、配置或编译器来定制构建过程。【写在前面】 CMake 的生成器表达式用于在构建系统级别上进行条件判断和逻辑运算,它们通常用在…

ESP32-LVGL驱动框架

ESP32另一种LVGL驱动架构问题背景 最近在调试一个新屏幕的过程中,使用LVGL官方的lvgl_esp32_driver驱动,在我这个分辨率比较大(454 x 454)的屏幕下会出现,在分配完成buff后,若buff过大会出现,在刷屏的时候会这种警告。 txdata transfer > hardware max supported len研…

goland 把多个项目窗口合并到一个窗口

有时我们可能想把goland 每个项目窗口合并到一个窗口,每个项目以一个tab的形式展示,下面是合并的方法 点击「Window->Merge All Project Windows」即可

Word_共享编辑

打开链接 ? 点击右上角的"登录"点"编辑"→点"在桌面版中打开"共享编辑 ok

手把手教你如何下载中国大学mooc慕课上已关闭的视频课程和课件资料

随着线上教育的普及,越来越多的大学开始提供线上教育,以方便学生的在线学习。然而,有些课程在结束后就会被关闭,导致学生无法再次观看。如果你想下载这些已经关闭的视频课程,该怎么办呢?其实我们可以通过一些工具来下载这些已关闭的课程。这里以中国大学Mooc网站为例,教…

汉文博士新增《通用规范汉字表》等多个字表

汉文博士的字表可以用于在部首、构型、粤拼和拼音检索中突出显示或筛选汉字。 今天将之前上传的字表全部重新生成了一遍,在词典管理界面双击字表可查看字表内含的汉字数量。 另外,还新增了如下字表:现代汉语通用字表 现代汉语常用字表 通用规范汉字表 台湾“常用国字”标准字…

Normalized Mutual Information(NMI, 归一化互信息)

Normalized Mutual Information(NMI, 归一化互信息)值域是 $[0,1]$,值越高表示两个聚类结果越相似。归一化是指将两个聚类结果的相似性值定量到 $0\sim 1$ 之间。$$ \text{NMI}=\frac{2\sum_i\sum_jn_{ij}ln\frac{n_{ij}N}{n_in_j}}{-\sum_in_iln\frac{n_i}{N}-\sum_jn_jln\fr…

模拟赛总结(四)(终章?)

2024.10.30 T1 追逐游戏 (chase) 被自己的分讨绕死了,以后要学会简化code T2 统计code T3 软件工程 选前\(k - 1\)长的 + 剩下求交集可得\(96\) ~~为什么我贪的不对qwq ~~ 把这个贪心改成大炮就是整洁的一部分 定义\(dp_{i,j}\)表示前\(i\)条线段放到\(j\)个集合里,那么上述方…

【红队】利用 PsycheShell 进行 Paste Jacking 以获取隐秘的反向 Shell

原创 Ots安全介绍 在网络安全领域,粘贴劫持 (Paste Jacking)等技术代表着社会工程攻击日益复杂的趋势。当用户从网页上复制看似无害的内容,但粘贴的内容却遭到恶意篡改时,就会发生粘贴劫持。攻击者可以使用此技术在目标机器上执行命令,尤其是当用户粘贴到终端等敏感环境中时…