京东商品爬虫

从https://list.jd.com/list.html?cat=670%2C671%2C673&page=1&s=57&click=0站点进行商品图片爬虫
分别爬取手机,pad,笔记本和台式机商品图片各1万张

#爬虫代码
import re
import requests
from multiprocessing.pool import Pool
from lxml import etree
import time#爬取每页商品图片url
def crawl(url, page):headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36"}text = requests.get(url, headers=headers).texthtml = etree.HTML(text)img_urls = html.xpath("//div[@class='gl-i-wrap']/div[@class='p-img']/a/img/@data-lazy-img")img_urls = list(map(lambda url: "http:" + url, img_urls))return img_urls#下载图片到本地方法
def download_img_multipro(img_down_param):file_path = "./data/com_img/" + str(img_down_param[0]) +".jpg"with open(file_path, "wb") as f:f.write(requests.get(img_down_param[1]).content)print(file_path + "下载完成")
#主程序
if __name__ == '__main__':n = 0#循环抓取三百多页for i in range(1, 316):#构造urlurl = "https://list.jd.com/list.html?cat=670%2C671%2C673&page={}&s=57&click=0".format(i)#获取该页的商品url列表img_urls = crawl(url, i)#定义图片命名数字img_count = len(img_urls) + nimg_name = [j for j in range(n, img_count)]n = img_count#构造下载图片的实参,存储路径和图片url组成的元组组成的列表img_down_param = zip(img_name, img_urls)#创建进程池pool = Pool(processes=5)#启动多进程下载pool.map(download_img_multipro, img_down_param)#封闭进程池并使主进程阻塞,等待子进程结束pool.close()pool.join()

爬取结果



抓取的四种类别图片分别存储在同一相对路径的四个文件夹,分别代表台式机,笔记本,pad和手机

制作数据集

利用opencv将单张图片的RGB像素值读取出来,用一个向量保存(注意这里用opencv读取的像素值实际为BGR即蓝绿红)
全部商品图片均为220 * 220 像素,三通道。
若将单个图片用一个向量保存,则该向量维度为 220 * 220 * 3 = 145200 显然这个向量过大
这里考虑利用opencv将每张图片压缩至100 * 100 ,此时所需向量维度为30000,可以接受
代码如下:

def compress_dataset():"""压缩图片数据到100 * 100:return:"""#四个迭代器用于遍历四个文件夹num_phone = range(9549)num_pad = range(9300)num_notebook = range(9360)num_computer = range(9025)globle_num = 0#遍历手机图片文件夹for i in num_phone:#构造图片文件路径+文件名file_path = "./dataset/phone_img/" + str(i) + ".jpg"#处理异常,同时将无效图片剔除try:#读出原图片np_3_img = cv2.imread(file_path)#压缩图片out = cv2.resize(np_3_img, dsize=(100, 100), interpolation=cv2.INTER_AREA)#将压缩后的图片写道本地保存cv2.imwrite("./dataset/compress_dataset/phone_img/" + str(globle_num) + ".jpg", out)globle_num += 1print("压缩写入成功", globle_num)except:print("出现异常")globle_num = 0for i in num_pad:try:file_path = "./dataset/pad_img/" + str(i) + ".jpg"np_3_img = cv2.imread(file_path)out = cv2.resize(np_3_img, dsize=(100, 100), interpolation=cv2.INTER_AREA)cv2.imwrite("./dataset/compress_dataset/pad_img/" + str(globle_num) + ".jpg", out)globle_num += 1print("压缩写入成功")except:print("出现异常")globle_num = 0for i in num_notebook:try:file_path = "./dataset/notebook_com_img/" + str(i) + ".jpg"np_3_img = cv2.imread(file_path)out = cv2.resize(np_3_img, dsize=(100, 100), interpolation=cv2.INTER_AREA)cv2.imwrite("./dataset/compress_dataset/notebook_com_img/" + str(globle_num) + ".jpg", out)globle_num += 1print("压缩写入成功")except:print("出现异常")globle_num = 0     for i in num_computer:try:file_path = "./dataset/computer_img/" + str(i) + ".jpg"np_3_img = cv2.imread(file_path)out = cv2.resize(np_3_img, dsize=(100, 100), interpolation=cv2.INTER_AREA)cv2.imwrite("./dataset/compress_dataset/computer_img/" + str(globle_num) + ".jpg", out)globle_num += 1print("压缩写入成功")except:print("出现异常")

