防盗链原理

http标准协议中有专门的字段记录referer
一来可以追溯上一个入站地址是什么
二来对于资源文件,可以跟踪到包含显示他的网页地址是什么
因此所有防盗链方法都是基于这个Referer字段
 
so:很多网站使用防盗链的方法来设置反爬虫机制,设置这种机制后通过图片路由直接访问会返回403错误,

其实解决办法很简单,加入header,然后把Referer写入即可!

  1. headers = {
  2. 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',
  3. 'Referer': url
  4. }

本文爬取https://www.mn52.com/网站上面的清纯美女图片,代码如下;

  1. # 需要的库
  2. import requests
  3. import re
  4. import os
  5. from multiprocessing import Pool
  6. # 主函数
  7. def get_img(url):
  8. # 设置图片存储路径
  9. path = './mn52/'
  10. if not os.path.exists(path):
  11. os.mkdir(path)
  12. # 请求头,因为图片路由有防盗链设置所以在headers中添加'Referer': url
  13. headers = {
  14. 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',
  15. 'Referer': url
  16. }
  17. try:
  18. # 请求主页面路由
  19. response = requests.get(url=url,headers=headers)
  20. # print(response.text)
  21. # 正则提取并遍历获取分页面
  22. res_paging = re.findall('<div class="picbox">.*?<a href="(.*?)"',response.text,re.S)
  23. for i in res_paging:
  24. # 拼接分页面路由
  25. url_infos = 'https://www.mn52.com' + i
  26. # 请求分页面路由
  27. res_details = requests.get(url=url_infos,headers=headers)
  28. # 遍历获取图片路由
  29. res_detail = re.findall('<div class="img-wrap">.*?<img .*?rel="(.*?)"/>',res_details.text,re.S)
  30. for i in res_detail:
  31. # 拼接图片路由
  32. img_urls = 'https:'+i
  33. # 给图片命名
  34. filename = i.split('/')[-1]
  35. # 判断图片是否已下载
  36. if os.path.exists(path+str(filename)):
  37. print('图片已存在')
  38. else:
  39. # 请求图片连接
  40. res = requests.get(url=img_urls,headers=headers)
  41. # 保存图片
  42. with open(path+str(filename),'wb') as f:
  43. f.write(res.content)
  44. # 打印下载信息
  45. print('正在下载:'+img_urls)
  46. except Exception as e:
  47. print(e)
  48. # 程序入口
  49. if __name__ == '__main__':
  50. # 构造完整路由
  51. urls = ['https://www.mn52.com/meihuoxiezhen/list_2_{}.html'.format(i) for i in range(1,94)]
  52. # 开启多进程
  53. pool = Pool()
  54. # 启动程序
  55. pool.map(get_img,urls)
  56. print('抓取完成')

图片比较多,需要一些时间下载,控制台显示的下载过程

打开文件查看图片是否下载成功

done

