爬取图片,并按比例划分数据集

上课老师布置的作业,做完保存下来。
(1)批量爬取不同的10个明星的图片各100张;

(2)每个明星的图片放一个文件夹,并按“name_###.jpg”的格式命名,如:liudehua/liudehua_000.jpg;

(3)对每个明星的图片,按7:2:1的比例进行划分train、validation、test数据集,分别将图片名称保存入train.txt、validation.txt、test.txt;

代码实现

# -*- coding: utf-8 -*-
import sys
import os
import re
import uuid
import requests
import random# 从edge浏览器获得的访问image.baidu.com时的header,可以让网站认为是用户通过浏览器在访问
HEADERS = {'Accept':'text/html, application/xhtml+xml, image/jxr, */*','Accept - Encoding':'gzip, deflate','Accept-Language':'zh-Hans-CN, zh-Hans; q=0.5','Connection':'Keep-Alive','Host':'image.baidu.com','User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063'
}def download_image(key_word, maximum_download, maximum_failure, headers=HEADERS):"""根据指定的关键词和最大下载数量,从百度图片搜索并下载图片Args:key_word: 要搜索的关键词maximum_download: 最大下载数量maximum_failure: 最大失败次数headers: 请求头"""  download_sum = 0 download_index = 0failure_sum = 0str_gsm = '00'# 把每个明显的图片存放在单独一个文件夹中save_path = './face_image' + '/' + key_wordif not os.path.exists(save_path):os.makedirs(save_path)while download_sum < maximum_download and failure_sum < maximum_failure:str_pn = str(download_index)# 定义百度图片的搜索URL# url = 'http://image.baidu.com/search/index?tn=baiduimage&ie=utf-8&word=%s&pn=%s&gsm=%s&ct=&ic=0&lm=-1&width=0&height=0' % (url = 'http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=%s&pn=%s&gsm=%s&ct=&ic=0&lm=-1&width=0&height=0' % (key_word, str_pn, str_gsm)print("page url: %s" % (url))try:# 获取当前页面的源码result = requests.get(url, timeout=10, headers=headers).text  # timeout请求超时时间单位为秒# 获取当前页面的图片URLimg_urls = re.findall('"objURL":"(.*?)",', result, re.S)  #匹配字符串,以列表的形式返回匹配到的字符 re.S参数将这个字符串作为一个整体if len(img_urls) < 1:raise ValueError('无法搜索到图片,或URL无效')break# 从图片URL中逐个下载for img_url in img_urls:# 获取图片内容# print("image url: %s" % (img_url))img = requests.get(img_url, timeout=30)m = str(download_index)n = m.zfill(3)img_name = save_path + '/' +key_word+'_'+ n + '.jpg'# print("img name: %s" % (img_name))# 保存图片with open(img_name, 'wb') as f:f.write(img.content)# with open('image_url_list.txt', 'a+', encoding='utf-8') as f:#     f.write(img_name + '\t' + img_url + '\n')download_sum += 1download_index += 1# print('第%d张图片%s已下载' % (download_sum, img_name))if download_sum >= maximum_download:breakexcept Exception as e:print('【错误】当前图片无法下载,%s' % e)failure_sum += 1download_index += 1continueprint('下载完成')def main():# 最大图片下载数量和最大允许失败次数max_download = 100max_failure = 10# 输入想搜索的图片的名字key_word = ['mayun','wangfei','liuxiang','tongliya','luhan','huangbo','zhaobenshan','songxiaobao','liudehua','zhoujielun']# key_word = str(input('输入想搜索的图片名称: '))# 使用明星的名字开始下载图片for i in key_word:download_image(i, max_download, max_failure)print('全部图片已下载完成')for i in key_word:dataset = []dataset1 = []test = []File_path = './face_image' + '/' + ifor path in os.listdir(File_path):dataset.append(path)train = random.sample(dataset,70)for image_30 in dataset:if image_30 not in train:dataset1.append(image_30)validation= random.sample(dataset1,20)for image_10 in dataset1:if image_10 not in validation:test.append(image_10)  with open('train.txt','a+', encoding='utf-8') as f:for image_path in train:f.write(image_path + '\n')  with open('validation.txt','a+', encoding='utf-8') as f:for image_path in validation:f.write(image_path + '\n')  with open('test.txt','a+', encoding='utf-8') as f:for image_path in test:f.write(image_path + '\n')print(' 保存完成!')     if __name__ == '__main__':main()

