基于SCRAPY框架的网络爬虫封锁技术破解研究

2020-04-27 08:45陈辉
科技视界 2020年6期
关键词:爬虫封锁间隔

陈辉

摘 要

本文阐述了网络爬虫及封锁网络爬虫最常用的四种技术:时间间隔封锁,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.

猜你喜欢
爬虫封锁间隔
利用网络爬虫技术验证房地产灰犀牛之说
基于Python的网络爬虫和反爬虫技术研究
间隔问题
《在被封锁的武汉,他运送的还有希望》新闻谈
间隔之谜
利用爬虫技术的Geo-Gnutel la VANET流量采集
大数据环境下基于python的网络爬虫技术
上楼梯的学问
头夹球接力
二战以来三次岛屿封锁作战的战略决策及启示