此时将全部图片压缩成100 * 100像素并保存至本地

利用卷积神经网络进行图像分类

#构建网络
from keras import layers
from keras import modelsmodel = models.Sequential()
#卷积层1 输入张量为图像的像素矩阵
model.add(layers.Conv2D(32,(3,3), activation="relu", input_shape=(110,110,3)))
#池化层1,最大池化
model.add(layers.MaxPooling2D((2,2)))
#卷积层2
model.add(layers.Conv2D(64,(3,3),activation="relu"))
#池化层2
model.add(layers.MaxPooling2D((2,2)))
#卷积层3
model.add(layers.Conv2D(128,(3,3),activation="relu"))
#池化层3
model.add(layers.MaxPooling2D((2,2)))
#卷积层4
model.add(layers.Conv2D(128,(3,3),activation="relu"))
#池化层4
model.add(layers.MaxPooling2D((2,2)))
#将输出张量拉平
model.add(layers.Flatten())
#随机删去此层一般的参数以防止过拟合
model.add(layers.Dropout(0.5))
#全连接层
model.add(layers.Dense(512, activation="relu"))
#输出层,softmax激活,输出概率值
model.add(layers.Dense(4, activation="softmax"))

编译网络

#编译模型
from keras import optimizers
#使用分类交叉熵损失函数,准确率作衡量指标
model.compile(loss="categorical_crossentropy",optimizer=optimizers.RMSprop(lr=1e-4),metrics=["accuracy"])

数据预处理

利用keras图像数据生成器将本地路径的图形数据读取出来,返回生成器给网络训练使用

#数据预处理
from keras.preprocessing.image import ImageDataGenerator#存储数据的路径
train_img_dir = "E:/code/python deeplearning/dataset/compress_dataset/train"
validation_img_dir = "E:\\code\\python deeplearning\\dataset\\compress_dataset\\validation"#数据生成器,将原像素值压缩到0-1之间并对训练数据进行数据增强
train_datagen = ImageDataGenerator(rescale=1./255,rotation_range=40,width_shift_range=0.2,height_shift_range=0.2,shear_range=0.2,zoom_range=0.2,horizontal_flip=True
)
test_datagen = ImageDataGenerator(rescale=1./255,)#训练数据生成器
train_generator = train_datagen.flow_from_directory(train_img_dir,target_size=(110,110),batch_size=128,class_mode="categorical"
)#验证数据生成器
validation_generator = test_datagen.flow_from_directory(validation_img_dir,target_size=(110,110),batch_size=128,class_mode="categorical"
)


训练集共三万多张,验证集五千多张

模型训练

将数据生成器传给模型训练,批量大小为128,训练一代共250个批次,验证共40个批次,共训练5轮

history = model.fit_generator(train_generator,steps_per_epoch=250,epochs=5,validation_data=validation_generator,validation_steps=40
)


结果显示,训练集准确率达到近75%,验证集准确率达到近90%。结果表现良好
验证集准确率高于训练集是由于模型做了较强的防止过拟合操作,比如随机删去一般网络参数,作正则化惩罚项等,所以在训练集上学习速度较慢,模型过拟合的速度也很慢,所有最终在验证集上表现更好,这也符合模型的训练初衷

最终测试模型

#生成测试数据
test_datagen = ImageDataGenerator(rescale=1./255,)
test_img_dir = "E:\\code\\python deeplearning\\dataset\\compress_dataset\\test"test_generator = test_datagen.flow_from_directory(test_img_dir,target_size=(110,110),batch_size=128,class_mode="categorical"
)

传入测试数据测试

res = model.evaluate_generator(test_generator, steps=40)


结果显示,达到近90的测试准确率