Python爬取mn52网站美女图片以及图片防盗链的解决方法的更多相关文章

  1. python爬取某个网站的图片并保存到本地

    python爬取某个网站的图片并保存到本地 #coding:utf- import urllib import re import sys reload(sys) sys.setdefaultenco ...

  2. 用Python爬取斗鱼网站的一个小案例

    思路解析: 1.我们需要明确爬取数据的目的:为了按热度查看主播的在线观看人数 2.浏览网页源代码,查看我们需要的数据的定位标签 3.在代码中发送一个http请求,获取到网页返回的html(需要注意的是 ...

  3. Python爬取某网站文档数据完整教程(附源码)

    基本开发环境 (https://jq.qq.com/?_wv=1027&k=NofUEYzs) Python 3.6 Pycharm 相关模块的使用 (https://jq.qq.com/?_ ...

  4. 使用python爬取百度贴吧内的图片

    1. 首先通过urllib获取网页的源码 # 定义一个getHtml()函数 def getHtml(url): try: page = urllib.urlopen(url) # urllib.ur ...

  5. 利用Python爬取电影网站

    #!/usr/bin/env python #coding = utf-8 ''' 本爬虫是用来爬取6V电影网站上的电影资源的一个小脚本程序,爬取到的电影链接会通过网页的形式显示出来 ''' impo ...

  6. python爬取电影网站信息

    一.爬取前提1)本地安装了mysql数据库 5.6版本2)安装了Python 2.7 二.爬取内容 电影名称.电影简介.电影图片.电影下载链接 三.爬取逻辑1)进入电影网列表页, 针对列表的html内 ...

  7. python爬取招聘网站数据

    # -*- coding: utf-8 -*- # 爬虫分析 from bs4 import BeautifulSoup from lxml import etree from selenium im ...

  8. Python爬取招聘网站数据,给学习、求职一点参考

    1.项目背景 随着科技的飞速发展,数据呈现爆发式的增长,任何人都摆脱不了与数据打交道,社会对于“数据”方面的人才需求也在不断增大.因此了解当下企业究竟需要招聘什么样的人才?需要什么样的技能?不管是对于 ...

  9. 使用Python爬取微信公众号文章并保存为PDF文件(解决图片不显示的问题)

    前言 第一次写博客,主要内容是爬取微信公众号的文章,将文章以PDF格式保存在本地. 爬取微信公众号文章(使用wechatsogou) 1.安装 pip install wechatsogou --up ...

随机推荐

  1. (三)Java数据结构和算法——冒泡、选择、插入排序算法

    一.冒泡排序 冒泡算法的运作规律如下: ①.比较相邻的元素.如果第一个比第二个大,就交换他们两个. ②.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.这步做完后,最后的元素会是最大的数( ...

  2. K8S使用入门-创建第一个容器

    前面两个教程我们已经使用kubekit将K8S搭建起来了.但是,没有将实际使用中需要在K8S上部署我们的容器创建起来的教程,都是耍流氓.所以,经过几番折腾,我回来给自己洗白了.之前一直卡在创建第一个容 ...

  3. Android 问题解决 HorizontalScrollView显示不全(转)

    原链接:https://www.jianshu.com/p/003adbcaff9d Android 问题解决 HorizontalScrollView显示不全 <HorizontalScrol ...

  4. Gerrit - 代码评审工具Gerrit简介与安装

    1 - 前言 Code Review 代码评审是指在软件开发过程中,对源代码的系统性检查,改进代码质量,查找系统缺陷,保证软件总体质量和提高开发者自身水平. 简单的说,Code Review是用来确认 ...

  5. Guide of Apache Directory Studio

    Default User and Password admin secret

  6. 【ARM-Linux开发】【CUDA开发】NVIDIA Jetson TX2 进阶:QtCreator安装

    Here we have a short article on installing Qt Creator on the NVIDIA Jetson TX1. Looky here: Note: Th ...

  7. 处理登录时,AJAX的状态码无权限情况

    $.ajaxSetup({ complete: function(XMLHttpRequest, textStatus) { }, error:function(jqXHR,textStatus,er ...

  8. 026 SSM综合练习02--数据后台管理系统--数据库表创建及SSM环境搭建

    1.数据库准备 本项目我们Oracle数据库,Oracle 为每个项目创建单独user,oracle数据表存放在表空间下,每个用户有独立表空间. (1)采用数据库管理员账号:SYSTEM,再配合数据库 ...

  9. Linux 下面 oracle 数据库连接工具的安装还有特殊字符密码登录的设置

    1. 下载Oracle的连接客户端 https://www.oracle.com/database/technologies/instant-client/downloads.html 2. 我这里仅 ...

  10. [转帖]征服诱人的Vagrant!

    征服诱人的Vagrant! https://www.cnblogs.com/hafiz/ 一.背景 ​ 最近要开始深入学习分布式相关的东西了,那第一步就是在自己的电脑上安装虚拟机,以前在Windows ...