當爬取微信裡的圖片使用的時候會發現,當我們瀏覽器位址列 訪問微信中的圖片URL是沒有問題。但當我們在自己專案中使用img
標籤src
引入的時候,就會出現,“此圖片來自微信公眾平臺未經允許不可引用”的問題。這是因為微信為了防止其他平臺引入,特意做了類似防盜鏈的功能。
前往原文地址檢視效果:張蘋果部落格
網上找了幾個解決方法。
一,在頁面header中新增meta標籤,設定referrer。
<meta name="referrer" content="never">
該屬性禁止了header傳送頁面相關資訊,雖然可以阻止一些攻擊以及繞過圖片防盜鏈的效果。確實解決了這個問題。但是會出現其他問題如:影響頁面跳轉和回溯,第三方統計程式碼失效(如CNZZ、百度統計),SEO和社交媒體分享影響等。
二,img標籤上新增 referrerpolicy="no-referrer"
<img src="微信圖片url" referrerPolicy="no-referrer" />
正常應該能解決,但我的專案第一次開啟圖片的時候沒問題,但當我第二次訪問的時候,不知道為什麼又出現了“此圖片來自xxxxx”的問題。
三,第三方代理
<img src="https://xxx代理地址/?url=微信圖片url"/>
需要自己去找一些第三方的代理,但是如果第三方地址掛了,那麼就出問題了。所以這個方法可能不太穩定。
想了想,既然別人的可能不穩定,能不能自己寫一個呢?後面自己用python簡單實現了一下。
四,Python Flask代理伺服器
透過Flask框架和requests庫實現圖片資源的獲取和轉發。該方法相對穩定(畢竟是自己弄的),但可能受到伺服器效能和網路環境的影響。
1,完整程式碼
from flask import Flask, Response, request
import requests
app = Flask(__name__)
def fetch_image(image_url):
try:
response = requests.get(image_url)
if response.status_code == 200:
return response.content
else:
return None
except requests.RequestException as e:
print(f"Error fetching image: {e}")
return None
@app.route('/fetchImage', methods = ['GET'])
def fetchImage():
# 獲取圖片地址
image_url = request.args.get('url')
image_data = fetch_image(image_url)
if image_data:
mime_type = 'image/jpeg' # 這裡需要替換為實際的MIME型別
return Response(image_data, mimetype=mime_type)
else:
return "Failed to fetch image", 404
if __name__ == '__main__':
# 使用WSGI伺服器執行應用程式
from gevent.pywsgi import WSGIServer
http_server = WSGIServer(('127.0.0.1', 5000), app)
http_server.serve_forever()
2,測試介面沒問題
3,部署到伺服器上使用。
<img src="https://zhangpingguo.com/spider/fetchImage?url=https://mmbiz.qpic.cn/sz_mmbiz_png/3Vm2lcZKj6kibOJxU942w70J8zb6ianMzwPvEwSI5SNOzicM47GN9Bo3MvPAeHJr7pjPRVsjxDLgOYKQ3pR8jcHHA/640?wx_fmt=png&from=appmsg"/>
最後結果正常訪問。但是估計是我伺服器太廉價了,訪問速度忒慢了。不管了,反正能用就行...
如你是PC端訪問本文,進入原文張蘋果部落格,滑鼠移入上方線條,點選“摸魚日曆”可檢視效果。