首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

网上动态图有多污?一看吓一跳!Python爬取上万条动态图!超搞笑

引言

有段时间没有写爬虫相关的文章了,今天抽时间把之前做的一个程序分享给大家。

经常逛A站和B站的人,肯定对一个节目不陌生《网络上常见的GIF动态图》

今天就来分享一下,怎么通过爬虫自动的将这些个动作收藏到自己的电脑中(其实这个程序5月份就写好了,一直拖到现在才想起来将它分享出来)。

一.思路分析

按照爬虫的基本规律:

找到目标

抓取目标

处理目标内容,获取有用的信息

1.首先我们的目标是:http://gifcc.com/forum.php 即找动图就上GIFFCC.COM

这个网站呢,是一个论坛式网站,里面分了几大类,反正试试各种动图。

我们的目标呢,就是找到这些动图的地址,收藏到自己的电脑上。

2.看一下各个模块的网址,看一下有什么规律

'http://gifcc.com/forum-37-1.html',#其他各种GIF动态图出处

'http://gifcc.com/forum-38-1.html', #美女GIF动态图出处

'http://gifcc.com/forum-47-1.html',#科幻奇幻电影GIF动态图出处

'http://gifcc.com/forum-48-1.html',#喜剧搞笑电影GIF动态图出处

'http://gifcc.com/forum-49-1.html',#动作冒险电影GIF动态图出处

'http://gifcc.com/forum-50-1.html'#恐怖惊悚电影GIF动态图出处

对的,没错,如果以游客身份访问,那么各个板块的网址就是这样的形式 http://gifcc.com/forum-XX -1.html

那么每个模块中的内容又有什么规律? 来直接上图:

我们关注的是当前页的网址,以及这个页码数,跳到第二页之后,地址变成:http://gifcc.com/forum-38-2.html

那么也就是说 网址的 规律就是 http://gifcc.com/forum-XX-XX.html

这里注意一点,网站的图片是动态加载的, 只有你往下滑动的时候,下面的图片才会逐渐的显现出来,这个暂且记下

3.每一张动图的所在页面的规律

其实这个没啥规律,但是只要我们找到单个图片的地址,就没啥难处理的了.

二 开工动手

1.获取入口页面内容

即根据传入的URL,获取整个页面的源码

这里我们使用了webdriver以及PhantomJS 这些模块,为什么呢?因为网页是动态加载的,这样可以抓取的数据全一点.

那这里还有个疑问, 为什么没有滑动啊什么的,得到的数据

2.获取页码数

这里的页码处理用到了一个模块pq, 即 PyQueryfrom pyquery import PyQuery as pq

采用PyQuery的方式查找我们需要的元素,感觉更好处理一点,挺方便的

同时这里的处理稍微有点意思,如果观察这个页面的话,会发现,每个模块的页码数,在上面和下面都有一个,然后我这里裁取的一下,因为我们只需要一个页码数字即可

第三步到第六步一起来说,其实就是根据页码数,来进行遍历,获取到每一页的内容。然后得到每一页中的所有图片地址

在进行获取每一页的内容的时候,需要重新组装页面地址。

有了新的地址,就可以获取当前页面的内容,并进行数据处理,得到每一张图片的地址列表

在获取到图片列表后,再次解析,获取每一张图片的URL

在这里,把数据整合一下,为将数据写入数据库做准备

7.将图片存到本地,以及将数据写入数据库

到这里其实大体的内容已经完成了.

我们能够将这个论坛各个模块的动图都存到本地,同时呢,也将数据放入到了数据库中

三 数据库的筛选

在完成了将数据放入到数据库的之后, 我想着可以直接通过调用数据库,将图片保存

(为什么有这个想法呢,因为我发现如果直接在主程序中存贮图片,它跑的太慢了,不如将数据都放到数据库中,之后专门调用数据库来贮存图片)

但是这里发现一个问题,数据中的内容挺多的,然后发现了好多内容是重复的,因此我们需要对数据库进行去重

关于数据去重的内容,其实我之前的文章已经写过了(写那篇文章的时候,这个爬虫已经完成了呢~)

主要思路是针对某一个元素的数量进行操作,pymongo里面有一个方法是可以统计指定元素的数量的,如果当前元素只有一个,就不管,不是一个元素,就删除

核心代码如下:

四 读取数据库中的内容,存贮图片

数据去重之后,再次进行图片的存贮,就方便多了

之后如果图片删除了,也不用重新跑一边,或者说有时候本地图片占地方,那么只用保存有数据库的数据就好了

核心代码如下:

完整代码

01_get_gif_url.py

02_delete_repeat_url_in_mongodb.py

03_from_mongodb_save_pic.py

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180312A0R5ZI00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券