您好,登錄后才能下訂單哦!
本文實例講述了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('h4').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
圖片出處為:https://cache.yisu.com/upload/information/20200622/113/41189.gif
動圖存貯位置:Jimy/2017-3-16/搞笑動圖/1/這么賤會被打死吧……3fa9da88-09f8-11e7-9161-f8bc12753d1e.gif
圖片出處為:https://cache.yisu.com/upload/information/20200622/113/41190.gif
動圖存貯位置:Jimy/2017-3-16/搞笑動圖/1/一看就是印度……4064e60c-09f8-11e7-9161-f8bc12753d1e.gif
圖片出處為:https://cache.yisu.com/upload/information/20200622/113/41191.gif
動圖存貯位置:Jimy/2017-3-16/搞笑動圖/1/新垣結衣的正經工作臉414b4f52-09f8-11e7-9161-f8bc12753d1e.gif
圖片出處為:https://cache.yisu.com/upload/information/20200622/113/41192.gif
動圖存貯位置:Jimy/2017-3-16/搞笑動圖/1/妹子這是在搖什么的421afa86-09f8-11e7-9161-f8bc12753d1e.gif
圖片出處為:https://cache.yisu.com/upload/information/20200622/113/41193.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程序設計有所幫助。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。