网络爬虫实战(六):妈妈再也不用担心我没有壁纸啦

实战背景

近期准备参加一个隐写分析的比赛,unsplash是比赛训练数据集来源之一。Unsplash 是一个完全免费的、无版权的高清图片资源网站,里面的图片也是各式各样,分辨率也不错,觉得拿来做公众号的背景图片也是非常不错的选择,于是便动手实战一下图片爬取。
在这里插入图片描述

爬取方法一:Requests

  • 进入图片网站,先按F12打开开发者工具,观察Network,滚动页面,向下翻页,可以发现下图photos?page=3&per_page=12
    在这里插入图片描述
  • 观察其request URL,从其构造不难看出每页12张图片,当前是第三页,继续下滑网页,发现出现photos?page=4&per_page=12,观察得到参数仅有page不同,也验证了猜想,接下来继续观察这个链接,不难发现,图片的下载链接就藏在其中。
    在这里插入图片描述
  • 这个网页对新人爬虫还是非常友好的嘛!立马动手展开代码书写,只要在循环之中改变page的值就可以爬取整个网页的所有图片!
    在这里插入图片描述
  • 程序成功地运行!但是它的速度真是让人不敢恭维,一页12张图片都需要不少的时间代价,这10多万张图不得爬到猴年马月?于是我选择Scrapy框架来爬取图片。

爬取方法二:Scrapy

  • 首先,与昨天相同输入命令建立工程,若不记得可以参看Scrapy实战。然后来编写各组件的代码:

spider

  • 这部分是爬虫的主要部分,start_urls设置了请求的网页链接,然后用到了json库将网页返回的内容变成json格式,提取出其中的图片下载链接。并且利用了scrapy.Request对unsplash网返回的内容进行二次解析,并将图片交给pipelines进行输出。
    在这里插入图片描述

pipelines

  • 这部分是进行图片的输出存储,利用了MD5生成摘要来给图片命名,这样可以完成去重存储。
    在这里插入图片描述

settings

  • 既然对pipelines函数进行了编写,需要在settings.py中取消其注释,并且加上随机的代理头,加上一定的时延,来增强其假装浏览器的能力,当然也不要忘了在items.py中设置fields。
    在这里插入图片描述

爬取结果

  • 完成程序的编写之后,启动项目来看看成果,嗯,一大堆高清图片已收入囊中。
    在这里插入图片描述
发布了135 篇原创文章 · 获赞 490 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/lyc44813418/article/details/95493246