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中 Lambda表达式全面解析
Nov 28 Python
初学python的操作难点总结(新手必看篇)
Aug 03 Python
教你用Python写安卓游戏外挂
Jan 11 Python
Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
Apr 19 Python
python在回调函数中获取返回值的方法
Feb 22 Python
Python脚本修改阿里云的访问控制列表的方法
Mar 08 Python
python中列表的切片与修改知识点总结
Jul 23 Python
Python 转换RGB颜色值的示例代码
Oct 13 Python
Python稀疏矩阵及参数保存代码实现
Apr 18 Python
Django nginx配置实现过程详解
Sep 10 Python
python调用ffmpeg命令行工具便捷操作视频示例实现过程
Nov 01 Python
Python  lambda匿名函数和三元运算符
Apr 19 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自动更新新闻DIY
2006/10/09 PHP
基于php下载文件的详解
2013/06/02 PHP
PHP依赖注入原理与用法分析
2018/08/21 PHP
JS 文件大小判断的实现代码
2010/04/07 Javascript
Jquery图形报表插件 jqplot简介及参数详解
2012/10/10 Javascript
如何在指定的地方插入html内容和文本内容
2013/12/23 Javascript
详解JS函数重载
2014/12/04 Javascript
JavaScript实现iframe自动高度调整和不同主域名跨域
2016/02/27 Javascript
jQuery插件HighCharts实现的2D对数饼图效果示例【附demo源码下载】
2017/03/09 Javascript
Linux使用Node.js建立访问静态网页的服务实例详解
2017/03/21 Javascript
微信小程序 页面跳转如何实现传值
2017/04/05 Javascript
JavaScript-定时器0~9抽奖系统详解(代码)
2017/08/16 Javascript
浅析node.js的模块加载机制
2018/05/25 Javascript
js运算符的一些特殊用法
2018/07/29 Javascript
详解vue指令与$nextTick 操作DOM的不同之处
2018/08/02 Javascript
手把手教你使用TypeScript开发Node.js应用
2019/05/06 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
微信小程序canvas截取任意形状的实现代码
2020/01/13 Javascript
Vue触发input选取文件点击事件操作
2020/08/07 Javascript
React冒泡和阻止冒泡的应用详解
2020/08/18 Javascript
[01:21:58]守擂赛DOTA2第一周决赛
2020/04/22 DOTA
python实现网页链接提取的方法分享
2014/02/25 Python
用Python和MD5实现网站挂马检测程序
2014/03/13 Python
python 列表,数组,矩阵两两转换tolist()的实例
2018/04/04 Python
解决python中os.listdir()函数读取文件夹下文件的乱序和排序问题
2018/10/17 Python
Django使用 Bootstrap 样式修改书籍列表过程解析
2019/08/09 Python
python爬虫开发之使用python爬虫库requests,urllib与今日头条搜索功能爬取搜索内容实例
2020/03/10 Python
Python AutoCAD 系统设置的实现方法
2020/04/01 Python
iHerb台湾:维生素、保健品和健康产品
2018/01/31 全球购物
伊莱克斯(Electrolux)俄罗斯网上商店:瑞典家用电器品牌
2021/01/23 全球购物
2014个人年度工作总结
2014/12/15 职场文书
2014年语文教师工作总结
2014/12/18 职场文书
现实表现材料范文
2014/12/23 职场文书
退休教师追悼词
2015/06/23 职场文书
导游词书写之黄山
2019/08/06 职场文书
大学生暑期实践报告之企业经营管理
2019/08/08 职场文书