美文网首页爬虫
Scrapy进阶-防ban策略

Scrapy进阶-防ban策略

作者: xuzhougeng | 来源:发表于2016-06-08 21:32 被阅读1048次

    再识Scrapy-下载豆瓣图书封面中我们学会了如何下载图片。但是在大批量爬取的时候我们最怕的就是被网站ban了。官网提供了几种方法:

    1. download_delay

    因为我们要大批量爬取网页,为了防止过分密集影响到别人的服务器,建议在setting.py中设置DOWNLOAD_DELAY=2,最好是在晚上睡觉的时候跑,这样虽然速度慢了一点,但是被dan的几率会降低很多哦。

    2. 禁止cookies

    cookies,是指某些网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密),有的时候我们需要登录网站进行爬取数据,所以cookies很重要,但是当我们不需要让网站记住我们的是谁的时候,那么禁止cookies也就防止了可能使用cookies识别爬虫轨迹的网站得逞。
    在settings.py中设置COOKIES_ENABLES=False。也就是不启用cookies middleware,不想web server发送cookies。

    3. 变换user agent

    user agent是指包含浏览器信息、操作系统信息等的一个字符串,也称之为一种特殊的网络协议。服务器通过它判断当前访问对象是浏览器、邮件客户端还是网络爬虫。之前爬取豆瓣的时候我们就把原来自表爬虫身份的user agent改了。

    user agent

    如果只用一个user agent 爬取太多次也会让服务器产生怀疑的,所以我们需要大量的user agent用来建立user agent pool。并通过DOWNLOADER_MIDDLEWARES切换agent。

    DOWNLOADER_MIDDLEWARES

    建立一个middlewares.py, 内容如下:

    # -*- coding: utf-8 -*-
    import random
    from scrapy.conf import settings
    
    class RandomUserAgent(object):
        """Randomly rotate user agents based on a list of predefined ones"""
        def __init__(self, agents):
            self.agents = agents
    
        @classmethod
        def from_crawler(cls, crawler):
            return cls(crawler.settings.getlist('USER_AGENTS'))
    
        def process_request(self, request, spider):
            ua = random.choice(self.agents)
            request.headers.setdefault('User-Agent', ua)
    

    下面两个方法目前不会,先占位

    4. 使用proxy

    5. 分布式爬取

    相关文章

      网友评论

        本文标题:Scrapy进阶-防ban策略

        本文链接:https://www.haomeiwen.com/subject/xepjdttx.html