本片博文为大家带来的想要快速爬取整站图片?速进(附完整代码)
。
很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:961562169
目录
快速爬取整个网站的图片当然是可行的!!!但是 我们还是先从一个切入点切入,此处的切入点,博主选择的是宝马五系车型为切入点,同理,爬取妹子图也是如此。
一. 爬取前的准备
汽车直接官网:https://www.autohome.com.cn/
宝马五系网页地址:https://www.autohome.com.cn/65/
图片地址:https://car.autohome.com.cn/pic/series/65.html
二. 查看网页
三. 分析与实现
1. 先确定我们所要爬取内容的具体位置
下图为所获取到的所有结果(通过scrapy shell 解析所得到的结果)
切片操作完成后,我们通过循环遍历可以分别得到我们所需要的图片名称及图片链接。
怎样得到的?我们先看下HTML源码
结构:
解析完成后,我们通过输出打印看下效果:
根据上图我们可以看到图片的网址是不完全的,这时候我们可以通过添加https:
使其形式成为url = "https:"+url
这种形式。最终可以的到下图的效果:
答案是肯定! 下面博主给的代码即为优化方法:
优化1:自动拼接成完整的URL
优化2: 使用map()
在使用map()优化前,我们需要先设定好item.py
上述两种优化方法得到的结果和第一个是一样的。效果图如下:
2. 存储的具体实现 (在pipelines中处理
)
在使用pipelines
的时候,我们需要先从设置里打开选项,把默认的注释去掉
怎样实现?
在此博主总共分成两步进行实现,首先是先判断是否有目录,如果有的话就直接进行下一步,如果没有的话,则会进行自动创建,源码部分如下:
文件夹创建完成后,就需要对图片进行保存了。源码如下:
对上述源码,博主只对image_name = url.split('_')[-1]
这一句做详细解释。至于为什么要这样操作,看下图:
下面查看一下运行的结果:
3. 更新完善源码
虽然通过以上的步骤我们已经完成了图片的爬取,但是我们要知道我们用的是不同的循环遍历的方法一张一张的下载。初次之外,上述的方法也没有用到异步下载,效率较为低下。
在这个时候我们就可以使用scrapy框架自带的item pipelines了。
为什么要选择使用scrapy内置的下载文件的方法:
- 避免重新下载最近已经下载过的数据。
- 可以方便的指定文件存储的路径。
- 可以将下载的图片转换成通用的格式。比如png或jpg。
- 可以方便的生成缩略图。
- 可以方便的检测图片的宽和高,确保他们满足最小限制。
- 异步下载,效率非常高
下载文件的Files Pipeline与下载图片的Images Pipeline:
当使用Files Pipeline下载文件的时候,按照以下步骤来完成:
- 定义好一个Item,然后在这个item中定义两个属性,分别为file_urls以及files = file_urls是用来存储需要下载的文件的url链接,需要给一个列表。
- 当文件下载完成后,会把文件下载的相关信息存储到item的fileds属性中。比如下载路径、下载的url和文件的校验码等。
- 在配置文件settings.py中配置FILES_STORE,这个配置是用来设置文件下载下来的路径。
- 启动pipeline:在ITEM_PIPELINES中设置scrapy.pipelines.files.FilesPipelines:1。
当使用Images Pipeline下载文件的时候,按照以下步骤来完成:
- 定义好一个Item,然后在这个item中定义两个属性,分别为image_urls以及images = image_urls是用来存储需要下载的图片的url链接,需要给一个列表。
- 当文件下载完成后,会把文件下载的相关信息存储到item的images属性中。比如下载路径、下载的url和文件的校验码等。
- 在配置文件settings.py中配置IMAGES_STORE,这个配置是用来设置文件下载下来的路径。
- 启动pipeline:在ITEM_PIPELINES中设置scrapy.pipelines.images.ImagesPipelines:1。
- 1. 修改完善items.py
- 2. 修改主程序
- 3. 调用scrapy自带的image Pipelines及images_store
好了,修改完成,下面我们来看下效果
为了实现上述读者所说的需求,其实很简单,只需要我们再次在pipelines.py中重写一个类即可
- 4. 重写类
- 6.修改item_pipelines
- 7. 运行查看结果
- 8. 大图img保存
你以为到这里就大功告成了嘛!如果真的这样认为那你就大错特错了,因为现在保存的还只是小图,我们需要保存的是大图。下面我们先来看看大图与小图的区别:
此部分到这里大体就完成了,剩下一点博主就直接把此部分的代码放上:
- 9. 最终运行结果
四. 代码
- 1. bmw5
- 2. items
- 3. pipelines
- 4. settings
美好的日子总是短暂的,虽然还想继续与大家畅谈,但是本篇博文到此已经结束了,如果还嫌不够过瘾,不用担心,我们下篇见!