python3 圖片referer防盜鏈的實現(xiàn)方法
本篇文章主要破解referer防盜鏈技術(shù)
referer防盜鏈技術(shù):
referer防盜鏈技術(shù)是服務(wù)器通過檢查客戶端提起的請求包內(nèi)的referer字段來阻止圖片下載的,如果referer字段錯誤,服務(wù)器會跳到另一個地址,這將導(dǎo)致錯誤的圖片下載。
上面已經(jīng)了解到了referer防盜鏈技術(shù),下面直接上代碼。
(我用的是python3,需要用到requests,html非系統(tǒng)包
下載方法:用python中的pip下載即可)
import urllib.request
import requests
import time
import os
import shutil
from lxml import html
def getPage():
'''''
從網(wǎng)站首頁獲取妹子的網(wǎng)址
'''
fres=open('res.txt','w')
htm=urllib.request.urlopen('http://www.mzitu.com/')
out=htm.read()
out=html.fromstring(out)
urls=[]
for res in out.xpath('//ul[@id="pins"]/li/a/@href'):
urls.append(res)
for r in urls:
fres.write(r)
fres.write('\n\r')
fres.close()
return urls
def getPiclink(url):
'''''
獲取一個妹子的標(biāo)題和她的所有圖片地址
'''
i_headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0'}
sel=urllib.request.Request(url, headers=i_headers)
#使用代理瀏覽器訪問網(wǎng)站
sel.add_header('Referer', 'http://www.mzitu.com/')
#將referer字段添加到請求包里
sel=urllib.request.urlopen(sel).read()
sel=html.fromstring(sel)
total=sel.xpath('//div[@class="pagenavi"]/a[last()-1]/span/text()')[0]
title=sel.xpath('//h2[@class="main-title"]/text()')[0]
jpglist=[]
for i in range(int(total)):
link='{}/{}'.format(url, i+1)
s=html.fromstring(urllib.request.urlopen(link).read())
jpg=s.xpath('//div[@class="main-image"]/p/a/img/@src')[0]
jpglist.append(jpg)
return title,jpglist
def downloadJpg(title,piclist,link):
'''''
下載getPiclink()獲取到的妹子的圖片
'''
k=1
count=len(piclist)
dirname=u"[%sP]%s" %(str(count),title)
if os.path.exists(dirname):
shutil.rmtree(dirname)
os.mkdir(dirname)
i_header={}
i_header['Referer']=link
#將getPiclink()獲取到的妹子的首頁網(wǎng)址作為referer字段的值
for i in piclist:
filename='%s/%s/%s.jpg' %(os.path.abspath('.'),dirname, k)
with open(filename,'wb') as jpg:
jpg.write(requests.get(i, headers=i_header).content)
#將referer字段添加到請求包里并下載圖片
time.sleep(0.5)
k+=1
if __name__=='__main__':
for link in getPage():
title,pic=getPiclink(link)
downloadJpg(title,pic,link)
print('OK!')
另外給大家推薦一個很好的抓包工具wireshark,我就是通過wirshark抓包分析后得到的referer信息。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python深度強(qiáng)化學(xué)習(xí)之DQN算法原理詳解
DQN算法是DeepMind團(tuán)隊提出的一種深度強(qiáng)化學(xué)習(xí)算法,在許多電動游戲中達(dá)到人類玩家甚至超越人類玩家的水準(zhǔn),本文就帶領(lǐng)大家了解一下這個算法,快來跟隨小編學(xué)習(xí)一下2021-12-12
Python使用__new__()方法為對象分配內(nèi)存及返回對象的引用示例
這篇文章主要介紹了Python使用__new__()方法為對象分配內(nèi)存及返回對象的引用,結(jié)合實例形式分析了Python對象初始化及內(nèi)存操作相關(guān)使用技巧,需要的朋友可以參考下2019-09-09
Python實現(xiàn)在PyPI上發(fā)布自定義軟件包的方法詳解
在Python中我們經(jīng)常使用pip來安裝第三方Python軟件包,其實我們每個人都可以免費(fèi)地將自己寫的Python包發(fā)布到PyPI上。本文我們就將詳細(xì)介紹如何發(fā)布測試包,需要的可以參考一下2022-06-06
Python簡單實現(xiàn)安全開關(guān)文件的兩種方式
這篇文章主要介紹了Python簡單實現(xiàn)安全開關(guān)文件的兩種方式,涉及Python的try語句針對錯誤的判定與捕捉相關(guān)技巧,需要的朋友可以參考下2016-09-09
基于Python實現(xiàn)的購物商城管理系統(tǒng)
這篇文章主要介紹了基于Python實現(xiàn)的購物商城管理系統(tǒng),幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-04-04
Python數(shù)據(jù)結(jié)構(gòu)之優(yōu)先級隊列queue用法詳解
queue庫提供了一個適用于多線程編程的先進(jìn)先出(FIFO)數(shù)據(jù)結(jié)構(gòu),可以用來在生產(chǎn)者與消費(fèi)者線程之間安全地傳遞消息或其他數(shù)據(jù),它會為調(diào)用者處理鎖定,使多個線程可以安全而更容易地處理同一個Queue實例.Queue的大小可能受限,以限制內(nèi)存使用或處理,需要的朋友可以參考下2021-05-05

