python3 圖片referer防盜鏈的實(shí)現(xiàn)方法
本篇文章主要破解referer防盜鏈技術(shù)
referer防盜鏈技術(shù):
referer防盜鏈技術(shù)是服務(wù)器通過(guò)檢查客戶(hù)端提起的請(qǐng)求包內(nèi)的referer字段來(lái)阻止圖片下載的,如果referer字段錯(cuò)誤,服務(wù)器會(huì)跳到另一個(gè)地址,這將導(dǎo)致錯(cuò)誤的圖片下載。
上面已經(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)站首頁(yè)獲取妹子的網(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):
'''''
獲取一個(gè)妹子的標(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)
#使用代理瀏覽器訪(fǎng)問(wèn)網(wǎng)站
sel.add_header('Referer', 'http://www.mzitu.com/')
#將referer字段添加到請(qǐng)求包里
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()獲取到的妹子的首頁(yè)網(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字段添加到請(qǐng)求包里并下載圖片
time.sleep(0.5)
k+=1
if __name__=='__main__':
for link in getPage():
title,pic=getPiclink(link)
downloadJpg(title,pic,link)
print('OK!')
另外給大家推薦一個(gè)很好的抓包工具wireshark,我就是通過(guò)wirshark抓包分析后得到的referer信息。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python將list保存到文件的3種方法實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于Python將list保存到文件的3種方法,Python中提供了文件操作的功能,可以通過(guò)打開(kāi)和讀寫(xiě)文件實(shí)現(xiàn),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02
用Python實(shí)現(xiàn)一本個(gè)性化日歷
大家好,本篇文章主要講的是用Python實(shí)現(xiàn)一本個(gè)性化日歷,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下2022-02-02
Python深度強(qiáng)化學(xué)習(xí)之DQN算法原理詳解
DQN算法是DeepMind團(tuán)隊(duì)提出的一種深度強(qiáng)化學(xué)習(xí)算法,在許多電動(dòng)游戲中達(dá)到人類(lèi)玩家甚至超越人類(lèi)玩家的水準(zhǔn),本文就帶領(lǐng)大家了解一下這個(gè)算法,快來(lái)跟隨小編學(xué)習(xí)一下2021-12-12
Python使用__new__()方法為對(duì)象分配內(nèi)存及返回對(duì)象的引用示例
這篇文章主要介紹了Python使用__new__()方法為對(duì)象分配內(nèi)存及返回對(duì)象的引用,結(jié)合實(shí)例形式分析了Python對(duì)象初始化及內(nèi)存操作相關(guān)使用技巧,需要的朋友可以參考下2019-09-09
Python實(shí)現(xiàn)在PyPI上發(fā)布自定義軟件包的方法詳解
在Python中我們經(jīng)常使用pip來(lái)安裝第三方Python軟件包,其實(shí)我們每個(gè)人都可以免費(fèi)地將自己寫(xiě)的Python包發(fā)布到PyPI上。本文我們就將詳細(xì)介紹如何發(fā)布測(cè)試包,需要的可以參考一下2022-06-06
Python簡(jiǎn)單實(shí)現(xiàn)安全開(kāi)關(guān)文件的兩種方式
這篇文章主要介紹了Python簡(jiǎn)單實(shí)現(xiàn)安全開(kāi)關(guān)文件的兩種方式,涉及Python的try語(yǔ)句針對(duì)錯(cuò)誤的判定與捕捉相關(guān)技巧,需要的朋友可以參考下2016-09-09
基于Python實(shí)現(xiàn)的購(gòu)物商城管理系統(tǒng)
這篇文章主要介紹了基于Python實(shí)現(xiàn)的購(gòu)物商城管理系統(tǒng),幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-04-04
Python實(shí)現(xiàn)兩種多分類(lèi)混淆矩陣
這篇文章主要為大家介紹了Python實(shí)現(xiàn)兩種多分類(lèi)混淆矩陣,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
Python數(shù)據(jù)結(jié)構(gòu)之優(yōu)先級(jí)隊(duì)列queue用法詳解
queue庫(kù)提供了一個(gè)適用于多線(xiàn)程編程的先進(jìn)先出(FIFO)數(shù)據(jù)結(jié)構(gòu),可以用來(lái)在生產(chǎn)者與消費(fèi)者線(xiàn)程之間安全地傳遞消息或其他數(shù)據(jù),它會(huì)為調(diào)用者處理鎖定,使多個(gè)線(xiàn)程可以安全而更容易地處理同一個(gè)Queue實(shí)例.Queue的大小可能受限,以限制內(nèi)存使用或處理,需要的朋友可以參考下2021-05-05

