导语

京东是我们购物经常去光顾的一个点上平台,它里面的商品多种多样,其中的商品图片也是应有尽有,今天小编呢就给大家带来一个京东商品图片的简单爬虫。

让我们我们愉快地开始吧~

相关文件

关注微信公众号“爬虫康康”,在公众号内回复“京东商品图”获取。

开发工具及

 环境搭建

Python版本:3.6.4

开发环境:pycharm 64位

浏览器:Chrome

相关模块:requests

               urllib.request

               lxml

               os

               bs4

安装:pip 安装即可

原理简介

爬取 url 地址:www.jd.com 如下图


Python之京东商品图片爬虫_java


现在我们假设要爬取手机的图片,我们在搜索框内输入手机,点击搜索后的页面如下图


Python之京东商品图片爬虫_java_02


此时的 url 如下图所示


Python之京东商品图片爬虫_java_03


可见其中有 ‘keyword=手机‘ 以及 ‘wq=手机’关键字,说明请求使用的是 get 方法现在我们修改 url,去掉一些字段后如下图所示


Python之京东商品图片爬虫_java_04


页面可以正常显示


Python之京东商品图片爬虫_java_05


我们来点击第二页,可以看到 url 多了一个‘page=3’的字段,点击第三页,其中的数字变成了5,由此说明它的 url 每一页的字段为单数,我们在删减 url 可正常显示,如下图


Python之京东商品图片爬虫_java_06



所以说,我们可以通过改变关键字,来确定想爬取的商品图片。

确定了 url 后,我们来构造 url 列表,小编我只爬取了了前10页,有600张图,你也可以自定义,但太多的话会受到京东的反爬。

代码如下,先输入一个 commodity 来得到想要爬取的商品名的关键字;然后用列表解析构造前10页的 urls。


Python之京东商品图片爬虫_java_07


我们先定义一个图片下路径供后面使用


Python之京东商品图片爬虫_java_08


构造请求头,在浏览器中按下 F12 打开开发者工具,点击‘Network’,下面会出现一堆文件,点击第一个文件,右面会出现一些信息,选中‘Headers’找到其中的‘user-agent’,这就是请求头,模拟浏览器访问的参数


Python之京东商品图片爬虫_java_09


Python之京东商品图片爬虫_java_10


模块导入,如下图


Python之京东商品图片爬虫_java_11



那现在我们可以来写爬取的函数了,如下图


Python之京东商品图片爬虫_java_12


现在来解释一下。

传进去的是每一页的 url 和计数器 count,用来记数爬到了第几张图片

第一二行,请求 url,并用 bs4 库中的 BeautifulSoup() 类来获得 HTML 源码并用 ‘lxml’ 解析

第三行用 select 选择器获得所有图片在 HTML 源码中的位置组成一个列表,在图片那里右键‘检查元素‘,在右边会弹出高亮代码,在那里在右键‘Copy’-‘select’,就的到了 select 选择器路径

!!注意,下面是一个有点坑的问题!!

获得图片的 HTML 源码所在的后,就要下载了,可我运行调式,发现获得的图片 url 的属性与源码中显示的属性不一样,导致没有结果

在源码中的显示的属性,如下


Python之京东商品图片爬虫_java_13


图片对应的 url 的为属性为‘src’,经过断点调试发现,爬下来的真实属性为‘source-data-lazy-img’,如下图


Python之京东商品图片爬虫_java_14


!!!要用此属性才能获取图片的 url 去下载!!!


现在开始下载,首先用了,一个异常捕获,防止在下载中有图片不能下载而导致程序停止

用循环提取列表中的每一个图片的 url ,给图片命名

用 urllib.request.urlretrieve(img_url,filename= img_name) 下载,第一个参数是图片的 url,第二个是图片的下载路径的名字

最后返回计数器

爬取下载的函数就完成了


再来定义一个,创建下载路径的文件夹的函数,这里就不多解释,如下图


Python之京东商品图片爬虫_java_15


最后主函数,如下


Python之京东商品图片爬虫_java_16


其中要想调用创建文件夹的函数,创建保存的文件,在开始循环,但在调用爬取函数之前,要先把 url 的编码格式转换一下,否则会有问题

运行样例


https://v.qq.com/x/page/k0781bx4u6b.html 


Python之京东商品图片爬虫_java_17