京东商品图片爬虫+keras图像分类相关推荐

  1. python爬取京东商品图片_python利用urllib实现爬取京东网站商品图片的爬虫实例

    本例程使用urlib实现的,基于python2.7版本,采用beautifulsoup进行网页分析,没有第三方库的应该安装上之后才能运行,我用的IDE是pycharm,闲话少说,直接上代码! # -* ...

  2. 京东商品图片下载工具1.0 springboot版

    说明:需要JAVA环境,自己安装,不会?百度:jdk安装 下载图片全部高清原图,这种工具网上都是收费的 傻瓜式点击一键启动.bat 加载完毕即可使用 浏览器访问 http://127.0.0.1:16 ...

  3. php 采集 京东 图片,京东商品图片采集详细教程

    本文介绍采集使用八爪鱼7.0采集京东商品图片的方法:首先将京东商品搜索结果网页中图片的URL采集下来,再通过八爪鱼专用的图片批量下载工具,将采集到的图片URL中的图片,下载并保存到本地电脑中. 采集网 ...

  4. 京东商品图片 自动下载 抓取 c# 爬虫

         该下载工具可以批量或指定单个商品进行商品图片下载.底层采用HtmlAgilityPack库来解析html,web控件采用了webbrower控件.可以做为爬虫的初级入门工具进行代码研究. 工 ...

  5. python爬虫实践-爬取京东商品图片

    这段时间,因为疫情在家无聊,想起了网络爬虫,之前有写过使用requests库,又学了下使用urllib库,在这里记录下学习过程. 首先使用的IDE是pycharm,解释器版本3. 第一步:分析某东的u ...

  6. 京东商品图片要怎么采集?下图高手来教你

    现在开商城的人非常多,很多都是需要在网上采集商品,然后在自己的商城中发布! 如何采集这些商品,其实市场也有很多的软件和插件,但是大多数都只是采集某一种,如果你需要的商品种类比较多,那么就需要多种插件, ...

  7. 【Python爬虫】 爬取京东商品图片并下载

    1. 引入库 import requests from lxml import etree 2. 请求数据(headers 的作用是将请求伪装成浏览器的请求,可以跳过简单的爬虫拦截) url = &q ...

  8. java爬虫京东商品,Java爬虫实现爬取京东上的手机搜索页面 HttpCliient+Jsoup

    1.需求及配置 需求:爬取京东手机搜索页面的信息,记录各手机的名称,价格,评论数等,形成一个可用于实际分析的数据表格. 使用maven项目,log4j记录日志,日志仅导出到控制台. maven依赖如下 ...

  9. 谷歌浏览器插件最新版 v0.2.0 抓取1688、京东 商品图片|文描|视频|规格|属性等信息 并打包下载

    1.使用说明 有问题 vx: txalia 1.下载谷歌浏览器插件 http://file.txali.com/file/cola_shop_helper_0.2.0.zip 2.安装插件 1.解压下 ...

最新文章

  1. python 深度 视差 计算_开源双目视觉BM算法-Matlab/Python/Javascript
  2. win10安装oracle 11g最新亲身经历操作记录
  3. libzdb 连接mysql,数据库连接池库libzdb使用教程
  4. JSP--(使用请求转发的动作标识jsp:forward)
  5. MAC使用homeBrew安装Redis
  6. eclipse插件开发(三) 简易4页签编辑器(源码 | 设计 | JS | CSS)配色修复JS多行注释问题
  7. bzoj1854 [Scoi2010]游戏
  8. 嵌入式系统功能需求分析_嵌入式系统开发流程及前景分析
  9. $.ajax()常用属性
  10. centos中service命令与/etc/init.d的关系以及centos7的变化
  11. linux下远程桌面连接工具,linux远程连接windows工具(tsclient 远程桌面)
  12. 大三学生前端实习经验分享
  13. 【Unity】在Inspector上显示自定义的位掩码枚举(Flags)
  14. 在windows和Linux上安装ImageMagick与jmagick,Maven配置、Java图片压缩代码(整理网上、结合自己情况、编写出来的新安装方式)
  15. android ro.boot.mac,Android Verified Boot浅知分享
  16. c语言 L1-009 N个数求和 (20分)
  17. 学习 Python 数学模块之 为什么我们需要使用数学模块
  18. python pdf报告_利用python设计PDF报告,jinja2,whtmltopdf,matplotlib,pandas
  19. mac-mini系统安装
  20. 【日拱一卒行而不辍20221010】自制操作系统

热门文章

  1. ThinkpadE550升级固态硬盘和内存
  2. 反切函数的应用基础详解(核心代码两行)
  3. java 字符串枚举类使用
  4. 【资源】CenterNet原理与代码解析
  5. 无涯教程 - Latex 列表(Lists)
  6. SDCC 2016架构运维峰会(成都站),讲师议题抢先看!
  7. : could not determine a constructor for the tag !RootAdmin
  8. [创业-20]:财务报表 - 所有者权益之资本公积
  9. st9s429开关电源芯片手册及引脚定义
  10. 宁花4000买手机 不花6元买游戏