├── Garbage_images_spyder ├── source_images_spider.py ├── source_refuse_name.txt ├── 其他垃圾爬取 │ ├── 其他垃圾爬取.py │ └── 其他垃圾类型.txt ├── 厨余垃圾爬取 │ ├── 厨余垃圾爬取.py │ └── 厨余垃圾类型.txt ├── 可回收物爬取 │ ├── 可回收物爬取.py │ └── 可回收物类型.txt ├── 图片类型制作 │ ├── 制作需要爬取的图片类型名称.py │ └── 源垃圾名称.txt └── 有害垃圾爬取 │ ├── 有害垃圾爬取.py │ └── 有害垃圾类型.txt └── README.md /Garbage_images_spyder/source_images_spider.py: -------------------------------------------------------------------------------- 1 | import requests # 模拟请求 2 | import json # 轻量级的数据交换格式,易于人阅读和编写 3 | from urllib import parse # 用于url的解析,合并,编码,解码 4 | import os # 用于对文件进行操作了模块 5 | import time # 时间模块 6 | 7 | 8 | class BaiduImageSpider(object): # 创建一个类 9 | def __init__(self): 10 | 11 | self.directory = r"F:\Python\爬虫代码\images_{}" # 存储目录 这里需要修改为自己希望保存的目录 {}不要丢 12 | self.json_count = 0 # 请求到的json文件数量(一个json文件包含30个图像文件) 13 | self.url = 'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=5179920884740494226&ipn=rj&ct' \ 14 | '=201326592&is=&fp=result&queryWord={' \ 15 | '}&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&word={' \ 16 | '}&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&nojc=&pn={' \ 17 | '}&rn=30&gsm=1e&1635054081427= ' 18 | self.header = { 19 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ' 20 | 'Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.30 ' 21 | } 22 | 23 | # 获取图像链接可回收物 24 | def get_image_link(self, url): 25 | list_image_link = [] # 建立一个图像列表 26 | strhtml = requests.get(url, headers=self.header) # Get方式获取网页数据 27 | jsonInfo = json.loads(strhtml.text) # json.loads 将已编码的 JSON 字符串解码为 Python 对象 28 | # 获取图像的链接存到了列表中 29 | for index in range(30): 30 | # 将jsonInfo中的数据放到列表中 31 | list_image_link.append(jsonInfo['data'][index]['thumbURL']) # 在列表末尾添加新的对象,将图像的链接放在列表中 32 | return list_image_link 33 | 34 | # 创建存储文件夹 35 | 36 | def create_directory(self, name): 37 | self.directory = self.directory.format(name) # 补全文件夹名称 38 | # 如果目录不存在则创建 39 | if not os.path.exists(self.directory): # 如果没有该路径 40 | os.makedirs(self.directory) # 使用os 模块创建该目录 41 | self.directory += r'\{}' 42 | 43 | # 下载图片 44 | def save_image(self, img_link, filename): 45 | # img_link为图像的链接 46 | res = requests.get(img_link, headers=self.header) # 模拟get请求 返回信息res 对象 47 | if res.status_code == 404: 48 | print(f"图片{img_link}下载出错------->") 49 | with open(filename, "wb") as f: # 使用二进制形式 覆盖写文件 50 | f.write(res.content) # requests模块中的content返回的是二进制的数据 51 | print("存储路径:" + filename) # 打印存储路径 52 | 53 | # 入口函数 54 | def run(self,name): 55 | searchName_parse = parse.quote(name) # 编码 将中文转换为url编码格式 56 | 57 | self.create_directory(name) # 调用创建文件夹的函数,根据查询内容创建文件 58 | 59 | pic_number = 0 # 图像数量 60 | for index in range(self.json_count): 61 | pn = (index + 1) * 30 # pn表示一组文件,一组包含30个图像内容 62 | # 图像网页链接大部分相同,输入的url编码(serrchName_parse)不同,获取的图像类型不同 63 | # 通过不同的 url 编码获取新的链接 64 | request_url = self.url.format(searchName_parse, searchName_parse, str(pn)) 65 | # str()函数将整数作为字符串,让其与两侧的字符串类型保持一致 66 | 67 | list_image_link = self.get_image_link(request_url) # 通过新的 url 调用图像链接函数,获取新的图像链接 68 | for link in list_image_link: 69 | pic_number += 1 70 | self.save_image(link, self.directory.format("img_"+name+"_"+str(pic_number) + '.jpg')) 71 | time.sleep(0.2) # 休眠0.2秒,防止封ip 72 | print(name + "图像下载成功") 73 | print("图片存入{}".format(self.directory)) 74 | 75 | 76 | if __name__ == '__main__': # 代码作为模块,在别的文件调用时,不会直接运行整个脚本 77 | filename = open("./refuse_name.txt", encoding="utf-8") 78 | str_all = filename.readlines() 79 | for i in str_all: 80 | line = i.strip("\n") 81 | print("正在爬取" + line + "类型的图片") 82 | spider = BaiduImageSpider() 83 | spider.json_count = 8 # 默认下载一组图片(30张) 84 | spider.run(line) 85 | filename.close() 86 | -------------------------------------------------------------------------------- /Garbage_images_spyder/source_refuse_name.txt: -------------------------------------------------------------------------------- 1 | 其他垃圾_PE塑料袋 PE塑料袋 2 | 其他垃圾_一次性杯子 一次性杯子 3 | 其他垃圾_厨房手套 厨房手套 4 | 其他垃圾_厨房抹布 厨房抹布 5 | 其他垃圾_口罩 口罩 6 | 其他垃圾_唱片 唱片 7 | 其他垃圾_干燥剂 干燥剂 8 | 其他垃圾_打火机 打火机 9 | 其他垃圾_搓澡巾 搓澡巾 10 | 其他垃圾_湿纸巾 湿纸巾 11 | 其他垃圾_滚筒纸 滚筒纸 12 | 其他垃圾_点燃的香烟 点燃的香烟 13 | 其他垃圾_眼镜 眼镜 14 | 厨余垃圾_地瓜 地瓜 15 | 厨余垃圾_大蒜 大蒜 16 | 厨余垃圾_梨 梨 17 | 厨余垃圾_橙子 橙子 18 | 厨余垃圾_瓜子壳 瓜子壳 19 | 厨余垃圾_番茄 番茄 20 | 厨余垃圾_白菜叶 白菜叶 21 | 厨余垃圾_苹果 苹果 22 | 厨余垃圾_菠萝 菠萝 23 | 厨余垃圾_西瓜皮 西瓜皮 24 | 厨余垃圾_辣椒 辣椒 25 | 厨余垃圾_香蕉皮 香蕉皮 26 | 可回收物_A4纸 A4纸 27 | 可回收物_一次性筷子 一次性筷子 28 | 可回收物_不锈钢管 不锈钢管 29 | 可回收物_充电头 充电头 30 | 可回收物_充电宝 充电宝 31 | 可回收物_充电牙刷 充电牙刷 32 | 可回收物_刀 刀 33 | 可回收物_剪刀 剪刀 34 | 可回收物_卡 卡 35 | 可回收物_呼啦圈 呼啦圈 36 | 可回收物_头戴式耳机 头戴式耳机 37 | 可回收物_帽子 帽子 38 | 可回收物_打气筒 打气筒 39 | 可回收物_扫地机器人 扫地机器人 40 | 可回收物_放大镜 放大镜 41 | 可回收物_易拉罐 易拉罐 42 | 可回收物_电动卷发棒 电动卷发棒 43 | 可回收物_盘子 盘子 44 | 可回收物_纸板 纸板 45 | 可回收物_订书机 订书机 46 | 可回收物_话筒 话筒 47 | 可回收物_路由器 路由器 48 | 可回收物_闹钟 闹钟 49 | 可回收物_鼠标 鼠标 50 | 有害垃圾_温度计 温度计 51 | 有害垃圾_纽扣电池 纽扣电池 -------------------------------------------------------------------------------- /Garbage_images_spyder/其他垃圾爬取/其他垃圾爬取.py: -------------------------------------------------------------------------------- 1 | import requests # 模拟请求 2 | import json # 轻量级的数据交换格式,易于人阅读和编写 3 | from urllib import parse # 用于url的解析,合并,编码,解码 4 | import os # 用于对文件进行操作了模块 5 | import time # 时间模块 6 | 7 | class BaiduImageSpider(object): # 创建一个类 8 | def __init__(self): 9 | 10 | self.directory = r"F:\Python\水果图片\{}" # 存储目录 这里需要修改为自己希望保存的目录 {}不要丢 11 | self.json_count = 0 # 请求到的json文件数量(一个json文件包含30个图像文件) 12 | self.url = 'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=5179920884740494226&ipn=rj&ct' \ 13 | '=201326592&is=&fp=result&queryWord={' \ 14 | '}&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&word={' \ 15 | '}&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&nojc=&pn={' \ 16 | '}&rn=30&gsm=1e&1635054081427= ' 17 | self.header = { 18 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ' 19 | 'Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.30 ' 20 | } 21 | 22 | # 获取图像链接可回收物 23 | def get_image_link(self, url): 24 | list_image_link = [] # 建立一个图像列表 25 | strhtml = requests.get(url, headers=self.header) # Get方式获取网页数据 26 | jsonInfo = json.loads(strhtml.text) # json.loads 将已编码的 JSON 字符串解码为 Python 对象 27 | # 获取图像的链接存到了列表中 28 | for index in range(30): 29 | # 将jsonInfo中的数据放到列表中 30 | list_image_link.append(jsonInfo['data'][index]['thumbURL']) # 在列表末尾添加新的对象,将图像的链接放在列表中 31 | return list_image_link 32 | 33 | # 创建存储文件夹 34 | 35 | def create_directory(self, name): 36 | self.directory = self.directory.format(name) # 补全文件夹名称 37 | # 如果目录不存在则创建 38 | if not os.path.exists(self.directory): # 如果没有该路径 39 | os.makedirs(self.directory) # 使用os 模块创建该目录 40 | self.directory += r'\{}' 41 | 42 | # 下载图片 43 | def save_image(self, img_link, filename): 44 | # img_link为图像的链接 45 | res = requests.get(img_link, headers=self.header) # 模拟get请求 返回信息res 对象 46 | if res.status_code == 404: 47 | print(f"图片{img_link}下载出错------->") 48 | with open(filename, "wb") as f: # 使用二进制形式 覆盖写文件 49 | f.write(res.content) # requests模块中的content返回的是二进制的数据 50 | print("存储路径:" + filename) # 打印存储路径 51 | 52 | # 入口函数 53 | def run(self,name): 54 | searchName_parse = parse.quote(name) # 编码 将中文转换为url编码格式 55 | 56 | self.create_directory(name) # 调用创建文件夹的函数,根据查询内容创建文件 57 | 58 | pic_number = 0 # 图像数量 59 | for index in range(self.json_count): 60 | pn = (index + 1) * 30 # pn表示一组文件,一组包含30个图像内容 61 | # 图像网页链接大部分相同,输入的url编码(serrchName_parse)不同,获取的图像类型不同 62 | # 通过不同的 url 编码获取新的链接 63 | request_url = self.url.format(searchName_parse, searchName_parse, str(pn)) 64 | # str()函数将整数作为字符串,让其与两侧的字符串类型保持一致 65 | 66 | list_image_link = self.get_image_link(request_url) # 通过新的 url 调用图像链接函数,获取新的图像链接 67 | for link in list_image_link: 68 | pic_number += 1 69 | self.save_image(link, self.directory.format("img1_"+name+"_"+str(pic_number) + '.jpg')) 70 | time.sleep(0.2) # 休眠0.2秒,防止封ip 71 | print(name + "图像下载成功") 72 | print("图片存入{}".format(self.directory)) 73 | 74 | 75 | if __name__ == '__main__': # 代码作为模块,在别的文件调用时,不会直接运行整个脚本 76 | filename = open("./其他垃圾类型.txt", encoding="utf-8") 77 | str_all = filename.readlines() 78 | for i in str_all: 79 | line = i.strip("\n") 80 | print("正在爬取" + line + "类型的图片") 81 | spider = BaiduImageSpider() 82 | spider.json_count = 4 # 默认下载一组图片(30张) 83 | spider.run(line) 84 | filename.close() 85 | -------------------------------------------------------------------------------- /Garbage_images_spyder/其他垃圾爬取/其他垃圾类型.txt: -------------------------------------------------------------------------------- 1 | 芒果 2 | 火龙果 -------------------------------------------------------------------------------- /Garbage_images_spyder/厨余垃圾爬取/厨余垃圾爬取.py: -------------------------------------------------------------------------------- 1 | import requests # 模拟请求 2 | import json # 轻量级的数据交换格式,易于人阅读和编写 3 | from urllib import parse # 用于url的解析,合并,编码,解码 4 | import os # 用于对文件进行操作了模块 5 | import time # 时间模块 6 | 7 | 8 | class BaiduImageSpider(object): # 创建一个类 9 | def __init__(self): 10 | 11 | self.directory = r"F:\Python\爬虫代码\厨余垃圾_{}" # 存储目录 这里需要修改为自己希望保存的目录 {}不要丢 12 | self.json_count = 0 # 请求到的json文件数量(一个json文件包含30个图像文件) 13 | self.url = 'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=5179920884740494226&ipn=rj&ct' \ 14 | '=201326592&is=&fp=result&queryWord={' \ 15 | '}&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&word={' \ 16 | '}&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&nojc=&pn={' \ 17 | '}&rn=30&gsm=1e&1635054081427= ' 18 | self.header = { 19 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ' 20 | 'Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.30 ' 21 | } 22 | 23 | # 获取图像链接可回收物 24 | def get_image_link(self, url): 25 | list_image_link = [] # 建立一个图像列表 26 | strhtml = requests.get(url, headers=self.header) # Get方式获取网页数据 27 | jsonInfo = json.loads(strhtml.text) # json.loads 将已编码的 JSON 字符串解码为 Python 对象 28 | # 获取图像的链接存到了列表中 29 | for index in range(30): 30 | # 将jsonInfo中的数据放到列表中 31 | list_image_link.append(jsonInfo['data'][index]['thumbURL']) # 在列表末尾添加新的对象,将图像的链接放在列表中 32 | return list_image_link 33 | 34 | # 创建存储文件夹 35 | 36 | def create_directory(self, name): 37 | self.directory = self.directory.format(name) # 补全文件夹名称 38 | # 如果目录不存在则创建 39 | if not os.path.exists(self.directory): # 如果没有该路径 40 | os.makedirs(self.directory) # 使用os 模块创建该目录 41 | self.directory += r'\{}' 42 | 43 | # 下载图片 44 | def save_image(self, img_link, filename): 45 | # img_link为图像的链接 46 | res = requests.get(img_link, headers=self.header) # 模拟get请求 返回信息res 对象 47 | if res.status_code == 404: 48 | print(f"图片{img_link}下载出错------->") 49 | with open(filename, "wb") as f: # 使用二进制形式 覆盖写文件 50 | f.write(res.content) # requests模块中的content返回的是二进制的数据 51 | print("存储路径:" + filename) # 打印存储路径 52 | 53 | # 入口函数 54 | def run(self,name): 55 | searchName_parse = parse.quote(name) # 编码 将中文转换为url编码格式 56 | 57 | self.create_directory(name) # 调用创建文件夹的函数,根据查询内容创建文件 58 | 59 | pic_number = 0 # 图像数量 60 | for index in range(self.json_count): 61 | pn = (index + 1) * 30 # pn表示一组文件,一组包含30个图像内容 62 | # 图像网页链接大部分相同,输入的url编码(serrchName_parse)不同,获取的图像类型不同 63 | # 通过不同的 url 编码获取新的链接 64 | request_url = self.url.format(searchName_parse, searchName_parse, str(pn)) 65 | # str()函数将整数作为字符串,让其与两侧的字符串类型保持一致 66 | 67 | list_image_link = self.get_image_link(request_url) # 通过新的 url 调用图像链接函数,获取新的图像链接 68 | for link in list_image_link: 69 | pic_number += 1 70 | self.save_image(link, self.directory.format("img1_"+name+"_"+str(pic_number) + '.jpg')) 71 | time.sleep(0.2) # 休眠0.2秒,防止封ip 72 | print(name + "图像下载成功") 73 | print("图片存入{}".format(self.directory)) 74 | 75 | 76 | if __name__ == '__main__': # 代码作为模块,在别的文件调用时,不会直接运行整个脚本 77 | filename = open("./厨余垃圾类型.txt", encoding="utf-8") 78 | str_all = filename.readlines() 79 | for i in str_all: 80 | line = i.strip("\n") 81 | print("正在爬取" + line + "类型的图片") 82 | spider = BaiduImageSpider() 83 | spider.json_count = 7 # 默认下载一组图片(30张) 84 | spider.run(line) 85 | filename.close() 86 | -------------------------------------------------------------------------------- /Garbage_images_spyder/厨余垃圾爬取/厨余垃圾类型.txt: -------------------------------------------------------------------------------- 1 | 地瓜 2 | 大蒜 3 | 梨 4 | 橙子 5 | 瓜子壳 6 | 番茄 7 | 白菜叶 8 | 苹果 9 | 菠萝 10 | 西瓜皮 11 | 辣椒 12 | 香蕉皮 -------------------------------------------------------------------------------- /Garbage_images_spyder/可回收物爬取/可回收物爬取.py: -------------------------------------------------------------------------------- 1 | import requests # 模拟请求 2 | import json # 轻量级的数据交换格式,易于人阅读和编写 3 | from urllib import parse # 用于url的解析,合并,编码,解码 4 | import os # 用于对文件进行操作了模块 5 | import time # 时间模块 6 | 7 | 8 | class BaiduImageSpider(object): # 创建一个类 9 | def __init__(self): 10 | 11 | self.directory = r"F:\Python\爬虫代码\可回收物_{}" # 存储目录 这里需要修改为自己希望保存的目录 {}不要丢 12 | self.json_count = 0 # 请求到的json文件数量(一个json文件包含30个图像文件) 13 | self.url = 'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=5179920884740494226&ipn=rj&ct' \ 14 | '=201326592&is=&fp=result&queryWord={' \ 15 | '}&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&word={' \ 16 | '}&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&nojc=&pn={' \ 17 | '}&rn=30&gsm=1e&1635054081427= ' 18 | self.header = { 19 | 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ' 20 | 'Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.30 ' 21 | } 22 | 23 | # 获取图像链接可回收物 24 | def get_image_link(self, url): 25 | list_image_link = [] # 建立一个图像列表 26 | strhtml = requests.get(url, headers=self.header) # Get方式获取网页数据 27 | jsonInfo = json.loads(strhtml.text) # json.loads 将已编码的 JSON 字符串解码为 Python 对象 28 | # 获取图像的链接存到了列表中 29 | for index in range(30): 30 | # 将jsonInfo中的数据放到列表中 31 | list_image_link.append(jsonInfo['data'][index]['thumbURL']) # 在列表末尾添加新的对象,将图像的链接放在列表中 32 | return list_image_link 33 | 34 | # 创建存储文件夹 35 | 36 | def create_directory(self, name): 37 | self.directory = self.directory.format(name) # 补全文件夹名称 38 | # 如果目录不存在则创建 39 | if not os.path.exists(self.directory): # 如果没有该路径 40 | os.makedirs(self.directory) # 使用os 模块创建该目录 41 | self.directory += r'\{}' 42 | 43 | # 下载图片 44 | def save_image(self, img_link, filename): 45 | # img_link为图像的链接 46 | res = requests.get(img_link, headers=self.header) # 模拟get请求 返回信息res 对象 47 | if res.status_code == 404: 48 | print(f"图片{img_link}下载出错------->") 49 | with open(filename, "wb") as f: # 使用二进制形式 覆盖写文件 50 | f.write(res.content) # requests模块中的content返回的是二进制的数据 51 | print("存储路径:" + filename) # 打印存储路径 52 | 53 | # 入口函数 54 | def run(self,name): 55 | searchName_parse = parse.quote(name) # 编码 将中文转换为url编码格式 56 | 57 | self.create_directory(name) # 调用创建文件夹的函数,根据查询内容创建文件 58 | 59 | pic_number = 0 # 图像数量 60 | for index in range(self.json_count): 61 | pn = (index + 1) * 30 # pn表示一组文件,一组包含30个图像内容 62 | # 图像网页链接大部分相同,输入的url编码(serrchName_parse)不同,获取的图像类型不同 63 | # 通过不同的 url 编码获取新的链接 64 | request_url = self.url.format(searchName_parse, searchName_parse, str(pn)) 65 | # str()函数将整数作为字符串,让其与两侧的字符串类型保持一致 66 | 67 | list_image_link = self.get_image_link(request_url) # 通过新的 url 调用图像链接函数,获取新的图像链接 68 | for link in list_image_link: 69 | pic_number += 1 70 | self.save_image(link, self.directory.format("img1_"+name+"_"+str(pic_number) + '.jpg')) 71 | time.sleep(0.2) # 休眠0.2秒,防止封ip 72 | print(name + "图像下载成功") 73 | print("图片存入{}".format(self.directory)) 74 | 75 | 76 | if __name__ == '__main__': # 代码作为模块,在别的文件调用时,不会直接运行整个脚本 77 | filename = open("./可回收物类型.txt", encoding="utf-8") 78 | str_all = filename.readlines() 79 | for i in str_all: 80 | line = i.strip("\n") 81 | print("正在爬取" + line + "类型的图片") 82 | spider = BaiduImageSpider() 83 | spider.json_count = 7 # 默认下载一组图片(30张) 84 | spider.run(line) 85 | filename.close() 86 | -------------------------------------------------------------------------------- /Garbage_images_spyder/可回收物爬取/可回收物类型.txt: -------------------------------------------------------------------------------- 1 | 头戴式耳机 2 | 帽子 3 | 打气筒 4 | 扫地机器人 5 | 放大镜 6 | 易拉罐 7 | 电动卷发棒 8 | 盘子 9 | 纸板 10 | 订书机 11 | 话筒 12 | 路由器 13 | 闹钟 14 | 鼠标 -------------------------------------------------------------------------------- /Garbage_images_spyder/图片类型制作/制作需要爬取的图片类型名称.py: -------------------------------------------------------------------------------- 1 | filename = open("./源垃圾名称.txt",encoding = "utf-8") 2 | 3 | str_all=filename.readlines() 4 | list_name=[] 5 | for i in str_all: 6 | c=i.split(r",") 7 | c.pop(-1) 8 | for str1 in c: 9 | for str2 in str1: 10 | if str2==r"'" or str2==r" ": 11 | str1=str1.replace(str2,"") 12 | list1=str1.split(r"_") 13 | list_name.append(list1[-1]) 14 | 15 | 16 | with open("./refuse_name.txt","w",encoding="utf-8") as file: 17 | for str3 in list_name: 18 | file.write(str3+"\n") 19 | 20 | 21 | print(list_name) 22 | filename.close() -------------------------------------------------------------------------------- /Garbage_images_spyder/图片类型制作/源垃圾名称.txt: -------------------------------------------------------------------------------- 1 | '其他垃圾_PE塑料袋', 2 | '其他垃圾_U型回形针', 3 | '其他垃圾_一次性杯子', 4 | '其他垃圾_一次性棉签', 5 | '其他垃圾_串串竹签', 6 | '其他垃圾_便利贴', 7 | '其他垃圾_创可贴', 8 | '其他垃圾_卫生纸', 9 | '其他垃圾_厨房手套', 10 | '其他垃圾_厨房抹布', 11 | '其他垃圾_口罩', 12 | '其他垃圾_唱片', 13 | '其他垃圾_图钉', 14 | '其他垃圾_大龙虾头', 15 | '其他垃圾_奶茶杯', 16 | '其他垃圾_干燥剂', 17 | '其他垃圾_彩票', 18 | '其他垃圾_打泡网', 19 | '其他垃圾_打火机', 20 | '其他垃圾_搓澡巾', 21 | '其他垃圾_果壳', 22 | '其他垃圾_毛巾', 23 | '其他垃圾_涂改带', 24 | '其他垃圾_湿纸巾', 25 | '其他垃圾_烟蒂', 26 | '其他垃圾_牙刷', 27 | '其他垃圾_电影票', 28 | '其他垃圾_电蚊香', 29 | '其他垃圾_百洁布', 30 | '其他垃圾_眼镜', 31 | '其他垃圾_眼镜布', 32 | '其他垃圾_空调滤芯', 33 | '其他垃圾_笔', 34 | '其他垃圾_胶带', 35 | '其他垃圾_胶水废包装', 36 | '其他垃圾_苍蝇拍', 37 | '其他垃圾_茶壶碎片', 38 | '其他垃圾_草帽', 39 | '其他垃圾_菜板', 40 | '其他垃圾_车票', 41 | '其他垃圾_酒精棉', 42 | '其他垃圾_防霉防蛀片', 43 | '其他垃圾_除湿袋', 44 | '其他垃圾_餐巾纸', 45 | '其他垃圾_餐盒', 46 | '其他垃圾_验孕棒', 47 | '其他垃圾_鸡毛掸', 48 | '厨余垃圾_八宝粥', 49 | '厨余垃圾_冰激凌', 50 | '厨余垃圾_冰糖葫芦', 51 | '厨余垃圾_咖啡', 52 | '厨余垃圾_圣女果', 53 | '厨余垃圾_地瓜', 54 | '厨余垃圾_坚果', 55 | '厨余垃圾_壳', 56 | '厨余垃圾_巧克力', 57 | '厨余垃圾_果冻', 58 | '厨余垃圾_果皮', 59 | '厨余垃圾_核桃', 60 | '厨余垃圾_梨', 61 | '厨余垃圾_橙子', 62 | '厨余垃圾_残渣剩饭', 63 | '厨余垃圾_水果', 64 | '厨余垃圾_泡菜', 65 | '厨余垃圾_火腿', 66 | '厨余垃圾_火龙果', 67 | '厨余垃圾_烤鸡', 68 | '厨余垃圾_瓜子', 69 | '厨余垃圾_甘蔗', 70 | '厨余垃圾_番茄', 71 | '厨余垃圾_秸秆杯', 72 | '厨余垃圾_秸秆碗', 73 | '厨余垃圾_粉条', 74 | '厨余垃圾_肉类', 75 | '厨余垃圾_肠', 76 | '厨余垃圾_苹果', 77 | '厨余垃圾_茶叶', 78 | '厨余垃圾_草莓', 79 | '厨余垃圾_菠萝', 80 | '厨余垃圾_菠萝蜜', 81 | '厨余垃圾_萝卜', 82 | '厨余垃圾_蒜', 83 | '厨余垃圾_蔬菜', 84 | '厨余垃圾_薯条', 85 | '厨余垃圾_薯片', 86 | '厨余垃圾_蘑菇', 87 | '厨余垃圾_蛋', 88 | '厨余垃圾_蛋挞', 89 | '厨余垃圾_蛋糕', 90 | '厨余垃圾_豆', 91 | '厨余垃圾_豆腐', 92 | '厨余垃圾_辣椒', 93 | '厨余垃圾_面包', 94 | '厨余垃圾_饼干', 95 | '厨余垃圾_鸡翅', 96 | '可回收物_不锈钢制品', 97 | '可回收物_乒乓球拍', 98 | '可回收物_书', 99 | '可回收物_体重秤', 100 | '可回收物_保温杯', 101 | '可回收物_保鲜膜内芯', 102 | '可回收物_信封', 103 | '可回收物_充电头', 104 | '可回收物_充电宝', 105 | '可回收物_充电牙刷', 106 | '可回收物_充电线', 107 | '可回收物_凳子', 108 | '可回收物_刀', 109 | '可回收物_包', 110 | '可回收物_单车', 111 | '可回收物_卡', 112 | '可回收物_台灯', 113 | '可回收物_吊牌', 114 | '可回收物_吹风机', 115 | '可回收物_呼啦圈', 116 | '可回收物_地球仪', 117 | '可回收物_地铁票', 118 | '可回收物_垫子', 119 | '可回收物_塑料制品', 120 | '可回收物_太阳能热水器', 121 | '可回收物_奶粉桶', 122 | '可回收物_尺子', 123 | '可回收物_尼龙绳', 124 | '可回收物_布制品', 125 | '可回收物_帽子', 126 | '可回收物_手机', 127 | '可回收物_手电筒', 128 | '可回收物_手表', 129 | '可回收物_手链', 130 | '可回收物_打包绳', 131 | '可回收物_打印机', 132 | '可回收物_打气筒', 133 | '可回收物_扫地机器人', 134 | '可回收物_护肤品空瓶', 135 | '可回收物_拉杆箱', 136 | '可回收物_拖鞋', 137 | '可回收物_插线板', 138 | '可回收物_搓衣板', 139 | '可回收物_收音机', 140 | '可回收物_放大镜', 141 | '可回收物_日历', 142 | '可回收物_暖宝宝', 143 | '可回收物_望远镜', 144 | '可回收物_木制切菜板', 145 | '可回收物_木桶', 146 | '可回收物_木棍', 147 | '可回收物_木质梳子', 148 | '可回收物_木质锅铲', 149 | '可回收物_木雕', 150 | '可回收物_枕头', 151 | '可回收物_果冻杯', 152 | '可回收物_桌子', 153 | '可回收物_棋子', 154 | '可回收物_模具', 155 | '可回收物_毯子', 156 | '可回收物_水壶', 157 | '可回收物_水杯', 158 | '可回收物_沙发', 159 | '可回收物_泡沫板', 160 | '可回收物_灭火器', 161 | '可回收物_灯罩', 162 | '可回收物_烟灰缸', 163 | '可回收物_热水瓶', 164 | '可回收物_燃气灶', 165 | '可回收物_燃气瓶', 166 | '可回收物_玩具', 167 | '可回收物_玻璃制品', 168 | '可回收物_玻璃器皿', 169 | '可回收物_玻璃壶', 170 | '可回收物_玻璃球', 171 | '可回收物_瑜伽球', 172 | '可回收物_电动剃须刀', 173 | '可回收物_电动卷发棒', 174 | '可回收物_电子秤', 175 | '可回收物_电熨斗', 176 | '可回收物_电磁炉', 177 | '可回收物_电脑屏幕', 178 | '可回收物_电视机', 179 | '可回收物_电话', 180 | '可回收物_电路板', 181 | '可回收物_电风扇', 182 | '可回收物_电饭煲', 183 | '可回收物_登机牌', 184 | '可回收物_盒子', 185 | '可回收物_盖子', 186 | '可回收物_盘子', 187 | '可回收物_碗', 188 | '可回收物_磁铁', 189 | '可回收物_空气净化器', 190 | '可回收物_空气加湿器', 191 | '可回收物_笼子', 192 | '可回收物_箱子', 193 | '可回收物_纸制品', 194 | '可回收物_纸牌', 195 | '可回收物_罐子', 196 | '可回收物_网卡', 197 | '可回收物_耳套', 198 | '可回收物_耳机', 199 | '可回收物_衣架', 200 | '可回收物_袋子', 201 | '可回收物_袜子', 202 | '可回收物_裙子', 203 | '可回收物_裤子', 204 | '可回收物_计算器', 205 | '可回收物_订书机', 206 | '可回收物_话筒', 207 | '可回收物_豆浆机', 208 | '可回收物_路由器', 209 | '可回收物_轮胎', 210 | '可回收物_过滤网', 211 | '可回收物_遥控器', 212 | '可回收物_量杯', 213 | '可回收物_金属制品', 214 | '可回收物_钉子', 215 | '可回收物_钥匙', 216 | '可回收物_铁丝球', 217 | '可回收物_铅球', 218 | '可回收物_铝制用品', 219 | '可回收物_锅', 220 | '可回收物_锅盖', 221 | '可回收物_键盘', 222 | '可回收物_镊子', 223 | '可回收物_闹铃', 224 | '可回收物_雨伞', 225 | '可回收物_鞋', 226 | '可回收物_音响', 227 | '可回收物_餐具', 228 | '可回收物_餐垫', 229 | '可回收物_饰品', 230 | '可回收物_鱼缸', 231 | '可回收物_鼠标', 232 | '有害垃圾_指甲油', 233 | '有害垃圾_杀虫剂', 234 | '有害垃圾_温度计', 235 | '有害垃圾_灯', 236 | '有害垃圾_电池', 237 | '有害垃圾_电池板', 238 | '有害垃圾_纽扣电池', 239 | '有害垃圾_胶水', 240 | '有害垃圾_药品包装', 241 | '有害垃圾_药片', 242 | '有害垃圾_药瓶', 243 | '有害垃圾_药膏', 244 | '有害垃圾_蓄电池', 245 | '有害垃圾_血压计' -------------------------------------------------------------------------------- /Garbage_images_spyder/有害垃圾爬取/有害垃圾爬取.py: -------------------------------------------------------------------------------- 1 | import requests # 模拟请求 2 | import json # 轻量级的数据交换格式,易于人阅读和编写 3 | from urllib import parse # 用于url的解析,合并,编码,解码 4 | import os # 用于对文件进行操作了模块 5 | import time # 时间模块 6 | 7 | 8 | class BaiduImageSpider(object): # 创建一个类 9 | def __init__(self): 10 | 11 | self.directory = r"F:\Python\爬虫代码\有害垃圾_{}" # 存储目录 这里需要修改为自己希望保存的目录 {}不要丢 12 | self.json_count = 0 # 请求到的json文件数量(一个json文件包含30个图像文件) 13 | self.url = 'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=5179920884740494226&ipn=rj&ct' \ 14 | '=201326592&is=&fp=result&queryWord={' \ 15 | '}&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&word={' \ 16 | '}&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&nojc=&pn={' \ 17 | '}&rn=30&gsm=1e&1635054081427= ' 18 | self.header = { 19 | 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ' 20 | 'Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.30 ' 21 | } 22 | 23 | # 获取图像链接可回收物 24 | def get_image_link(self, url): 25 | list_image_link = [] # 建立一个图像列表 26 | strhtml = requests.get(url, headers=self.header) # Get方式获取网页数据 27 | jsonInfo = json.loads(strhtml.text) # json.loads 将已编码的 JSON 字符串解码为 Python 对象 28 | # 获取图像的链接存到了列表中 29 | for index in range(30): 30 | # 将jsonInfo中的数据放到列表中 31 | list_image_link.append(jsonInfo['data'][index]['thumbURL']) # 在列表末尾添加新的对象,将图像的链接放在列表中 32 | return list_image_link 33 | 34 | # 创建存储文件夹 35 | 36 | def create_directory(self, name): 37 | self.directory = self.directory.format(name) # 补全文件夹名称 38 | # 如果目录不存在则创建 39 | if not os.path.exists(self.directory): # 如果没有该路径 40 | os.makedirs(self.directory) # 使用os 模块创建该目录 41 | self.directory += r'\{}' 42 | 43 | # 下载图片 44 | def save_image(self, img_link, filename): 45 | # img_link为图像的链接 46 | res = requests.get(img_link, headers=self.header) # 模拟get请求 返回信息res 对象 47 | if res.status_code == 404: 48 | print(f"图片{img_link}下载出错------->") 49 | with open(filename, "wb") as f: # 使用二进制形式 覆盖写文件 50 | f.write(res.content) # requests模块中的content返回的是二进制的数据 51 | print("存储路径:" + filename) # 打印存储路径 52 | 53 | # 入口函数 54 | def run(self,name): 55 | searchName_parse = parse.quote(name) # 编码 将中文转换为url编码格式 56 | 57 | self.create_directory(name) # 调用创建文件夹的函数,根据查询内容创建文件 58 | 59 | pic_number = 0 # 图像数量 60 | for index in range(self.json_count): 61 | pn = (index + 1) * 30 # pn表示一组文件,一组包含30个图像内容 62 | # 图像网页链接大部分相同,输入的url编码(serrchName_parse)不同,获取的图像类型不同 63 | # 通过不同的 url 编码获取新的链接 64 | request_url = self.url.format(searchName_parse, searchName_parse, str(pn)) 65 | # str()函数将整数作为字符串,让其与两侧的字符串类型保持一致 66 | 67 | list_image_link = self.get_image_link(request_url) # 通过新的 url 调用图像链接函数,获取新的图像链接 68 | for link in list_image_link: 69 | pic_number += 1 70 | self.save_image(link, self.directory.format("img1_"+name+"_"+str(pic_number) + '.jpg')) 71 | time.sleep(0.2) # 休眠0.2秒,防止封ip 72 | print(name + "图像下载成功") 73 | print("图片存入{}".format(self.directory)) 74 | 75 | 76 | if __name__ == '__main__': # 代码作为模块,在别的文件调用时,不会直接运行整个脚本 77 | filename = open("./有害垃圾类型.txt", encoding="utf-8") 78 | str_all = filename.readlines() 79 | for i in str_all: 80 | line = i.strip("\n") 81 | print("正在爬取" + line + "类型的图片") 82 | spider = BaiduImageSpider() 83 | spider.json_count = 7 # 默认下载一组图片(30张) 84 | spider.run(line) 85 | filename.close() 86 | -------------------------------------------------------------------------------- /Garbage_images_spyder/有害垃圾爬取/有害垃圾类型.txt: -------------------------------------------------------------------------------- 1 | 温度计 2 | 纽扣电池 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 垃圾分类图片数据集(120类) 2 | ## GarbageSortingPictureDataSet 3 | 项目说明:根据国内现有垃圾分类标准使用网络爬虫的方式进行数据采集,采集的目标URL为百度图片。 4 | 数据集包含`可回收物`、`厨余垃圾`、`其他垃圾`和`有害垃圾`四个大类,其他垃圾_PE塑料袋、其他垃圾_一次性棉签、其他垃圾_唱片、其他垃圾_打火机、其他垃圾_滚筒纸等`120`个小类共计`39348`张,可用于不同的深度学习模型训练。数据各类别的图片数量如图 5 | 6 | 7 | 8 | 9 | ![image](https://user-images.githubusercontent.com/131667281/234495204-97142548-b47f-4027-84d2-ade5be62bafa.png) 10 | 11 | 12 | 在`Garbage_images_spyder`目录下包含着不同大类的垃圾图片爬取代码,并且不同的图片名称通过图片类型制作目录下的代码自动创建。读者可以自行研究并进行修改,爬取更多类型的图片进行研究。 13 | 14 | DataSet由于GitHub仓库容量的问题无法全部上传,为保证数据集的完整性,数据单独放置于百度网盘中 15 | 16 | `link`: 17 | 18 | 链接:https://pan.baidu.com/s/1LBn_H9dvb0VaBGgpVLKRRA?pwd=rk5x 19 | 提取码:rk5x 20 | 21 | --------------------------------------------------------------------------------