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制作花瓣网美女图片爬虫
Oct 28 Python
python3+PyQt5实现使用剪贴板做复制与粘帖示例
Jan 24 Python
详解Python函数可变参数定义及其参数传递方式
Aug 02 Python
详解Python之unittest单元测试代码
Jan 24 Python
使用Python+wxpy 找出微信里把你删除的好友实例
Feb 21 Python
django Admin文档生成器使用详解
Jul 22 Python
Python使用random模块生成随机数操作实例详解
Sep 17 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
Feb 07 Python
new_zeros() pytorch版本的转换方式
Feb 18 Python
postman和python mock测试过程图解
Feb 22 Python
如何创建一个Flask项目并进行简单配置
Nov 18 Python
Pandas数据结构之Series的使用
Mar 31 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
搜索引擎技术核心揭密
2006/10/09 PHP
解决中英文字符串长度问题函数
2007/01/16 PHP
php.ini-dist 和 php.ini-recommended 的区别介绍(方便开发与安全的朋友)
2012/07/01 PHP
利用php-cli和任务计划实现刷新token功能的方法
2017/05/03 PHP
Laravel 数据库加密及数据库表前缀配置方法
2019/10/10 PHP
laravel解决迁移文件一次删除创建字段报错的问题
2019/10/24 PHP
jquery tools 系列 scrollable学习
2009/09/06 Javascript
JSQL 基于客户端的成绩统计实现方法
2010/05/05 Javascript
屏蔽IE弹出"您查看的网页正在试图关闭窗口,是否关闭此窗口"的方法
2013/12/31 Javascript
js读写json文件实例代码
2014/10/21 Javascript
Linux下使用jq友好的打印JSON技巧分享
2014/11/18 Javascript
jQuery解析XML文件同时动态增加js文件的方法
2015/06/01 Javascript
JavaScript多图片上传案例
2015/09/28 Javascript
javascript中new关键字详解
2015/12/14 Javascript
jQuery实现网页顶部固定导航效果代码
2015/12/24 Javascript
JavaScript制作简单的日历效果
2016/03/10 Javascript
jQuery CSS3自定义美化Checkbox实现代码
2016/05/12 Javascript
AngularJS入门教程之路由机制ngRoute实例分析
2016/12/13 Javascript
从零学习node.js之简易的网络爬虫(四)
2017/02/22 Javascript
bootstrap datetimepicker日期插件超详细使用方法介绍
2017/02/23 Javascript
jQuery操作DOM_动力节点Java学院整理
2017/07/04 jQuery
关于Vue Webpack2单元测试示例详解
2017/08/14 Javascript
浅谈node的事件机制
2017/10/09 Javascript
js自定义trim函数实现删除两端空格功能
2018/02/09 Javascript
vue中,在本地缓存中读写数据的方法
2018/09/21 Javascript
Vue中Axios从远程/后台读取数据
2019/01/21 Javascript
jQuery事件多次绑定与解绑问题实例分析
2019/02/19 jQuery
关于Vue源码vm.$watch()内部原理详解
2019/04/26 Javascript
Nodejs libuv运行原理详解
2019/08/21 NodeJs
JS Ajax请求会话过期处理问题解决方法分析
2019/11/16 Javascript
nodejs中使用archive压缩文件的实现代码
2019/11/26 NodeJs
jQuery列表动态增加和删除的实现方法
2020/11/05 jQuery
python嵌套函数使用外部函数变量的方法(Python2和Python3)
2016/01/31 Python
澳大利亚领先的在线葡萄酒零售商:Get Wines Direct
2018/03/27 全球购物
2014公司党员自我评价范文
2014/09/11 职场文书
redis lua限流算法实现示例
2022/07/15 Redis