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

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

防盗链原理

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

最新文章

  1. bootstrap + requireJS+ director+ knockout + web API = 一个时髦的单页程序
  2. iOS开发小技巧--自定义带有占位文字的TextView(两种方式)
  3. Android--Retrofit+RxJava的简单封装(三)
  4. 泛函编程(8)-数据结构-Tree
  5. Windows Phone 简介
  6. BYOA,也许是IT大叔眼中的新生代萝莉
  7. 撸一撸腾讯的微信支付(C#)
  8. Linux 下安装python软件包(pip、nose、virtualenv、distribute )
  9. 30种IT技能让你年薪过10万美元!
  10. OpenGL ES着色器语言之变量和数据类型(二)(官方文档第四章)
  11. 界面编程与视图(View)组件
  12. IT职场经纬 |阿里web前端面试考题,你能答出来几个?
  13. Linux下让一个程序开机自动启动
  14. java反射获取字段的属性值,以及为字段赋值等方法
  15. dojo页面调试出错
  16. Mac ssh启动和停止
  17. CVE-2013-2551
  18. 黑镜第一至二季/全集Black Mirror迅雷下载
  19. Java编程练习题
  20. 卢卡斯定理Lucas

热门文章

  1. SpringBoot 设置请求字符串格式为UTF-8
  2. IDEA设置默认maven配置
  3. win10+vs2015编译nanogui
  4. Git统计代码变化率
  5. 【九度OJ】题目1018:统计同成绩学生人数 解题报告
  6. Lightoj1011 - Marriage Ceremonies
  7. 第十一个知识点:DLP,CDH和DDH问题都是什么?
  8. Handing Incomplete Heterogeneous Data using VAEs
  9. Not All Samples Are Created Equal: Deep Learning with Importance Sampling
  10. [CNKI]个人论文收录