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内置的模块与函数进行不同进制的数的转换
Mar 12 Python
Python基于sftp及rsa密匙实现远程拷贝文件的方法
Sep 21 Python
python 与GO中操作slice,list的方式实例代码
Mar 20 Python
Django实现快速分页的方法实例
Oct 22 Python
numpy中的高维数组转置实例
Apr 17 Python
Python获取系统所有进程PID及进程名称的方法示例
May 24 Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
Jul 09 Python
Python基于模块Paramiko实现SSHv2协议
Apr 28 Python
OpenCV 之按位运算举例解析
Jun 19 Python
python 多线程共享全局变量的优劣
Sep 24 Python
python+excel接口自动化获取token并作为请求参数进行传参操作
Nov 10 Python
利用Selenium添加cookie实现自动登录的示例代码(fofa)
May 08 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下检测字符串是否是utf8编码的代码
2008/06/28 PHP
在PHP中使用curl_init函数的说明
2010/11/02 PHP
PHP sprintf()函数用例解析
2011/05/18 PHP
关于IIS php调用com组件的权限问题
2012/01/11 PHP
PHP数组相加操作及与array_merge的区别浅析
2016/11/26 PHP
微信开发之获取JSAPI TICKET
2017/07/07 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
2019/10/15 PHP
javascript写的一个链表实现代码
2009/10/25 Javascript
js实现全屏漂浮广告移入光标停止移动
2013/12/02 Javascript
jQuery实现批量判断表单中文本框非空的方法(2种方法)
2015/12/09 Javascript
XML、HTML、CSS与JS的区别整理
2016/02/18 Javascript
js中数组结合字符串实现查找(屏蔽广告判断url等)
2016/03/30 Javascript
使用原生js封装的ajax实例(兼容jsonp)
2017/10/12 Javascript
详解Vue组件实现tips的总结
2017/11/01 Javascript
在vue中通过axios异步使用echarts的方法
2018/01/13 Javascript
解决vue+webpack打包路径的问题
2018/03/06 Javascript
详解如何制作并发布一个vue的组件的npm包
2018/11/10 Javascript
JS apply用法总结和使用场景实例分析
2020/03/14 Javascript
js实现消灭星星(web简易版)
2020/03/24 Javascript
[01:18:33]Secret vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
[49:29]LGD vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
举例讲解Python中的死锁、可重入锁和互斥锁
2015/11/05 Python
用pickle存储Python的原生对象方法
2017/04/28 Python
从请求到响应过程中django都做了哪些处理
2018/08/01 Python
python基于itchat模块实现微信防撤回
2019/04/29 Python
Python文件操作函数用法实例详解
2019/12/24 Python
python匿名函数lambda原理及实例解析
2020/02/07 Python
Django实现图片上传功能步骤解析
2020/04/22 Python
医学毕业生自我鉴定
2013/10/30 职场文书
初中音乐教学反思
2014/01/12 职场文书
教育技术学专业职业规划书
2014/03/03 职场文书
承诺保证书格式
2015/02/28 职场文书
工程合作意向书范本
2015/05/09 职场文书
大学学生会主席竞选稿
2015/11/19 职场文书
字节飞书面试promise.all实现示例
2022/06/16 Javascript
win10壁纸在哪个文件夹 win10桌面背景图片文件位置分享
2022/08/05 数码科技