首先声明:目标网址是从别人案例里得到的,内容你懂的。。。

本来闲来无事,学习下爬虫的知识,遇到恶心的反盗链,好在目标网址防盗链简单,代码里注明了如何去查看目标网址的防盗检查;

防盗链原理

http标准协议中有专门的字段记录referer

一来可以追溯上一个入站地址是什么

二来对于资源文件,可以跟踪到包含显示他的网页地址是什么

因此所有防盗链方法都是基于这个Referer字段

防盗链的作用

在很多地方,如淘宝、拍拍、有啊等C2C网站,发布商品需要对宝贝进行描述,就需要图片存储,而为了使自己辛辛苦苦拍摄的图片不被别人调用,就需要防盗链的功能。

提供防盗链的图片网站很多,如有照片、又拍网、百度相册、QQ相册、网易相册等等,但是既能支持网店外链,又有防盗链功能的网站很少;

上述原理部分具体详细解释请再百度;

#!/usr/bin/env python
#coding:utf-8
#date 20171202
#author maomao from bs4 import BeautifulSoup
import os
import requests
import sys reload(sys)
sys.setdefaultencoding('gbk') ###解决windows 下python 中文的编码问题 class DownLoadBeautiful(object): def __init__(self,URL):
self.URL = URL def allUrls(self):
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"
} ###设置请求的头部,伪装成浏览器
start_html = requests.get(self.URL,headers=headers) ###使用了更为人性化的requests来发送请求
soup = BeautifulSoup(start_html.text,'lxml') ###使用BS4 框架来解析网页源码
hreflist = soup.find('div',attrs={'class':'all'}).find_all('a') ###查找主页里面所有的图片链接html标签
for href in hreflist:
title = href.get_text() ###图片链接的具体中文描述
path = str(title).strip()
os.makedirs(os.path.join("D:\meizitu",path)) ###在本地创建保存
os.chdir("D:\meizi\\"+path)
hrefs = href['href'] ###获取图片的URL
html = requests.get(hrefs,headers=headers) ###请求图片的URL
html_soup = BeautifulSoup(html.text,'lxml') ###解析图片URL的网页源码
max_span = html_soup.find('div',attrs={'class':'pagenavi'}).find_all('span')[-2].get_text() ###分析图片一共多少页
for page in xrange(1,int(max_span)+1):
page_url = hrefs + '/' + str(page) ###拼接每张图片的URL
img_html = requests.get(page_url,headers=headers) ###请求每张图片的URL
img_soup = BeautifulSoup(img_html.text,'lxml') ###解析每张图片的源码
img_url = img_soup.find('div',attrs={'class':'main-image'}).find('img')['src'] ####查找实际每张图片的具体地址
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
'Referer':page_url
} ###因为网站有防盗链,重新设置了头部的Referer ;F12里打开网络监听,在Request Headers 里面
img = requests.get(img_url,headers=headers,stream=True) ###请求图片的实际URL
print img.url
name = img_url[-9:-4]
f = open(name+'.jpg','wb') ###将图片下载并保存,注意对于多媒体文件,必须使用二进制写入
f.write(img.content)
f.close() if __name__ == "__main__":
test = DownLoadBeautiful("http://www.mzitu.com/all")
test.allUrls()

  

以上代码,基本功能已实现,还有很多需要改进的地方:使用代理服务器、并发爬取、日志功能、容错机制等等;

过程是最终要的,爬虫的知识还有很多,继续学习ing

关于python 爬虫遇到的反盗链的更多相关文章

  1. Referer反反盗链

    0x00 前言 最近用Python非常多,确实感受到了Python的强大与便利.但同时我并没有相见恨晚的感觉,相反我很庆幸自己没有太早接触到Python,而是基本按着C→C++→Java→Python ...

  2. 通过设置Referer反"反盗链"

    package cn.searchphoto.util; import java.io.File; import java.io.FileOutputStream; import java.io.In ...

  3. 对付"反盗链"

    对付"反盗链" 某些站点有所谓的反盗链设置,其实说穿了很简单, 就是检查你发送请求的header里面,referer站点是不是他自己, 所以我们只需要像把headers的refer ...

  4. sevlet实现反盗链

    有时候为了网站的版权和安全问题,我们需要为我们的网站应用设置防盗链,这样可以保证我们网站的一些资源的安全性.防盗链的主要是通过获取http的请求头referer的信息来和我们的网站地址做对比,如果相同 ...

  5. 跳过图片反盗链js

    页面增加<iframe> <iframe id="ifa" style="display:none" /> 原来html: <im ...

  6. Python爬虫开发:反爬虫措施以及爬虫编写注意事项

  7. python 爬虫 urllib模块 反爬虫机制UA

    方法: 使用urlencode函数 urllib.request.urlopen() import urllib.request import urllib.parse url = 'https:// ...

  8. python爬虫之字体反爬

    一.什么是字体反爬? 字体反爬就是将关键性数据对应于其他Unicode编码,浏览器使用该页面自带的字体文件加载关键性数据,正常显示,而当我们将数据进行复制粘贴.爬取操作时,使用的还是标准的Unicod ...

  9. Python爬虫入门教程 23-100 石家庄链家租房数据抓取

    1. 写在前面 作为一个活跃在京津冀地区的开发者,要闲着没事就看看石家庄这个国际化大都市的一些数据,这篇博客爬取了链家网的租房信息,爬取到的数据在后面的博客中可以作为一些数据分析的素材. 我们需要爬取 ...

随机推荐

  1. NULL在oracle和mysql索引上的区别

    一.问题 oracle的btree索引不存储NULL值,所以用is null或is not null都不会用到索引范围扫描,但是在mysql中也是这样吗? 二.实验 先看看NULL在oracle(11 ...

  2. 【LeetCode】71. Simplify Path 解题报告(Python)

    [LeetCode]71. Simplify Path 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://f ...

  3. Pikachu漏洞练习-SQL-inject(二)

     

  4. 【Netty技术专题】「原理分析系列」Netty强大特性之ByteBuf零拷贝技术原理分析

    零拷贝Zero-Copy 我们先来看下它的定义: "Zero-copy" describes computer operations in which the CPU does n ...

  5. 【机器学*】k*邻算法-02

    k邻*算法具体应用:2-2约会网站配对 心得体会: 1.对所有特征值进行归一化处理:将特征值单位带来的距离影响消除,使所有特征同权重--然后对不同的特征进行加权2.对于相互独立的特征,可以通过建立(特 ...

  6. 阿里云视觉智能开放平台的人脸1:N搜索的开源替代-Java版(文末赋开源地址)

    ​ 一.人脸检测相关概念 人脸检测(Face Detection)是检测出图像中人脸所在位置的一项技术,是人脸智能分析应用的核心组成部分,也是最基础的部分.人脸检测方法现在多种多样,常用的技术或工具大 ...

  7. KMM

    目录 概 主要内容 Huang J., Smola A., Gretton A., Borgwardt K. & Scholkopf B. Correcting Sample Selectio ...

  8. 你真的会用react hooks?看看eslint警告吧!(如何发请求、提升代码性能等问题)

    前言 看过几个react hooks 的项目,控制台上几百条警告,大多是语法不规范,react hooks 使用有风险,也有项目直接没开eslint.当然,这些项目肯定跑起来了,因为react自身或者 ...

  9. <学习opencv>opencv数据类型

    目录 Opencv数据类型: 基础类型概述 固定向量类class cv::Vec<> 固定矩阵类cv::Matx<> 点类 Point class cv::Scalar 深入了 ...

  10. CSS过渡、CSS动画

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <script s ...