python3 图片referer防盗链的实现方法


Posted in Python onMarch 12, 2018

本篇文章主要破解referer防盗链技术

referer防盗链技术:

referer防盗链技术是服务器通过检查客户端提起的请求包内的referer字段来阻止图片下载的,如果referer字段错误,服务器会跳到另一个地址,这将导致错误的图片下载。

上面已经了解到了referer防盗链技术,下面直接上代码。

(我用的是python3,需要用到requests,html非系统包

下载方法:用python中的pip下载即可)

import urllib.request 
import requests 
import time 
import os 
import shutil 
from lxml import html 
def getPage(): 
  ''''' 
  从网站首页获取妹子的网址 
  ''' 
  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): 
  ''''' 
  获取一个妹子的标题和她的所有图片地址 
  ''' 
  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) 
  #使用代理浏览器访问网站 
  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()获取到的妹子的首页网址作为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信息。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Windows下Python的Django框架环境部署及应用编写入门
Mar 10 Python
Python松散正则表达式用法分析
Apr 29 Python
python素数筛选法浅析
Mar 19 Python
解决Pycharm下面出现No R interpreter defined的问题
Oct 29 Python
Python中fnmatch模块的使用详情
Nov 30 Python
python3实现多线程聊天室
Dec 12 Python
对python多线程SSH登录并发脚本详解
Feb 14 Python
Python Django切换MySQL数据库实例详解
Jul 16 Python
python读取指定字节长度的文本方法
Aug 27 Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
Mar 16 Python
Python基于当前时间批量创建文件
May 07 Python
用Python实现童年贪吃蛇小游戏功能的实例代码
Dec 07 Python
tensorflow构建BP神经网络的方法
Mar 12 #Python
Python管理Windows服务小脚本
Mar 12 #Python
python实现教务管理系统
Mar 12 #Python
python编写弹球游戏的实现代码
Mar 12 #Python
python学生管理系统代码实现
Apr 05 #Python
python图书管理系统
Apr 05 #Python
怎么使用pipenv管理你的python项目
Mar 12 #Python
You might like
php提示Failed to write session data错误的解决方法
2014/12/17 PHP
Yii框架在页面输出执行sql语句以方便调试的实现方法
2014/12/24 PHP
PHP 魔术变量和魔术函数详解
2015/02/25 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
thinkPHP5.0框架模块设计详解
2017/03/18 PHP
关于javaScript注册click事件传递参数的不成功问题
2014/07/18 Javascript
jquery插件corner实现圆角边框的方法
2015/03/09 Javascript
iframe跨域通信封装详解
2015/08/11 Javascript
理解AngularJs指令
2015/12/10 Javascript
jQuery中ajax错误调试分析
2016/12/01 Javascript
jQuery中Chosen三级联动功能实例代码
2017/03/07 Javascript
20行js代码实现的贪吃蛇小游戏
2017/06/20 Javascript
原生JS上传大文件显示进度条 php上传文件代码
2020/03/27 Javascript
vue-router 路由基础的详解
2017/10/17 Javascript
JsChart组件使用详解
2018/03/04 Javascript
JS原型与继承操作示例
2019/05/09 Javascript
[01:33]一分钟玩转DOTA2第三弹:DOTA2&DotA快捷操作大对比
2014/06/04 DOTA
python算法学习之基数排序实例
2013/12/18 Python
用Python中的字典来处理索引统计的方法
2015/05/05 Python
Python实现将SQLite中的数据直接输出为CVS的方法示例
2017/07/13 Python
python+opencv实现霍夫变换检测直线
2020/10/23 Python
python交互界面的退出方法
2019/02/16 Python
很酷的python表白工具 你喜欢我吗
2019/04/11 Python
python使用SQLAlchemy操作MySQL
2020/01/02 Python
sklearn和keras的数据切分与交叉验证的实例详解
2020/06/19 Python
Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单
2021/02/01 Python
html5构建触屏网站之touch事件介绍
2013/01/07 HTML / CSS
详解HTML5将footer置于页面最底部的方法(CSS+JS)
2018/10/11 HTML / CSS
如何设定的weblogic的热启动模式(开发模式)与产品发布模式
2012/09/08 面试题
个人职业生涯规划书1500字
2013/12/31 职场文书
机电专业大学生职业规划书范文
2014/02/25 职场文书
课外小组活动总结
2014/08/27 职场文书
商业门面租房协议书
2014/11/25 职场文书
部队个人年终总结
2015/03/02 职场文书
2016教师政治学习心得体会
2016/01/23 职场文书
python unittest单元测试的步骤分析
2021/08/02 Python