Python爬虫实现获取动态gif格式搞笑图片的方法示例


Posted in Python onDecember 24, 2018

本文实例讲述了Python爬虫实现获取动态gif格式搞笑图片的方法。分享给大家供大家参考,具体如下:

有时候看到一些喜欢的动图,如果一个个取保存挺麻烦,有的网站还不支持右键保存,因此使用python来获取动态图,就看看就很有意思了

本次爬取的网站是  居然搞笑网 http://www.zbjuran.com/dongtai/list_4_1.html

思路:

获取当前页面内容

查找页面中动图所代表的url地址

保存这个地址内容到本地

如果想爬取多页,就可以加上一个循环条件

代码:

#!/usr/bin/python
#coding:utf-8
import urllib2,time,uuid,urllib,os,sys,re
from bs4 import BeautifulSoup
reload(sys)
sys.setdefaultencoding('utf-8')
#获取页面内容
def getHtml(url):
    try:
        print url
        html = urllib2.urlopen(url).read()#.decode('utf-8')#解码为utf-8
    except:
        return
    return html
#获取动图所代表的url列表
def getImagUrl(html):
    if not html:
        print 'nothing can be found'
        return
    ImagUrlList=[]
    soup=BeautifulSoup(html,'lxml')
    #获取item列表
    items=soup.find("div",{"class":"main"}).find_all('div',{'class':'item'})
    for item in items:
        target={}
        #通过if语句,过滤广告项
        if item.find('div',{"class":"text"}):
            #获取url
            imgurl=item.find('div',{"class":"text"}).find('img').get('src')
            target['url']=imgurl
            #获取名字
            target['name']=item.find('h3').text
            ImagUrlList.append(target)
    return ImagUrlList
#下载图片到本地
def download(author,imgurl,typename,pageNo):
    #定义文件夹的名字
    x = time.localtime(time.time())
    foldername = str(x.__getattribute__("tm_year"))+"-"+str(x.__getattribute__("tm_mon"))+"-"+str(x.__getattribute__("tm_mday"))
    download_img=None
    picpath = 'Jimy/%s/%s/%s' % (foldername,typename,str(pageNo))
    filename = author+str(uuid.uuid1())
    pic_type=imgurl[-3:]
    if not os.path.exists(picpath):
        os.makedirs(picpath)
    target = picpath+"/%s.%s" % (filename,pic_type)
    print "动图存贮位置:"+target
    download_img = urllib.urlretrieve(imgurl, target)#将图片下载到指定路径中
    print "图片出处为:"+imgurl
    return download_img
#退出函数
def myquit():
    print "Bye Bye!"
    exit(0)
def start(pageNo):
    targeturl="http://www.zbjuran.com/dongtai/list_4_%s.html" % str(pageNo)
    html = getHtml(targeturl)
    urllist=getImagUrl(html)
    for imgurl in urllist:
        download(imgurl['name'],imgurl['url'],'搞笑动图',pageNo)
if __name__ == '__main__':
    print '''
            *****************************************
            **  Welcome to Spider of GIF     **
            **   Created on 2017-3-16      **
            **   @author: Jimy         **
            *****************************************'''
    pageNo = raw_input("Input the page number you want to scratch (1-50),please input 'quit' if you want to quit\n\
请输入要爬取的页面,范围为(1-100),如果退出,请输入Q>\n>")
    while not pageNo.isdigit() or int(pageNo) > 50 or int(pageNo) < 1:
        if pageNo == 'Q':
            myquit()
        print "Param is invalid , please try again."
        pageNo = raw_input("Input the page number you want to scratch >")
    print pageNo
    start(pageNo)
    #第一次爬取结束
    pageNo = raw_input("Input the page number you want to scratch (1-50),please input 'quit' if you want to quit\n\
请输入总共需要爬取的页面,范围为(1-5000),如果退出,请输入Q>\n>")
    while not pageNo.isdigit() or int(pageNo) > 5000 or int(pageNo) < 1:
        if pageNo == 'Q':
            myquit()
        print "Param is invalid , please try again."
        pageNo = raw_input("Input the page number you want to scratch >")
    #循环遍历,爬取多页
    for num in xrange(int(pageNo)):
        start(str(num+1))

结果如下:

                        *****************************************
                        **    Welcome to Spider of GIF         **
                        **      Created on 2017-3-16           **
                        **      @author: Jimy                  **
                        *****************************************
