导语
京东是我们购物经常去光顾的一个点上平台,它里面的商品多种多样,其中的商品图片也是应有尽有,今天小编呢就给大家带来一个京东商品图片的简单爬虫。
让我们我们愉快地开始吧~
相关文件
关注微信公众号“爬虫康康”,在公众号内回复“京东商品图”获取。
开发工具及
环境搭建
Python版本:3.6.4
开发环境:pycharm 64位
浏览器:Chrome
相关模块:requests
urllib.request
lxml
os
bs4
安装:pip 安装即可
原理简介
爬取 url 地址:www.jd.com 如下图
现在我们假设要爬取手机的图片,我们在搜索框内输入手机,点击搜索后的页面如下图
此时的 url 如下图所示
可见其中有 ‘keyword=手机‘ 以及 ‘wq=手机’关键字,说明请求使用的是 get 方法现在我们修改 url,去掉一些字段后如下图所示
页面可以正常显示
我们来点击第二页,可以看到 url 多了一个‘page=3’的字段,点击第三页,其中的数字变成了5,由此说明它的 url 每一页的字段为单数,我们在删减 url 可正常显示,如下图
所以说,我们可以通过改变关键字,来确定想爬取的商品图片。
确定了 url 后,我们来构造 url 列表,小编我只爬取了了前10页,有600张图,你也可以自定义,但太多的话会受到京东的反爬。
代码如下,先输入一个 commodity 来得到想要爬取的商品名的关键字;然后用列表解析构造前10页的 urls。
我们先定义一个图片下路径供后面使用
构造请求头,在浏览器中按下 F12 打开开发者工具,点击‘Network’,下面会出现一堆文件,点击第一个文件,右面会出现一些信息,选中‘Headers’找到其中的‘user-agent’,这就是请求头,模拟浏览器访问的参数
模块导入,如下图
那现在我们可以来写爬取的函数了,如下图
现在来解释一下。
传进去的是每一页的 url 和计数器 count,用来记数爬到了第几张图片
第一二行,请求 url,并用 bs4 库中的 BeautifulSoup() 类来获得 HTML 源码并用 ‘lxml’ 解析
第三行用 select 选择器获得所有图片在 HTML 源码中的位置组成一个列表,在图片那里右键‘检查元素‘,在右边会弹出高亮代码,在那里在右键‘Copy’-‘select’,就的到了 select 选择器路径
!!注意,下面是一个有点坑的问题!!
获得图片的 HTML 源码所在的后,就要下载了,可我运行调式,发现获得的图片 url 的属性与源码中显示的属性不一样,导致没有结果
在源码中的显示的属性,如下
图片对应的 url 的为属性为‘src’,经过断点调试发现,爬下来的真实属性为‘source-data-lazy-img’,如下图
!!!要用此属性才能获取图片的 url 去下载!!!
现在开始下载,首先用了,一个异常捕获,防止在下载中有图片不能下载而导致程序停止
用循环提取列表中的每一个图片的 url ,给图片命名
用 urllib.request.urlretrieve(img_url,filename= img_name) 下载,第一个参数是图片的 url,第二个是图片的下载路径的名字
最后返回计数器
爬取下载的函数就完成了
再来定义一个,创建下载路径的文件夹的函数,这里就不多解释,如下图
最后主函数,如下
其中要想调用创建文件夹的函数,创建保存的文件,在开始循环,但在调用爬取函数之前,要先把 url 的编码格式转换一下,否则会有问题
运行样例
点击边框调出视频工具条