陈辉
摘 要
本文阐述了网络爬虫及封锁网络爬虫最常用的四种技术:时间间隔封锁,cookie封锁,User-Agent封锁,IP封锁;分析了上述封锁技术的基本原理,提出了针对上述封锁技术的破解方法,并给出了基于Scrapy框架的破解封锁实现代码。
关键词
Scrapy;网络爬虫;时间间隔封锁;cookie封锁;User-Agent封锁;IP封锁
中图分类号: TP393.092;TP391.3 文献标识码: A
DOI:10.19694/j.cnki.issn2095-2457 . 2020 . 06 . 82
0 引言
网络爬虫,即网络机器人,是按照一定的规则,自动抓取互联网信息的程序。在各种应用场景中,通过应用网络爬虫技术,网络机器人可以在网站上自动获取相关的专业数据,从而实现快速、准确、完整地获取海量数据,为正确做出各种决策提供数据支持。有关调查研究证明,网络上60%的访问量都来自网络爬虫[1]。对于网站方,网络爬虫占用其过多的资源,并且其未能从爬虫的访问中受益,因此网站方采取多种技术措施拒绝网络爬虫的访问,即封锁网络爬虫。
当前,封锁网络爬虫的技术主要有[2]:时间间隔封锁,cookie封锁,User-Agent封锁,IP封锁等。时间间隔封锁:通过两次网页请求的时间间隔判断访问是否由网络爬虫引发,当时间间隔<0.1秒时,可判断为网络爬虫,从而拒绝其访问;cookie封锁:网站可通过cookie来确定用户身份,当一连续网页请求来自同一cookie时,此时可判断访问由网络爬虫引发,从而拒绝其访问;User-Agent封锁:User-Agent是浏览器的身份标识,通过User-Agent可确定浏览器的类型,网站可将频繁提交请求的User-Agent作为爬虫标志,将其列入黑名单;IP封锁:同一IP短时间连续访问同一站点,如访问数量过大可以判断由网络爬虫引发,从而拒绝其访问。以上为封锁网络爬虫最常用的4种技术,破解上述封锁技术是本文主要解决的问题。本文以网络爬虫Scrapy框架为基础,给出以上4种封锁技术的破解方法及实现代码。
1 破解时间间隔封锁
网站通过两次网页请求的时间间隔判断访问是否由网络爬虫引发,当时间间隔<0.1秒时,可判断为网络爬虫,从而拒绝其访问;因此,可将两次请求的时间间隔放大,從而模拟人访问网页的速度,达到破解时间间隔的限制。
在Scrapy框架中,两次网页请求的时间间隔配置为DOWNLOAD_DELAY。因此放大时间间隔的实现代码为,在settings.py中加入代码。
DOWN_DOWNLOAD = 5
2 破解cookie封锁
网站可通过cookie来确定用户身份,当在同一连续时间段中,多个请求由同一cookie的用户发起,则可判断为网络爬虫,从而拒绝其访问;因此,可将cookie禁用,从而网站方无法判断是否为同一用户,以达到破解cookie封锁。
在Scrapy框架中,启用禁用cookie的配置为cookieS_ENABLED。因此放大时间间隔的实现代码为,在settings.py中加入代码。
cookie_ENABLED = False
3 破解User-Agent封锁
网站可通过User-Agent来确定浏览器的类型,当在同一连续时间段中,多个请求由同一User-Agent的浏览器发起,则可判断为网络爬虫,从而拒绝其访问;因此,网络爬虫可以准备多个User-Agent,发出请求时随机选一个User-Agent使用,以达到破解User-Agent封锁。
在Scrapy框架中,为了实现破解User-Agent封锁,需要在settings.py的同级目录创建middlewares模块;在模块中,创建资源文件resource.py和中间件文件customUserAgent.py。resource.py用于存放多个User-Agent;customUserAgent.py用于随机调用不同的User-Agent。
资源文件resource.py,将多个浏览器的User-Agent放在列表中,具体实现如下。
UserAgents=[ “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Acoo Browser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)”,
“Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0)”,
“Mozilla/4.0 (compatible; MSIE 7.0; AOL9.5; AOL Build 4337.35; Windows NT 5.1; .NET CLR 1.1.4322)”,
“Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)”,
“Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 6.0)”,
..........
“Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52”, ]
中间件文件customUserAgent.py,随机使用资源文件中的User-Agent,具体实现如下。
Class RandomUserAgent(UserAgentMiddleware):
Def process_request(self,request,spider):
Ua= random.choice(UserAgents)
Request.headers.setdefault(‘User-Agent, ua)
修改配置文件settings.py,将RandomUserAgent加入到DOWNLOADER_MIDDLEWARES中,具体实现如下。
DOWNLOADER_MIDDLEWARES = {
‘myproject.middlewares.customUserAgent.RandomUserAgent:30,
‘scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware:None
}
通过以上代码,爬虫具备破解User-Agent封锁的能力。
4 破解IP封锁
网站可通过IP来确定用户身份,当在同一连续时间段中,多个请求由同一IP的用户发起,如果请求数量较少,则可判断为网吧或大型局域网[3],允许其访问;如果请求数量较多,则可判断为网络爬虫,从而拒绝其访问;因此,网络爬虫可以准备一个代理池,发出请求时随机选一个代理服务器使用,以达到破解IP封锁。
在Scrapy框架中,为了实现破解IP封锁,需要在settings.py的同级目录创建middlewares模块;在模块中,创建资源文件resource.py和中间件文件customeProxy.py。resource.py用于存放多个网络代理;customProxy.py用于随机调用不同的代理服务器。
资源文件resource.py,将装有多个代理服务器的代理池放在列表中,具体实现如下。
PROXIES = [
‘110.73.7.47:8123,
‘110.73.42.145:8123,
‘182.89.3.95:8123,
‘39.1.40.234:8080,
‘39.1.37.165.8080
]
中间件文件customProxy.py,随机使用资源文件中的代理服务器IP,具体实现如下。
Class RandomProxy(object):
Def process_request(self,request,spider):
Ua= random.choice(PROXIES)
Request.meta[‘proxy]= ‘http://%s %proxy
修改配置文件settings.py,将RandomProxy加入到DOWNLOADER_MIDDLEWARES中,具体实现如下。
DOWNLOADER_MIDDLEWARES = {
‘myproject.middlewares.customUserAgent.RandomUserAgent:30,
‘scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware:None,
‘myproject.middlewares.customProxy.RandomUserAgent:10,
‘scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware:20
}
5 結束语
综上所述,网络爬虫最常见的时间间隔封锁,cookie封锁,User-Agent封锁,IP封锁,都有相应的攻击方法破解;本文以网络爬虫Scrapy框架为基础,给出以上4种封锁技术的破解方法及实现代码。
参考文献
[1]潘晓英,陈柳,余慧敏,赵逸喆,肖康泞.主题爬虫技术研究综述[J/OL].计算机应用研究:1-6[2019-10-03].
[2]刘清.网络爬虫针对“反爬”网站的爬取策略分析[J].信息与电脑(理论版).2019(03).
[3]黄克敏.网站信息安全之反爬虫策略[J].保密科学技术,2018(10):62-63.