爬 虫 & 反爬虫
爬 虫:
指通过一定的规则策略,自动抓取、下载互联网上的网页内容,再按照某些规则算法抽取数据,形成所需要的数据集。有了数据,就有可能进行一些非法活动。
反爬虫:
一般指网站管理员使用一定的技术手段,防止爬虫程序对网站的网页内容进行爬取,以及阻止通过爬虫获取数据后的非法活动。
反爬方与爬虫方相互博弈,不断制造爬取难度,或一定程度上阻止了爬虫行为。爬虫方也在不断更新技术,来对抗种种反爬限制。
对抗过程
初始状态下,网站提供网站服务,未部署任何反爬措施。
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."
}
]
}
]
}
爬虫方再次爬取网页,发现超过一定阈值后,后续爬虫请求被阻止:
反爬方防护成功。
ROUND 2
爬虫方在初次交锋中 user-agent
被识别,这一次则使用随机的 user-agent
(scrapy 使用 random_user_agent
配置),成功爬取网页内容。如下图:
反爬方利用 user_agent
防护的措施失效后,可根据“爬虫