精华内容
下载资源
问答
  • 反反爬虫机制浅析

    2019-10-17 19:17:17
    https://www.jianshu.com/p/8dd187672957

    https://www.jianshu.com/p/8dd187672957

    展开全文
  • 1. 通常防止爬虫主要有以下几个策略 (1)动态设置User-Agent(随机切换User-Agent,模拟不同的浏览器) 方法1: 修改setting.py中的User-Agent # Crawl responsibly by identifying yours...

    1. 通常防止爬虫被反主要有以下几个策略

    (1)动态设置User-Agent(随机切换User-Agent,模拟不同的浏览器)

    方法1: 修改setting.py中的User-Agent

    # Crawl responsibly by identifying yourself (and your website) on the user-agent
    USER_AGENT = 'Hello World'  #User-Agent

    方法2: 修改setting中的 DEFAULT_REQUEST_HEADERS

    # Override the default request headers:
     DEFAULT_REQUEST_HEADERS = {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Accept-Language': 'en',
        'User-Agent':'Hello World'
     }

    方法3 : 在代码中修改

    class HeadervalidationSpider(scrapy.Spider):
        name = 'headervalidation'
        allowed_domains = ['helloacm.com']
    
        def start_requests(self):
            header={'User-Agent':'Hello World'}
            yield scrapy.Request(url='http://helloacm.com/api/user-agent/',headers=header,callback=self.parse)
    
        def parse(self, response):
            print ('*'*20)
            print response.body
    (2)禁用Cookies

    就是不启用cookies middleware,不向Server发送cookies,有些网站通过cookie的使用发现爬虫行为

    1. 可以通过settings.py中的COOKIES_ENABLED , 控制 CookiesMiddleware 开启或关闭

    2. 设置延迟下载(防止访问过于频繁,设置为 2秒 或更高)DOWNLOAD_DELAY

    3. Google Cache 和 Baidu Cache:如果可能的话,使用谷歌/百度等搜索引擎服务器页面缓存获取页面数据。

    4. 使用IP地址池:VPN和代理IP,现在大部分网站都是根据IP来ban的

    5. 使用Crawlera(专用于爬虫的代理组件),正确配置和设置下载中间件后,项目所有的request都是通过crawlera发出。在settings中打开下载中间件

      DOWNLOADER_MIDDLEWARES = {
           'scrapy_crawlera.CrawleraMiddleware': 600
      }
      CRAWLERA_ENABLED = True
      CRAWLERA_USER = '注册/购买的UserKey'
      CRAWLERA_PASS = '注册/购买的Password'

    2.设置下载中间件(Downloader Middlewares)

    下载中间件是处于引擎(crawler.engine)和下载器(crawler.engine.download())之间的一层组件,可以有多个下载中间件被加载运行。

    1. 当引擎传递请求给下载器过程中,下载中间件可以对请求进行处理 (增加http header信息 proxy信息等);
    2. 在下载器完成http请求,传递响应给引擎过程中,下载中间件可以对响应进行处理(例如进行gzip的解压等)

    要激活下载器中间件组件,将其加入到 DOWNLOADER_MIDDLEWARES 设置中。 该设置是一个字典(dict),键为中间件类的路径,值为其中间件的顺序(order)。

    #开放下载中间件
    DOWNLOADER_MIDDLEWARES = {
        'mySpider.middlewares.MyDownloaderMiddleware': 543,
    }

    一般下载中间件可以定义一下一个或多个方法:

    process_request(self, request, spider)
    • 当每个request通过下载中间件时,该方法被调用。
    • process_request() 返回其中之一:None 、 Response 对象、 Request 对象或 raise IgnoreRequest:
      • 如果其返回 None ,Scrapy将继续处理该request,执行其他的中间件的相应方法,直到合适的下载器处理函数(download handler)被调用, 该request被执行(其response被下载)。
      • 如果返回 Response 对象,Scrapy将不会调用 任何 其他的 process_request() 或 process_exception() 方法。 已安装的中间件的 process_response() 方法则会在每个response返回时被调用。
      • 如果其返回 Request 对象,Scrapy则停止调用 process_request方法并重新调度返回的request。当新返回的request被执行后, 相应地中间件链将会根据下载的response被调用。
      • 如果其raise一个 IgnoreRequest 异常,则安装的下载中间件的 process_exception() 方法会被调用。如果没有任何一个方法处理该异常, 则request的errback(Request.errback)方法会被调用。如果没有代码处理抛出的异常, 则该异常被忽略且不记录(不同于其他异常那样)。
    • 参数:
      • request (Request 对象) – 处理的request
      • spider (Spider 对象) – 该request对应的spider

    process_response(self, request, response, spider)

    当下载器完成http请求,传递响应给引擎的时候调用

    • process_response() 必须返回以下其中之一: 返回一个 Response 对象、 返回一个 Request 对象或raise一个 IgnoreRequest 异常。
      • 如果其返回一个 Response (可以与传入的response相同,也可以是全新的对象), 该response会被在链中的其他中间件的 process_response() 方法处理。
      • 如果其返回一个 Request 对象,则中间件链停止, 返回的request会被重新调度下载。处理类似于 process_request() 返回request所做的那样。
      • 如果其抛出一个 IgnoreRequest 异常,则调用request的errback(Request.errback)。 如果没有代码处理抛出的异常,则该异常被忽略且不记录(不同于其他异常那样)。
    • 参数:
      • request (Request 对象) – response所对应的request
      • response (Response 对象) – 被处理的response
      • spider (Spider 对象) – response所对应的spider

    3 案例

    1. 创建middlewares.py文件

      Scrapy代理IP、Uesr-Agent的切换都是通过DOWNLOADER_MIDDLEWARES进行控制,我们在settings.py同级目录下创建middlewares.py文件,包装所有请求。

    # middlewares.py
    
    import random
    from settings import USER_AGENTS
    from settings import PROXIES
    
    # 随机的User-Agent
    class RandomUserAgent(object):
        def process_request(self, request, spider):
            useragent = random.choice(USER_AGENTS)
            request.headers.setdefault("User-Agent", useragent)
    
    # 随机代理IP
    class RandomProxy(object):
        def process_request(self, request, spider):
            proxy = random.choice(PROXIES)
            request.meta['proxy'] = "http://" + proxy['ip_port']
    1. 修改settings.py配置USER_AGENTS和PROXIES

    添加USER_AGENTS

    USER_AGENTS = [
        "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
        "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)"]

    添加代理IP设置PROXIES:

    PROXIES = [
        {'ip_port': '111.8.60.9:8123'},
        {'ip_port': '101.71.27.120:80'},
        {'ip_port': '122.96.59.104:80'},
        {'ip_port': '122.224.249.122:8088'},
    ]

    除非特殊需要,禁用cookies,防止某些网站根据Cookie来封锁爬虫。

    COOKIES_ENABLED = False

    设置延迟

    DOWNLOAD_DELAY = 3

    最后设置setting.py里的DOWNLOADER_MIDDLEWARES,添加自己编写的下载中间件类

    DOWNLOADER_MIDDLEWARES = {
        #'mySpider.middlewares.MyCustomDownloaderMiddleware': 543,
        'mySpider.middlewares.RandomUserAgent': 81,
        'mySpider.middlewares.ProxyMiddleware': 100
    }
    展开全文
  • 爬虫原理及反爬虫机制以及反爬虫方法的应对策略

    千次阅读 多人点赞 2019-04-27 23:00:04
    爬虫原理及反爬虫机制关于爬虫爬虫原理反爬虫机制1.检验数据头User-Agent反爬虫机制解析:2.访问频率限制或检验3.蜜罐技术反爬虫机制的应对方法1.设定Request Headers中的User-Agent2.设定随机访问频率3.代理IP或者...

    关于爬虫

    爬虫原理

    如果我们把互联网比作一张大的蜘蛛网,数据便是存放于蜘蛛网的各个节点,而爬虫就是一只小蜘蛛,

    沿着网络抓取自己的猎物(数据)爬虫指的是:向网站发起请求,获取资源后分析并提取有用数据的程序;

    从技术层面来说就是 通过程序模拟浏览器请求站点的行为,把站点返回的HTML代码/JSON数据/二进制数据(图片、视频) 爬到本地,进而提取自己需要的数据,存放起来使用;
    在这里插入图片描述
    爬虫的基本流程:
    模拟浏览器发送请求(获取网页代码)->提取有用的数据->存放于数据库或文件中
    在这里插入图片描述

    反爬虫机制

    1.检验数据头User-Agent反爬虫机制解析:

    当我们使用浏览器访问网站的时候,浏览器会发送一小段信息给网站,我们称为Request Headers,在这个头部信息里面包含了本次访问的一些信息,例如编码方式,当前地址,将要访问的地址等等。这些信息一般来说是不必要的,但是现在很多网站会把这些信息利用起来。其中最常被用到的一个信息,叫做“User-Agent”。网站可以通过User-Agent来判断用户是使用什么浏览器访问。不同浏览器的User-Agent是不一样的,但都有遵循一定的规则。
    但是如果我们使用Python的Requests直接访问网站,除了网址不提供其他的信息,那么网站收到的User-Agent是空。这个时候网站就知道我们不是使用浏览器访问的,于是它于是它就可以拒绝我们的访问。

    2.访问频率限制或检验

    大多数情况下,我们遇到的是访问频率限制。如果你访问太快了,网站就会认为你不是一个人。这种情况下需要设定好频率的阈值,否则有可能误伤。如果大家考过托福,或者在12306上面买过火车票,你应该会有这样的体会,有时候即便你是真的用手在操作页面,但是因为你鼠标点得太快了,它都会提示你: “操作频率太快…”。
    另外,还可以检验访问频率是否每一次都相同,如果都相同,那么一定是爬虫了.

    3.蜜罐技术

    蜜罐这个词,最早是来自于网络攻防中。一方会故意设置一个或者几个服务器,故意留下漏洞,让另一方轻易的入侵进来。这些被故意设置的服务器,就叫做蜜罐。里面可能安装了监控软件,用来监控入侵者。同时,蜜罐还可以拖延入侵者的时间。

    在反爬虫的机制中,也有一种蜜罐技术。网页上会故意留下一些人类看不到或者绝对不会点击的链接。由于爬虫会从源代码中获取内容,所以爬虫可能会访问这样的链接。这个时候,只要网站发现了有IP访问这个链接,立刻永久封禁该IP + User-Agent + Mac地址等等可以用于识别访问者身份的所有信息。这个时候,访问者即便是把IP换了,也没有办法访问这个网站了。给爬虫造成了非常大的访问障碍。

    反爬虫机制的应对方法

    1.设定Request Headers中的User-Agent

    检查User-Agent是一种最简单的反爬虫机制,而通过设定Request Headers中的User-Agent,可以突破这种机制。

    2.设定随机访问频率

    遇到访问频率限制可以采用设定随机访问频率的方式来突破.

    3.代理IP或者分布式爬虫

    另外,如果对页的爬虫的效率有要求,那就不能通过设定访问时间间隔的方法来绕过频率检查了,可以采用代理IP或者分布式爬虫:
    代理IP访问可以解决这个问题。如果用100个代理IP访问100个页面,可以给网站造成一种有100个人,每个人访问了1页的错觉。这样自然而然就不会限制你的访问了。
    分布式爬虫会部署在多台服务器上,每个服务器上的爬虫统一从一个地方拿网址。这样平均下来每个服务器访问网站的频率也就降低了。由于服务器是掌握在我们手上的,因此实现的爬虫会更加的稳定和高效。

    3.对于蜜罐技术可以采用定向爬虫

    由于定向爬虫的爬行轨迹是由我们来决定的,爬虫会访问哪些网址我们都是知道的。因此即使网站有蜜罐,定向爬虫也不一定会中招。

    参考博客:
    https://www.cnblogs.com/sss4/p/7809821.html
    https://blog.csdn.net/lujuntong/article/details/81952519

    展开全文
  • 反爬虫机制

    2020-02-26 19:31:48
    反爬虫什么是爬虫和反爬虫?简单爬虫高级爬虫传统反爬虫手段高级反爬虫手段反爬手段再升级 爬虫&反爬虫 什么是爬虫和反爬虫? 爬虫:使用任何技术手段,批量获取网站信息的一种方式。关键在于批量。 反爬虫...

    爬虫&反爬虫

    什么是爬虫和反爬虫?

    • 爬虫:使用任何技术手段,批量获取网站信息的一种方式。关键在于批量。

    • 反爬虫:使用任何技术手段,阻止别人批量获取自己网站信息的一种方式。关键也在于批量。

    • 误伤:在反爬虫的过程中,错误的将普通用户识别为爬虫。误伤率高的反爬虫策略,效果再好也不能用。

    • 拦截:成功地阻止爬虫访问。这里会有拦截率的概念。通常来说,拦截率越高的反爬虫策略,误伤的可能性就越高。因此需要做个权衡。

    • 资源:机器成本与人力成本的总和。

    简单爬虫

    通常编写爬虫需要经过这么几个过程:
    ——————————————————

    • 分析页面请求格式

    • 创建合适的http请求

    • 批量发送http请求,获取数据

    ——————————————————

    高级爬虫

    那么爬虫进阶应该如何做呢?通常所谓的进阶有以下几种:

    • 分布式

    通常会有一些教材告诉你,为了爬取效率,需要把爬虫分布式部署到多台机器上。这完全是骗人的。分布式唯一的作用是:防止对方封IP。封IP是终极手段,效果非常好,当然,误伤起用户也是非常爽的。

    • 模拟JavaScript

    有些教程会说,模拟javascript,抓取动态网页,是进阶技巧。但是其实这只是个很简单的功能。因为,如果对方没有反爬虫,你完全可以直接抓ajax本身,而无需关心js怎么处理的。如果对方有反爬虫,那么javascript必然十分复杂,重点在于分析,而不仅仅是简单的模拟。

    换句话说:这应该是基本功。

    • PhantomJs

    这个是一个极端的例子。这个东西本意是用来做自动测试的,结果因为效果很好,很多人拿来做爬虫。但是这个东西有个硬伤,就是:效率。此外PhantomJs也是可以被抓到的。

    传统反爬虫手段

    1、后台对访问进行统计,如果单个IP访问超过阈值,予以封锁。

    这个虽然效果还不错,但是其实有两个缺陷,一个是非常容易误伤普通用户,另一个就是,IP其实不值钱,几十块钱甚至有可能买到几十万个IP。

    2、后台对访问进行统计,如果单个session访问超过阈值,予以封锁。

    这个看起来更高级了一些,但是其实效果更差,因为session完全不值钱,重新申请一个就可以了。

    3、后台对访问进行统计,如果单个userAgent访问超过阈值,予以封锁。

    高级反爬虫手段

    数据加密解密:
    按照自己定义方法进行数据加密再解密
    ——————————————————

    • 服务端:数据的加工处理
    • 前端:通过接口数据进行解析
    • 服务端:接口数据的生产
    • 服务端:路由设置

    ——————————————————

    反爬手段再升级

    上面说的方法主要是针对数字做的反爬手段,如果要对汉字进行反爬怎么办?接下来提供几种方案

    方案1: 对于你站点频率最高的词云,做一个汉字映射,也就是自定义字体文件,步骤跟数字一样。先将常用的汉字生成对应的 ttf 文件;根据下面提供的链接,将 ttf 文件转换为 svg 文件,然后在下面的“字体映射”链接点进去的网站上面选择前面生成的 svg 文件,将svg文件里面的每个汉字做个映射,也就是将汉字专为 unicode 码(注意这里的 unicode 码不要去在线直接生成,因为直接生成的东西也就是有规律的。我给的做法是先用网站生成,然后将得到的结果做个简单的变化,比如将“e342”转换为 “e231”);然后接口返回的数据按照我们的这个字体文件的规则反过去映射出来。

    方案2: 将网站的重要字体,将 html 部分生成图片,这样子爬虫要识别到需要的内容成本就很高了,需要用到 OCR。效率也很低。所以可以拦截钓一部分的爬虫

    方案3: 看到携程的技术分享“反爬的最高境界就是 Canvas 的指纹,原理是不同的机器不同的硬件对于 Canvas 画出的图总是存在像素级别的误差,因此我们判断当对于访问来说大量的 canvas 的指纹一致的话,则认为是爬虫,则可以封掉它”。

    步骤点:

    1. 先根据你们的产品找到常用的关键词,生成词云
    2. 根据词云,将每个字生成对应的 unicode 码
    3. 将词云包括的汉字做成一个字体库
    4. 将字体库 .ttf 做成 svg 格式,然后上传到 icomoon 制作自定义的字体,但是有规则,比如 “年” 对应的 unicode 码是 “\u5e74” ,但是我们需要做一个 恺撒加密 ,比如我们设置 偏移量 为1,那么经过恺撒加密 “年”对应的 unicode 码是“\u5e75” 。利用这种规则制作我们需要的字体库
    5. 在每次调用接口的时候服务端做的事情是:服务端封装某个方法,将数据经过方法判断是不是在词云中,如果是词云中的字符,利用规则(找到汉字对应的 unicode 码,再根据凯撒加密,设置对应的偏移量,Demo 中为1,将每个汉字加密处理)加密处理后返回数据
    6. 客户端做的事情:
      • 先引入我们前面制作好的汉字字体库
      • 调用接口拿到数据,显示到对应的 Dom 节点上
      • 如果是汉字文本,我们将对应节点的 css 类设置成汉字类,该类对应的 font-family 是我们上面引入的汉字字体库

    ——————————————————
    资料收集源于网络方便个人学习记录使用:
    参考链接

    展开全文
  • woffxml解码猫眼网反爬虫机制的爬虫
  • 因为 Python 语法简介以及强大的第三方库,所以我们使用它来制作网络爬虫程序。网络爬虫的用途是进行数据采集,也就是将互联网中的数据采集过来。网络爬虫的难点其实并不...妹子图这个网站的反爬虫机制比较简单。...
  • 原标题:使用Python以及C++简单绕过反爬虫机制* 本文作者:我的gtr弹射起步,本文属FreeBuf原创奖励计划,未经许可禁止转载0×00 某些网站有反爬虫的机制对于刚学习了几天python的我,对爬虫颇有兴趣,但是某些“想...
  • 反反爬虫相关机制

    2019-02-28 20:43:34
    反反爬虫相关机制 Some websites implement certain measures to prevent bots from crawling them, with varying degrees of sophistication. Getting around those measures can be difficult and tricky, and may...
  • 爬虫和反爬虫机制

    2020-09-22 11:11:03
    反爬虫机制: 一。基于数据加密的反爬 1.通过Css来反爬虫 原理:源代码数据不为真的数据,需要通过css位移 2.通过js动态生成数据进行反爬 思路:解析关键js,获取数据生成流程,模拟生成数据 3.数据图片化 二。基于...
  • 很多网络爬虫在工作的时候发现,很多网站都有反爬虫机制,但很多人的工作就是要完成爬虫数据,那么,网络爬虫怎么应对反爬虫机制呢?一般反爬虫机制都是通过设置访问频率及访问的IP,如果抓取的频率过高,或者一直...
  • 爬虫-反爬虫-反反爬虫基本流程理解(一)...经过讨论,我们认为此次课设的目的为让我们更多的了解爬虫-反爬虫-反反爬虫机制,了解基础的反爬虫手段,与相应的反反爬虫模式,并根据网络资料对一些经典的反反爬虫案...
  • 用Python破解有道翻译反爬虫机制

    万次阅读 多人点赞 2017-07-18 12:53:12
    想要系统的学习Python网络爬虫的可以看:零基础:21天搞定Python分布式爬虫破解有道翻译反爬虫机制web端的有道翻译,在之前是直接可以爬的。也就是说只要获取到了他的接口,你就可以肆无忌惮的使用他的接口进行翻译...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,215
精华内容 486
关键字:

反反爬虫机制

爬虫 订阅