python3.7保存防盗链图片referer

现在很多网站启用了图片防盗链,防止服务器上的图片资源被人恶意盗链。但是这 给我们正常保存网页图片带来困难,比如说看到一篇非常好的文章你想把网页里的文字及图片复制到word里面后你会发现里面的图片全部不能正常显示这就是启用了防盗链。如果不想截图或者一张张另存为图片的话,可以使用python实现防盗链图片的批量保存(打算做一个系列的文章,看后面有没有空吧)。本期要实现的是在已有图片url的前提下使用python3.7进行下载保存的功能。

import requests
from bs4 import BeautifulSoup
import os
import docx
from docx import Document
from docx.shared import Inches
 
referer_url = 'http://blog.sina.com.cn'
pic_url='http://s4.sinaimg.cn/middle/67493dad4cfcaf33072e3&690';
headers = { "Accept":"text/html,application/xhtml+xml,application/xml;",
            "Accept-Encoding":"gzip",
            "Accept-Language":"zh-CN,zh;q=0.8",
            "Referer":referer_url,
            "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36"
            }

res = requests.get(pic_url,headers=headers)

img_name = '图片.jpg'
#保存图片至本地
with open(img_name,'wb')as f:
 response = res.content
 f.write(response)
 f.close()

referer_url是指防盗链网站通过referer来源判断请求是否合法的域名地址,最简单的方法就是将你浏览图片的网页地址栏显示域名填入即可。本例中的图片来自新浪博客,带图片的博客页面域名为http://blog.sina.com.cn。另外本程序是在python3.7版本下测试实现下载防盗链图片的,2.x版本未测试。本文仅用于技术交流使用,请勿用于恶意采集等用途!

图片防盗链的方式网上有很多教程这里不展开来讲,理论上只要是能给人用浏览器通过某些操作进行浏览的图片都能被破解防盗链。往上流传一种使用js的iframe框架进行盗链保护图片的引用,针对使用这种手段进行盗链的行为可以使用js动态修改的方法进行一定程度的防范,网友给出的示例:

<script>
$(function() {
    $("img").each(function(){
       var src = $(this).attr('src');
       .attr('src',newsrc);
     }
});
</script>

有没有更安全的防盗链、防盗图的方式呢?

1、把图片放到web不可访问的目录下,使用权限验证页面做中转输出,尤其是提供下载服务的网站现在已经有越来越多地使用动态生成一次性下载路径的方式防盗链。

2、图片存入数据库。

3、使用第三方服务商提供的云存储服务。对上传的文件进行相应的防盗链控制以及权限验证。一般都支持权限验证以及url过期时间的设置。

基于互联网精神,在注明出处的前提下本站文章可自由转载!

本文链接:https://ranjuan.cn/python-save-pic-referer/

赞赏

微信赞赏支付宝赞赏

发表评论