爬取图片,并按比例划分数据集相关推荐

  1. 图片的批量下载 和 爬虫爬取图片数据集

    图片的批量下载 和 爬虫爬取图片数据集 1.图片的批量下载 1.图片的批量下载 数据集是深度学习的一切,没有数据集它什么也不是,现在你知道数据集很重要了吧 代码: ''' 项目名称:爬取公章数据 创建 ...

  2. 划分数据集代码(按照4:1的比例)以及根据各自文件名写入txt文件

    会将图片分到两个文件夹中: #include <opencv2/opencv.hpp> #include "opencv2/features2d.hpp" #inclu ...

  3. 实验过程分析1——数据集为什么需要按一定比例划分

    0 写在前面 之前,每次看完文献都觉得"嗯,这玩应好简单啊",可是真到上手跑代码做实验的时候,才发现有好多之前读文献没有读懂的问题. 1 一个实验中发现--为什么在训练过程中一定要 ...

  4. python从date目录导入数据集_使用python划分数据集

    无论是训练机器学习或是深度学习,第一步当然是先划分数据集啦,今天小白整理了一些划分数据集的方法,希望大佬们多多指教啊,嘻嘻~ 首先看一下数据集的样子,flower_data文件夹下有四个文件夹,每个文 ...

  5. Python机器学习:随机抽样函数sample()划分数据集

    不用调包也能便捷地划分数据集,用随机抽样sample()函数两行代码可以轻松搞定. #划分训练集 train_data = data.sample(frac = 0.8, random_state = ...

  6. Python机器学习:train_test_split()划分数据集

    调用sklearn里面的model_selection包的train_test_split()函数可以一行代码划分好数据集. 包名: from sklearn.model_selection impo ...

  7. 循环爬取图片_Java爬取简单的网页内容和图片

    Java爬取简单的网页内容和图片 根据java网络编程相关的内容,使用jdk提供的相关类可以得到url对应网页的html页面代码. 针对得到的html代码,通过使用正则表达式即可得到我们想要的内容. ...

  8. python爬取图片的库_16-python爬虫之Requests库爬取海量图片

    Requests 是一个 Python 的 HTTP 客户端库. Request支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动响应内容的编码,支持国际化的URL和P ...

  9. 决策树算法(四)——选取最佳特征划分数据集

    写在前面的话 可怜了我这个系列的博客,写的这么好,花了很多心思去写的,却没有人知道欣赏.就像我这么好也没有人懂得欣赏,哈哈哈,我好不要脸... 如果您有任何地方看不懂的,那一定是我写的不好,请您告诉我 ...

最新文章

  1. 您的手机上未安装应用程序 android 点击快捷方式提示未安装程序的解决
  2. Web API应用架构设计分析(2)
  3. 【玩转MLS系列】基础教程
  4. 2021年提升效率的7个新vue实战技巧!
  5. gorm存指针数据_C语言重点——指针篇(一篇让你完全搞懂指针)
  6. CMOS与TTL(下)
  7. QT学习 实时显示时间
  8. L1-5 不变初心数 (15 分)(C/C++)
  9. html都有哪些事件,HTML有哪些事件属性?
  10. 霹雳吧啦Wz语义分割学习笔记P2
  11. 决策中心:构建企业长期战略竞争力
  12. 2020下半年新机最新消息_2020下半年3款重磅新机:三星Note20被吹爆,华为Mate40差点意思...
  13. 介质访问控制MAC以及ALOHA协议
  14. 用python开发一个炸金花小游戏,注意别玩上瘾了~~(附完整源码)
  15. ip地址的概念和作用
  16. sd和sem啥区别_SD与SEM有区别吗
  17. 垃圾的Android-ListView-setEmptyView
  18. 报数游戏(2)--【英雄会】
  19. qcc304x笔记之ota升级(十)
  20. 《量化金融R语言初级教程》一1.2 对英国房屋价格建模并预测

热门文章

  1. 《动手学深度学习(PYTORCH版)》第3章引入“d2lzh_pytorch”包报错:No module named ‘torchtext’
  2. mysql缓存一致性,缓存与数据库一致性保证
  3. Springmvc中文乱码问题
  4. 已有一个排好序的数组,由键盘输入一个数,要求按原来的排序规律将其插入到数组中.
  5. 点微同城小程序配置教程及提交审核包过审经验分享
  6. 如何在服务器上快速克隆虚拟机,制作虚拟机模板快速克隆Linux虚拟机
  7. 五行各500字,2位字符串组合,数据量大而采取分段输出表格形式方程式
  8. storm是java还是python_Storm概念学习系列之什么是实时流计算?
  9. 关于AI,值得推荐的五本好书
  10. linux下的office 速度慢,Microsoft office2016打开很慢解决