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数组复制拷贝的实现方法
Jun 09 Python
python开发之函数定义实例分析
Nov 12 Python
win系统下为Python3.5安装flask-mongoengine 库
Dec 20 Python
Python编程pygame模块实现移动的小车示例代码
Jan 03 Python
python绘制简单彩虹图
Nov 19 Python
Python正则表达式匹配日期与时间的方法
Jul 07 Python
python中sort和sorted排序的实例方法
Aug 26 Python
python打印直角三角形与等腰三角形实例代码
Oct 20 Python
Pytorch之parameters的使用
Dec 31 Python
MNIST数据集转化为二维图片的实现示例
Jan 10 Python
Django实现whoosh搜索引擎使用jieba分词
Apr 08 Python
Python实现邮件发送的详细设置方法(遇到问题)
Jan 18 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 json与xml序列化/反序列化
2013/10/28 PHP
PHP、Nginx、Apache中禁止网页被iframe引用的方法
2020/10/01 PHP
PHP合并静态文件详解
2014/11/14 PHP
支付宝接口开发集成支付环境小结
2015/03/17 PHP
php简单统计中文个数的方法
2016/09/30 PHP
PHP如何解决微信文章图片防盗链
2020/12/09 PHP
js中各浏览器中鼠标按键值的差异
2011/04/07 Javascript
基于JavaScript实现 获取鼠标点击位置坐标的方法
2013/04/12 Javascript
Javascript基础教程之for循环
2015/01/18 Javascript
Jquery中offset()和position()的区别分析
2015/02/05 Javascript
基于JavaScript获取鼠标位置的各种方法
2015/12/16 Javascript
JQuery ztree 异步加载实例讲解
2016/02/25 Javascript
Angularjs中的事件广播 —全面解析$broadcast,$emit,$on
2016/05/17 Javascript
javascript实现将数字转成千分位的方法小结【5种方式】
2016/12/11 Javascript
jQuery简单实现的HTML页面文本框模糊匹配查询功能完整示例
2018/05/09 jQuery
在微信小程序里使用watch和computed的方法
2018/08/02 Javascript
JS的Ajax与后端交互数据的实例
2018/08/08 Javascript
详解KOA2如何手写中间件(装饰器模式)
2018/10/11 Javascript
vue祖孙组件之间的数据传递案例
2020/12/07 Vue.js
[00:12]DAC2018 Miracle-站上中单舞台,他能否再写奇迹?
2018/04/06 DOTA
python3访问sina首页中文的处理方法
2014/02/24 Python
python提取页面内url列表的方法
2015/05/25 Python
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
2017/08/08 Python
Python从零开始创建区块链
2018/03/06 Python
Python基于更相减损术实现求解最大公约数的方法
2018/04/04 Python
Python Web框架之Django框架Form组件用法详解
2019/08/16 Python
python对象销毁实例(垃圾回收)
2020/01/16 Python
CSS3实现粒子旋转伸缩加载动画
2016/04/22 HTML / CSS
100%法国制造的游戏和玩具:Les Jouets Français
2021/03/02 全球购物
财务管理专业推荐信
2013/11/19 职场文书
办公室秘书自我鉴定
2014/01/18 职场文书
党员学习群众路线教育实践活动对照检查材料
2014/09/23 职场文书
水电工岗位职责
2015/02/14 职场文书
goland设置颜色和字体的操作
2021/05/05 Golang
使用python+pygame开发消消乐游戏附完整源码
2021/06/10 Python
使用Springboot实现健身房管理系统
2021/07/01 Java/Android