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 相关文章推荐
Python类的基础入门知识
Nov 24 Python
Python功能键的读取方法
May 28 Python
python安装oracle扩展及数据库连接方法
Feb 21 Python
python requests post多层字典的方法
Dec 27 Python
Python列表(list)所有元素的同一操作解析
Aug 01 Python
详解Python time库的使用
Oct 10 Python
pandas 缺失值与空值处理的实现方法
Oct 12 Python
Django 解决distinct无法去除重复数据的问题
May 20 Python
python脚本和网页有何区别
Jul 02 Python
python mock测试的示例
Oct 19 Python
Python修改DBF文件指定列
Dec 19 Python
使用sublime text3搭建Python编辑环境的实现
Jan 12 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
vBulletin HACK----显示话题大小和打开新窗口于论坛索引页
2006/10/09 PHP
php截取字符串并保留完整xml标签的函数代码
2013/02/06 PHP
PHP常用的缓存技术汇总
2014/05/05 PHP
php中print(),print_r(),echo()的区别详解
2014/12/01 PHP
php采用session实现防止页面重复刷新
2015/12/24 PHP
php mysql procedure实现获取多个结果集的方法【基于thinkPHP】
2016/11/09 PHP
基于thinkPHP类的插入数据库操作功能示例
2017/01/06 PHP
小议Function.apply() 之一------(函数的劫持与对象的复制)
2006/11/30 Javascript
Jquery 数据选择插件Pickerbox使用介绍
2012/08/24 Javascript
javascript事件模型实例分析
2015/01/30 Javascript
Node.js抓取中文网页乱码问题和解决方法
2015/02/10 Javascript
原生JS实现仿淘宝网左侧商品分类菜单效果代码
2015/09/10 Javascript
js基本算法:冒泡排序,二分查找的简单实例
2016/10/08 Javascript
通过说明与示例了解js五种设计模式
2019/06/17 Javascript
使用 Vue 实现一个虚拟列表的方法
2019/08/20 Javascript
p5.js临摹旋转爱心
2019/10/23 Javascript
微信小程序 flexbox layout快速实现基本布局的解决方案
2020/03/24 Javascript
vue+iview框架实现左侧动态菜单功能的示例代码
2020/07/23 Javascript
[50:01]Ti4 冒泡赛第二天 NEWBEE vs Titan
2014/07/15 DOTA
Python实现合并同一个文件夹下所有PDF文件的方法示例
2018/04/28 Python
Python格式化日期时间操作示例
2018/06/28 Python
Python使用win32com模块实现数据库表结构自动生成word表格的方法
2018/07/17 Python
python中join()方法介绍
2018/10/11 Python
Django 开发环境配置过程详解
2019/07/18 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
2019/08/05 Python
Python3标准库之threading进程中管理并发操作方法
2020/03/30 Python
Python如何操作office实现自动化及win32com.client的运用
2020/04/01 Python
KIKO MILANO英国官网:意大利知名化妆品和护肤品品牌
2017/09/25 全球购物
Linux操作面试题
2012/05/16 面试题
师范生实习自我鉴定
2013/11/01 职场文书
如何打造一封优秀的留学推荐信
2014/01/25 职场文书
公司停电通知
2015/04/15 职场文书
护士业务学习心得体会
2016/01/25 职场文书
浅谈由position属性引申的css进阶讨论
2021/05/25 HTML / CSS
为什么MySQL不建议使用SELECT *
2022/04/03 MySQL
MySQL下载安装配置详细教程 附下载资源
2022/09/23 MySQL