进击的反爬机制

爬 虫 & 反爬虫

爬 虫:
指通过一定的规则策略,自动抓取、下载互联网上的网页内容,再按照某些规则算法抽取数据,形成所需要的数据集。有了数据,就有可能进行一些非法活动。

反爬虫:
一般指网站管理员使用一定的技术手段,防止爬虫程序对网站的网页内容进行爬取,以及阻止通过爬虫获取数据后的非法活动。

反爬方与爬虫方相互博弈,不断制造爬取难度,或一定程度上阻止了爬虫行为。爬虫方也在不断更新技术,来对抗种种反爬限制。



对抗过程

初始状态下,网站提供网站服务,未部署任何反爬措施。


ROUND 1

爬虫方启动爬虫程序 (实验环境中使用 scrapy 爬取) 成功爬取网页内容。

反爬方发现有爬虫程序在对网站进行爬取,在分析日志中访问请求的 user-agent 后,加载 iWall3 Web应用防火墙模块,编写并加载防护规则 anti-crawlers-match-user-agents.json 如下:

{
   
  "info": {
   
    "title": "UA Crawlers list"
  },
  "rules": [
    {
   
        "meta": {
   
            "phase": 2,
            "desc": "https://github.com/coreruleset/coreruleset/blob/v3.3/dev/rules/crawlers-user-agents.data"
        },
        "if": {
   
            "variable": [
                "REQUEST_HEADERS", 
                "REQUEST_BODY", 
                "REQUEST_FILENAME"
            ],
            "transform": "lowercase",
            "operator": "contain",
            "pattern": [
                "80legs",
                "black widow",
                "blackwindow",
                "prowebwalker",
                "pymills-spider",
                "ahrefsBot",
                "piplbot",
                "grapeshotcrawler/2.0",
                "grapefx",
                "searchmetricsbot",
                "semrushbot",
                "rogerbot",
                "mj12bot",
                "owlin bot",
                "lingewoud-550-spyder",
                "wappalyzer",
                "scrapy"
            ]
        },
        "then": [
            "IP.bad_ua_count@20=IP.bad_ua_count+1",
            "if": "IP.bad_ua_count > 3",
            "then": {
   
                "action": "deny",
                "log": "Too frequnt access from crawlers."
            }
        ]
    }
  ]
}

爬虫方再次爬取网页,发现超过一定阈值后,后续爬虫请求被阻止:

pic02

反爬方防护成功。


ROUND 2

爬虫方在初次交锋中 user-agent 被识别,这一次则使用随机的 user-agent (scrapy 使用 random_user_agent 配置),成功爬取网页内容。如下图:

pic03

反爬方利用 user_agent 防护的措施失效后,可根据“爬虫

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值