Input the page number you want to scratch (1-50),please input 'quit' if you want to quit
请输入要爬取的页面,范围为(1-100),如果退出,请输入Q>
>1
1
http://www.zbjuran.com/dongtai/list_4_1.html
动图存贮位置:Jimy/2017-3-16/搞笑动图/1/真是艰难的选择。3f0fe8f6-09f8-11e7-9161-f8bc12753d1e.gif
图片出处为:http://www.zbjuran.com/uploads/allimg/170206/10-1F206135ZHJ.gif
动图存贮位置:Jimy/2017-3-16/搞笑动图/1/这么贱会被打死吧……3fa9da88-09f8-11e7-9161-f8bc12753d1e.gif
图片出处为:http://www.zbjuran.com/uploads/allimg/170206/10-1F206135H35U.gif
动图存贮位置:Jimy/2017-3-16/搞笑动图/1/一看就是印度……4064e60c-09f8-11e7-9161-f8bc12753d1e.gif
图片出处为:http://www.zbjuran.com/uploads/allimg/170206/10-1F20613543c50.gif
动图存贮位置:Jimy/2017-3-16/搞笑动图/1/新垣结衣的正经工作脸414b4f52-09f8-11e7-9161-f8bc12753d1e.gif
图片出处为:http://www.zbjuran.com/uploads/allimg/170206/10-1F206135250553.gif
动图存贮位置:Jimy/2017-3-16/搞笑动图/1/妹子这是在摇什么的421afa86-09f8-11e7-9161-f8bc12753d1e.gif
图片出处为:http://www.zbjuran.com/uploads/allimg/170206/10-1F20613493N03.gif
Input the page number you want to scratch (1-50),please input 'quit' if you want to quit
请输入总共需要爬取的页面,范围为(1-5000),如果退出,请输入Q>
>Q
Bye Bye!

最终就能够获得动态图了

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
用Python的Django框架来制作一个RSS阅读器
Jul 22 Python
最大K个数问题的Python版解法总结
Jun 16 Python
解决Python 遍历字典时删除元素报异常的问题
Sep 11 Python
Python实现判断给定列表是否有重复元素的方法
Apr 11 Python
神经网络相关之基础概念的讲解
Dec 29 Python
基于python实现语音录入识别代码实例
Jan 17 Python
Django后台管理系统的图文使用教学
Jan 20 Python
Python timer定时器两种常用方法解析
Jan 20 Python
在echarts中图例legend和坐标系grid实现左右布局实例
May 16 Python
python 利用toapi库自动生成api
Oct 19 Python
python+opencv实现车道线检测
Feb 19 Python
Python 图片处理库exifread详解
Feb 25 Python
python 在屏幕上逐字显示一行字的实例
Dec 24 #Python
python之Flask实现简单登录功能的示例代码
Dec 24 #Python
python实现逐个读取txt字符并修改
Dec 24 #Python
Python判断一个list中是否包含另一个list全部元素的方法分析
Dec 24 #Python
python读取txt文件中特定位置字符的方法
Dec 24 #Python
python进行文件对比的方法
Dec 24 #Python
Python二叉树的遍历操作示例【前序遍历,中序遍历,后序遍历,层序遍历】
Dec 24 #Python
You might like
PHP接收json 并将接收数据插入数据库的实现代码
2015/12/01 PHP
php 截取GBK文档某个位置开始的n个字符方法
2017/03/08 PHP
Laravel Eloquent分表方法并使用模型关联的实现
2019/11/25 PHP
JavaScript asp.net 获取当前超链接中的文本
2009/04/14 Javascript
js函数参数设置默认值的一种变通实现方法
2014/05/26 Javascript
JavaScript函数定义的常见注意事项小结
2014/09/16 Javascript
JavaScript控制两个列表框listbox左右交换数据的方法
2015/03/18 Javascript
JS创建事件的三种方法(实例代码)
2016/05/12 Javascript
关于验证码在IE中不刷新的快速解决方法
2016/09/23 Javascript
JavaScript中从setTimeout与setInterval到AJAX异步
2017/02/13 Javascript
bootstrap switch开关组件使用方法详解
2017/08/22 Javascript
使用JavaScript实现点击循环切换图片效果
2017/09/03 Javascript
ES6解构赋值实例详解
2017/10/31 Javascript
手把手教你使用vue-cli脚手架(图文解析)
2017/11/08 Javascript
BootStrap中的模态框(modal,弹出层)功能示例代码
2018/11/02 Javascript
vue中使用elementUI组件手动上传图片功能
2019/12/13 Javascript
vue移动端使用canvas签名的实现
2020/01/15 Javascript
three.js 将图片马赛克化的示例代码
2020/07/31 Javascript
[02:08]2014DOTA2国际邀请赛 430专访:力争取得小组前二
2014/07/11 DOTA
python实现dnspod自动更新dns解析的方法
2014/02/14 Python
python 垃圾收集机制的实例详解
2017/08/20 Python
Python 实现购物商城,含有用户入口和商家入口的示例
2017/09/15 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
2018/04/09 Python
Python查看微信撤回消息代码
2018/06/07 Python
python中reader的next用法
2018/07/24 Python
Python中对数组集进行按行打乱shuffle的方法
2018/11/08 Python
Python实现获取汉字偏旁部首的方法示例【测试可用】
2018/12/18 Python
Python中最大递归深度值的探讨
2019/03/05 Python
使用pyqt 实现重复打开多个相同界面
2019/12/13 Python
乡镇2014法制宣传日活动总结
2014/11/01 职场文书
公司慰问信范文
2015/03/23 职场文书
加班费申请报告
2015/05/15 职场文书
学前教育见习总结
2015/06/23 职场文书
jquery插件实现图片悬浮
2021/04/16 jQuery
我收到了德劲DE1107
2022/04/05 无线电
《火纹风花雪月无双》预告“神秘雇佣兵” 紫发剑客
2022/04/13 其他游戏