• 关于python 爬虫遇到的反盗链


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

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

    防盗链原理

    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

  • 相关阅读:
    二级分类的清空
    解决django.core.exceptions.ImproperlyConfigured: Cannot import 'book.apps.users'. Check that 'apps.users.apps.UsersConfig.name' is correct.
    解决使用manage.py task迁移数据库时遇到的问题:django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet
    下拉框:value的作用例子
    解决django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module. Did you install mysqlclient?
    pipenv install 安装虚拟OSError: Command E:\virtual_workshop\...T\Scripts\python.exe setuptools pip wheel failed with error code 2
    解决爬虫爬取豆瓣图片加载限制403
    select选择框选择后,可以直接使用:value的值
    (笔记)MQTT简介
    (笔记)进程间通信的六种方式
  • 原文地址:https://www.cnblogs.com/Mail-maomao/p/7955194.html
Copyright © 2020-2023  润新知