Python批量抓取站酷ZCOOL作品图片并归档

前言

前几天,由于个人有需求,所以就要对站酷网一些类别下的作品的图片进行批量抓取,首先是采用的是NodeJs来写的,但是在运行的途中遇到很多的问题,所以后来就换成了Python,同时使用了多线程,使得图片下载时达到了宽带的峰值,同样也保证了其质量。
Python批量抓取站酷ZCOOL作品图片并归档

正文

我本次采用的是requestBeautifulSoup组合来进行抓取的,首先我们需要分析站酷的DOM结构:
Python批量抓取站酷ZCOOL作品图片并归档
由上我们可以看出,其主要内容包含在class为work-list-box的这个div内,并且每个作品又是单独包含在class为card-box这个div内的,所以我们需要获取到页面所有的作品元素集合,我封装成了一个函数:

接下来分析每个模块元素的结构,通过查看DOM元素得知每个card-box下的class为title-content的这个a标签包含了其作品的链接地址以及作品标题,所以我们就可以由此来获取:

但是在作品集合元素内,嵌套着推广或广告,但是推广和广告是没有头像avatar元素的,所以我们只需要这样检测头像是否为空就可以过滤掉广告元素,其后获取到作者,URL链接以及标题:

接下来,我们需要访问对应的URL,并获取到其中的URL地址:
Python批量抓取站酷ZCOOL作品图片并归档

通过查看DOM元素结构可以看出,其文章主要内容区域在class为work-show-box的div下,然后每个图片/视频/文字区域都是放在class为reveal-work-wrap的div内,所以获取到所有的内容区域集合,然后查看是否有img标签,如果有的话就说明存在图片元素,则是我们需要的内容,并且获取到其src存放至url的集合中去:

要注意的一点就是,其中有些图片如上图中,会存在@这个表示,就好比http://img.zcool.cn/community/0170165a372344a80121db8001781d.jpg@1280w_1l_2o_100sh.jpg,这个是将原图片进行了裁剪的缩略图,我们只需要将@以及后面的内容去掉就可以得到原图,最后为:http://img.zcool.cn/community/0170165a372344a80121db8001781d.jpg

最后,我们需要将获取的URL图片进行存储,存储的文件夹就以【作者名】-【作品标题】为标准,然后图片就以UUID来随机命名,同时我们需要对一些特殊字符进行过滤转换,以防创建文件夹或文件失败:

所以,最后的完整源码如下:

Github:https://github.com/Licoy/python-es/blob/master/old/zcool.py

后记

说说最后的效果吧,通过几十分钟的抓取,峰值为11MB的下载速度,成功抓取了站酷网站的2500+的作品,总大小为30GB左右。 :grin: 如果上述代码中有任何不清楚的地方,您可以在下方进行留言,我会及时回答您的疑惑。

    A+
所属分类:Python

发表评论

请在下方填写评论信息

:?::razz::sad::evil::!::smile::oops::grin::eek::shock::???::cool::lol::mad::twisted::roll::wink::idea::arrow::neutral::cry::mrgreen:

表情 粗体 斜体 图片 引用 链接 删除线 下划线 插代码 签到

目前评论:11   其中:访客  6   博主  5

  1. avatar 厘米晴空 1  来自天朝的朋友 谷歌浏览器 Windows 10 陕西省西安市 电信

    会一丢丢py但是总没有思路写,参考你的爬取思路自己也试着写了下,期待大佬更新更多python代码 :grin:

  2. avatar Shmily 0  来自天朝的朋友 谷歌浏览器 Windows 10 湖北省仙桃市 电信

    感觉不错,很喜欢

  3. avatar 民在国 0  来自天朝的朋友 火狐浏览器 Windows 10 广东省中山市 电信

    我也试一下。

  4. avatar 哦引力 1  来自天朝的朋友 搜狗浏览器 Windows 7 湖北省 电信

    站酷里面的素材都不能下载及另存

    • avatar 憧憬Licoy 博主  来自天朝的朋友 谷歌浏览器 Windows 7 四川省成都市 电信

      @哦引力 部分有版权不能提供下载,但是只要你想弄就还是有办法的,只要思想不滑坡,办法总比困难多。

  5. avatar 菊部 2  来自天朝的朋友 谷歌浏览器 Mac OS X 10_13_2 湖北省武汉市 电信

    强大的Python

  6. avatar godaddy域名优惠码 2  来自天朝的朋友 谷歌浏览器 Windows 8.1 江苏省苏州市 电信

    朋友 交换链接吗