精华内容
下载资源
问答
  • 编程python3.5Django爬虫项目实战零基础入门到精通
  • 好神奇, 一句话就插入数据到数据库了。。。 try: #整理存入数据库。mysql编码格式需调整。 y = Blog(**data) y.save() print('ok') except: print("fail to insert into db!")

    好神奇,


    一句话就插入数据到数据库了。。。


    try:    #整理存入数据库。mysql编码格式需调整。
        y = Blog(**data)
        y.save()
        print('ok')
    except:
        print("fail to insert into db!")

    展开全文
  • Django拦截爬虫请求

    千次阅读 2016-10-02 15:52:10
    1.前言有时候我们可能不希望我们自己写的网站被爬虫爬。这时候我们就需要使用Django的中间件来完成。 上篇文章讲过中间件的具体配置。 Django中间件实现拦截器2.拦截器部分的具体实现这里使用了HTTP的UserAgent...

    1.前言

    有时候我们可能不希望我们自己写的网站被爬虫爬。这时候我们就需要使用Django的中间件来完成。
    上篇文章讲过中间件的具体配置。
    Django中间件实现拦截器

    2.拦截器部分的具体实现

    这里使用了HTTP的UserAgent字段来判断,可能有些爬虫修改了自身的UserAgent的参数来欺骗服务器,这种情况无法拦截。
    中间件的具体实现:

    from django.http.response import HttpResponseNotFound
    
    try:
        from django.utils.deprecation import MiddlewareMixin  # Django 1.10.x
    except ImportError
    展开全文
  • 最近一直在用django写一个个人音乐在线播放平台。 其中在网页数据保护方面,我采取了很多种的反爬虫措施,所以在本篇文章中,我从源码和实际操作上给大家分析下我所使用的反爬虫及其对应的破解技巧。 首先我们声明的...

    最近一直在用django写一个个人音乐在线播放平台。
    其中在网页数据保护方面,我采取了很多种的反爬虫措施,所以在本篇文章中,我从源码和实际操作上给大家分析下我所使用的反爬虫及其对应的破解技巧。

    首先我们声明的是,爬虫和反爬虫没有高低之分,虽然总有一种方法能突破你的安全保护。
    爬虫就像是一个钉子,反爬则是一扇铁窗。钉子坚持不懈,总能搞破窗。但是窗户是不能只针对于一点全力打造的。从此,修修补补,一般双方不下班不休。
    下面我把反爬和反反爬分开来写。这样爱好不同的人可以各取所需。

    反爬虫:

    1、我在django-views中设置了登录身份验证,设置了装饰器,通过META.get获取请求头,限制请求头和访问间隔。

    lxcsdn = ["https://blog.csdn.net/weixin_43582101/column/info/33034",
              "https://blog.csdn.net/weixin_43582101/article/details/86563910",
              "https://blog.csdn.net/weixin_43582101/article/details/86567367",
              ]
    '''设置请求头和访问间隔'''
    ips = [None]      #存储客户端最后一次访问的ip地址   空列表也是列表,None类型只有None一个值
    ## ips=[None] 为了防止 list index out of range。
    last = 0           #存储客服端最后一次访问时间
    def isCraw(func):
        def wrapper(*args,**kwargs):
            global ips,last       #声明全局变量
                   #request.META 是一个字典,包含了所有本次HTTP请求的Header信息
            agent = args[0].META.get('HTTP_USER_AGENT') #获取请求头部信息
            if 'Mozilla' not in agent and 'Safari' not in agent and 'Chrome'not in agent:
                return HttpResponse(random.choice(lxcsdn))
            else:
                ip = args[0].META.get('REMOTE_ADDR') #客户端IP地址
    # 什么是remote_addr:
    # remote_addr 是服务端根据请求TCP包的ip指定的。假设从client到server中间没有任何代理,
    # 那么web服务器(Nginx,Apache等)就会把client的IP设为IPremote_addr;
    # 如果存在代理转发HTTP请求,web服务器会把最后一次代理服务器的IP设置为remote_addr
                now = time.time()
                if ip==ips[0] and now-last<2:            #为了防止误伤
                    return HttpResponse("Are you curious about what happened? If you read this sentence carefully, you will know what happened. so the page is not found , But is you didn't find it ! " )
                last = now
                ips.pop()
                ips.append(ip)
                return func(*args,**kwargs)
        return wrapper
    

    !记得上面是一个装饰器。
    mete.get可以获取请求头部的信息。如果没有请求头User-Agent的话,就只能请求到我的csdn博客链接。在最下面记录了上一次到这一次访问的ip时间,如果频率小于2秒就会跳转到错误页面。

    2、设置了cookie和登录成功后的session,并通过url编码方式隐藏cookie
    cookie和session是网站的必须品,但是有的爬虫会通过cookie直接省去登录来访问你的主页从而提取数据。
    因为url编码方式不支持中文,所以我们可以设置为中文及外文的cookie。
    大致如下:

     response.set_cookie(getPassword(urlquote("你好")),getPassword(urlquote("公正法治民主")))
                            response.set_cookie((urlquote("아니카시유")),(urlquote("아니카시유아니카시유")))
    

    在控制台上显示的内容则是:
    在这里插入图片描述
    这可以起到一定程度的反爬虫作用。当然你也可以使用已经加密过的数据,来加大爬虫破解的难度。

    3、设置了自动刷新login页面,30秒计时。
    为了防止selenuim和无界面浏览器的侵袭,只能尽量的牺牲一点用户体验,我们把浏览器刷新时间控制在30秒左右,运行缓慢的无界面浏览器就会很难受了。
    这里我用JS来实现的。

       function myrefresh() {
            window.location.reload();
            }
            setTimeout('myrefresh()', 30000);
    

    4上面设置了30秒的时间是不够的,所以我在登录界面设置了验证码,这样也能隔绝一大部分的爬虫初学者。

    首先我写了一个鼠标移入显示图片的方法。因为要考虑到用户体验,又要考虑到selenuim的登录。所以我设置的标签为,鼠标移入外面的div,显示里面的图片,所以selenuim去获取里面图片的属性时,是获取不到的。
    在这里插入图片描述
    在这里插入图片描述
    点击刷新验证码:为什么要写这个呢,对方如果通过点击触发图片的话,可能会在点击很触发的图片已经跟开始的不一样了,这个我也没试过,应该是这样。

       function refresh(ths)
                {ths.src = ths.src + '?'}
    

    这个写起来特别简单,只需要在原click方法上给url+上一个?就可以重复请求。(如果两次请求url相同是不能刷新图片的)

    下面是验证码生成的代码:
    (本篇代码为了方便讲解,我都写在视图中,有不懂请留言)

    def auth_code(request):
        size = (143,40)
        width,height = size
        font_list = list("abcdefghklmpqrstuvwxyz*#%0123456789")
        c_chars = " ".join(random.sample(font_list,5))
        request.session['auth'] = c_chars.replace(' ','')
        img = Image.new("RGB",size,(30,31,42))
        draw = ImageDraw.Draw(img)
    
        # for i in range(random.randint(1,7)):
        #     draw.line(
        #         [
        #             (random.randint(0, 150), random.randint(0, 150)),
        #             (random.randint(0, 150), random.randint(0, 150))
        #         ],
        #         fill=(0, 0, 0)
        #     )
        # for j in range(1000):
        #     draw.point(
        #         (    random.randint(0, 150),
        #              random.randint(0, 150)
        #         ),
        #         fill = (0, 0, 0)
        #     )
    
        font = ImageFont.truetype("simsun.ttc", 23)
        draw.text((5,4),c_chars,font=font,fill="white")
        params = [1 - float(random.randint(1, 2)) / 100,
                  0,
                  0,
                  0,
                  1 - float(random.randint(1, 10)) / 100,
                  float(random.randint(1, 2)) / 500,
                  0.001,
                  float(random.randint(1, 2)) / 500
                  ]
        img = img.transform(size, Image.PERSPECTIVE, params)
        img = img.filter(ImageFilter.EDGE_ENHANCE_MORE)
    	img.save(buf,'png')
    	return HttpResponse(buf.getvalue(),)
    

    5、因为只是这样我感觉力度还是不够,有耐心的selenuim还是可以很快破解的。所以我从属性上来限制一下PhantomJS和selenuim。
    这个限制是用js来写的。
    …我刚突然发现我把这页的JS混淆压缩加密了,不过可以拿去直接用。

     window.onload=function(){
        if (navigator.webdriver) {
            eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('0 1=\'﷩\';',2,2,'var|a'.split('|'),0,{}));
    var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';
    var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';
    var a = '﷩';var a = '﷩';eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('0 1=\'﷩\';0 1=\'﷩\';0 1=\'﷩\';0 1=\'﷩\';',2,2,'var|a'.split('|'),0,{}));
                window.location.href="https://www.hexu0614.com/blog/blogs/12/"}
        else if(/HeadlessChrome/.test(window.navigator.userAgent)) {
            var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';
    var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';
    var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';
                window.location.href="https://www.hexu0614.com/blog/blogs/6/";}
        else if(navigator.plugins.length === 0 || !navigator.plugins.length) {
            var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';
    var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';
    var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';
                window.location.href="https://www.hexu0614.com/blog/blogs/33/";}
        else if(navigator.languages === "") {
            var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';
    var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';
    var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';
                window.location.href="https://www.hexu0614.com/blog/blogs/5/";}
    // {#  获取图片判断  #}
        var body = document.getElementsByTagName("body")[0];
        var image = document.createElement("img");
        image.src = "/static/tboys/img/login_ico.png";
        image.setAttribute("id", "auth_img");
        body.appendChild(image);
        image.onerror = function(){
            if(image.width === 0 && image.height === 0) {
                window.location.href="https://www.hexu0614.com";
            }}
        };
    

    首先上文中的方框是selenuim不能是别的字符集,会影响他的读取操作,有限制作用,如果添加的够多的话,可能会把他搞崩溃。
    第一个if的作用是,如果访问的驱动是webdriver的话,就把页面跳转到别的地方。后面的两个作用是:通过判断访问来源的长度和语言来判断是不是无界面浏览器。最后面那个是通过对图片的识别方式来判断是不是无界面浏览器。
    因为无界面浏览器在访问图片的时候,他的访问得到的图片宽高都是0;并且无界面浏览器的语言默认为空,长度默认为0.

    6、设置了form表单post请求,通过display:none+hidden进行加密隐藏
    这个是常见的form表单。我通过大量的display:none 和标签的隐藏,来干扰爬虫对页面的判断和控制。从而去增加爬虫的难度。
    并且可以给爬虫布置下一个蜜罐,让他一步一步进入错误的路径,并且毫不知情…
    在这里插入图片描述

    7、将主页音乐链接数据保存在.js中,JS文件经过混淆压缩加密。
    假设对方破解了验证,通过登录到了主页中。也是很难发现他所需要的数据的。页面信息中并没有url信息。
    在这里插入图片描述
    我的url如下:
    在这里插入图片描述
    由于我的数据没有更新完成,这里并没有使用JS加密。
    当你想加密JS可以去下图所示
    在这里插入图片描述
    或者自己找一个靠谱的,因为有的时候加密完,会把功能也给加密没了。
    大家要一边尝试一边加密。

    8、设置iframe。iframe 元素会创建包含另外一个文档的内联框架(即行内框架)
    效果是这样的。
    在这里插入图片描述
    页面:
    在这里插入图片描述
    控制台显示如下:
    在这里插入图片描述
    你可以通过多个iframe来干扰爬虫的视角,隐藏自己的url。
    在这里插入图片描述

    9、比较难受人的一种css方法,通过字符集映射来改变页面信息和源码信息的不同。
    利用前端字体文件(.ttf)混淆文本来阻止爬虫爬取网站数据.这个我不详细介绍了,举几个列子,大家可以网上搜索下具体操作。

    • 1 FONT-FACE拼凑式
    • 2 BACKGROUND拼凑式
    • 3 字符穿插式
    • 4 伪元素隐藏式
    • 5 元素定位覆盖式
    • 6 IFRAME异步加载式
    • 7 字符分割式
    • 8 字符集替换式

    在这里插入图片描述
    在这里插入图片描述
    看起来是不是很刺激。
    大家可以用fontcreator工具来构建自己的字体,然后在html页面导入自定义字体。

    还有点什么反爬方式,我忘记了。。先不写了。
    下面我们来逐条破解上面的反爬措施。

    反反爬虫:

    1、根据表单formdata数据,去提交对应数据。
    2、仔细仔细再仔细
    3、通过urldncode解密
    4、通过图像识别,打码平台,或者软件工具来进行验证码处理
    5、JS数据清洗,数据解密。
    6、根据网站设置的限制方式,改变我们请求频率和请求内容。
    7、用fontcreator来找出字符集加密规律。
    8、使用无头浏览器,就去逐情改变他的属性
    算了 不写了。反反爬的攻略太多了。大致上了解一下网上到处都是。
    等到你越到的时候再查就行了。

    展开全文
  • 一、Django和 MySQL版本兼容问题 1、Django2.0 后均不再支持 Python2,Django2.0是最后一个支持Python3.4的版本。 2、Django2.1 不再支持MySQL 5.5,必须MySQL 5.6版本以上 二、Nginx 在 python 虚拟环境中遇到的...

    一、Django  和 MySQL 版本兼容问题

    1、Django2.0 后均不再支持 Python2,Django2.0是最后一个支持Python3.4的版本。

    2、Django2.1 不再支持MySQL 5.5,必须MySQL 5.6版本以上

    二、Nginx 在 python 虚拟环境中遇到的问题

    1、需要在 settings.py 同级目录下的  __init__.py 中添加 虚拟路径包目录和包引入

    import sys
    sys.path.append("/web/env/ims/lib/python3.6/site-packages") # 虚拟环境包目录
    
    import pymysql
    pymysql.install_as_MySQLdb()

    2、上线后出现问题不会打印在屏幕上,需要查看错误日志。

    3、建立   requirements.txt  文件,在虚拟环境中更便捷的搭建环境,使用安装命令安装:   

    pip install -r requirements.txt   

    mysqlclient==1.3.13
    django==2.1.1
    PyMySQL==0.9.2

    三、Navicat连接服务器MySQL数据库出现的问题

    1、Host is not allowed to connect to this MySQL server

    【描述】数据库连接不被运行,原因在于权限管理中没有主机IP

    【解决】

    use mysql;

    select host,user from user;

    update user set host='%' where user='root';

    flush privileges;

    2、Authentication plugin 'caching_sha2_password' cannot be loaded;

    【描述】出现这个原因是mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password, 解决问题方法有两种,一种是升级navicat驱动,一种是把mysql用户登录密码加密规则还原成mysql_native_password.

    【解决】

    ① 先查看要给哪个用户修改规则,注意 root的host是否是 '%'

    use mysql;

    select user,host from user;

    ② 执行规则更新

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;   

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; 

    ③ 刷新

    FLUSH PRIVILEGES;

    ④ 重置密码

    alter user 'root'@'localhost' identified by '你要设置的新密码';

     

    展开全文
  • artproject django结合爬虫scrapy搭建小说网
  • 190409 django爬虫

    2019-04-09 14:18:11
    有的用户直接登录获取cookie,带上cookie请求数据。所以要加密。 三种反反爬: 模拟浏览器 间隔几秒 切换ip
  • Django爬虫和反反爬虫实战讲解

    千次阅读 2019-04-18 23:52:24
    爬虫 1、我在django-views中设置了登录身份验证,设置了装饰器,通过META.get获取请求头,限制请求头和访问间隔 lxcsdn = [“https://blog.csdn.net/weixin_43582101/column/info/33034”, ...
  • 运行django和scrapyd 运行django python manage.py runserver 奔跑 cd scrapy_app scrapyd 发送工作要求到scrapyd。 蜘蛛被分配了spider name curl ...
  • Python爬虫攻击Django框架测试

    万次阅读 2019-08-03 20:22:44
    结论:Django认证+权限+限流功能还是非常强大的,能反一般的爬虫,但若爬虫同时设置代理ip池+cookie池,还是照样可以拿到数据。 """ 1.django配置:任何人可访问,未登陆用户3次/分钟,登陆用户5次/分钟,requests发送...
  • django中的反爬虫

    2020-08-29 14:39:23
    django中的反爬虫django中,中间件实际上就是一个类,在请求到来和结束后、处理视图时以及响应返回前,django会根据自己的规则在合适的时机执行中间件中相应的方法,在中间件中可以实现并起作用的方法主要有: ...
  • scrapy漫画爬虫 django页面展示项目
  • 本文涉及了在django项目中引入scrapy爬虫,将爬虫数据写入django中的数据库,并使用scrapyd服务管理scrapy爬虫。 参考: 如何在django中运行scrapy框架 django搭建博客之集成scrapy Django项目中运行Scrapy项目 ...
  • django在线启动爬虫

    2019-10-01 14:04:31
    #在线启动爬虫重点部分 def start_scrapy(request): # 获取页面传参,要区分请求类型是POST还是GET,不同请求用不同的方法接收参数 year = request.POST.get('year') jd = request.POST.get('jd') url = '...
  • DJango跟Scrapy爬虫框架实现对Zol硬件评价进行情绪分析并判断是否购买的例子 主要展示如何用Django跟Scrapy框架的使用 用Scrapyd API来实现在网页中调用爬虫
  • django-dynamic-scraper - 通过Django管理界面创建爬虫
  • 基于Django以及requests网易云爬虫的音乐网站
  • 1. 首先我们修改爬虫文件的init... 在Django需要调用的模块中这样写 #获取前端传来的字段信息 keyWord = request.POST['keyWord'] startTime = request.POST['startTime'] endTime = request.POST['endTime'] url = '...
  • 爬虫django结合开发

    千次阅读 2018-06-08 20:31:56
    Python爬虫django框架开发小说网站 第三方包:mysqldb,django1.10.8 Python版本2.7 先写python爬虫爬取全书网所有小说的书名,章节,内容等到mysql数据库中,然后再将python爬虫爬取的小说内容在django...
  • 说明:本文是基于python的开发环境下编写爬虫程序,并利用Django框架进行前端页面展示和后端数据管理。 第一步:分析网站数据 百度输入酷我音乐,搜寻酷我音乐官网并打开。 按下F12或者鼠标右击空白处,点击“检查”...
  • django用表单实现图片爬虫

    千次阅读 2014-03-10 22:50:32
    这一次讲django实现的爬虫,而且是爬图片。 爬图片会有两个问题: 1. 爬到的图片怎么保存? 2. 怎么将爬到的图片显示在页面上? 接下来我们一一解答。 第一,我们要将爬到的图片显示出来,那就要图片的链接,...
  • ElasticSearch+Django打造个人爬虫搜索引擎 学习至慕课课程 利用ElasticSearch数据库,Python的Django框架,配合scrapy爬虫,打造属于自己的搜索引擎。 Windows10本地运行都OK,docker服务器环境配置到一半发现Java...
  • 爬虫开发步骤 一、环境介绍 开发工具:pycharm(社区版本) python版本:3.7.4 scrapy版本:1.7.3 二、整体步骤 1.创建项目:scrapy startproject xxx(项目名字,不区分大小写) 2.明确目标 (编写items.py):明确...
  • django+spider简易爬虫搭建

    千次阅读 2017-11-17 18:28:02
    今天有空,记录一下搭建爬取链家北京二手房房价的过程,其目的是为了记录每套房源的房价调整过程。我记得12~13年的时候,链家app是可以看到每套房源的价格波动的,现在的app不行了。...django-admin startproject ho
  • django项目集成scrapy爬虫,并通过安装scrapyd实现在django项目中启动及管理scrapy爬虫,并在线查看爬取的数据,该项目仅供学习
  • 需要音乐接口的测试,可是用网易云的开放接口比较麻烦,也不能进行测试,这里也是和我说了一下,所以就用爬虫写了个简单网易云歌曲URL的爬虫,把数据存入mysql数据库,再利用django封装装了一个简单的API接口,给...
  • 报错总结目录版本不兼容问题问题原因解决方法 版本不兼容问题 问题原因 ERROR: xadmin 0.6.1 has ...ERROR: gerapy 0.9.3a2 has requirement django==1.11.26, but you'll have django 3.0.3 which is incompatible
  • 新入门Django,现在已经写好了一个Python爬虫,直接用Python跑测试没问题, ------在Django项目中加入了一个新的爬虫app,用model创建了表格,和展示爬虫的html ------但是runserver, 以后查看db.sqlite3里面对应的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,920
精华内容 7,568
关键字:

django爬虫服务

爬虫 订阅