陳輝
摘 要
本文闡述了網絡爬蟲及封鎖網絡爬蟲最常用的四種技術:時間間隔封鎖,Cookie封鎖,User-Agent封鎖,IP封鎖;分析了上述封鎖技術的基本原理,提出了針對上述封鎖技術的破解方法,并給出了基于Scrapy框架的破解封鎖實現(xiàn)代碼。
關鍵詞
Scrapy;網絡爬蟲;時間間隔封鎖;Cookie封鎖;User-Agent封鎖;IP封鎖
中圖分類號: TP393.092;TP391.3 ? ? ?文獻標識碼: A
DOI:10.19694/j.cnki.issn2095-2457 . 2020 . 06 . 82
0 引言
網絡爬蟲,即網絡機器人,是按照一定的規(guī)則,自動抓取互聯(lián)網信息的程序。在各種應用場景中,通過應用網絡爬蟲技術,網絡機器人可以在網站上自動獲取相關的專業(yè)數(shù)據,從而實現(xiàn)快速、準確、完整地獲取海量數(shù)據,為正確做出各種決策提供數(shù)據支持。有關調查研究證明,網絡上60%的訪問量都來自網絡爬蟲[1]。對于網站方,網絡爬蟲占用其過多的資源,并且其未能從爬蟲的訪問中受益,因此網站方采取多種技術措施拒絕網絡爬蟲的訪問,即封鎖網絡爬蟲。
當前,封鎖網絡爬蟲的技術主要有[2]:時間間隔封鎖,Cookie封鎖,User-Agent封鎖,IP封鎖等。時間間隔封鎖:通過兩次網頁請求的時間間隔判斷訪問是否由網絡爬蟲引發(fā),當時間間隔<0.1秒時,可判斷為網絡爬蟲,從而拒絕其訪問;Cookie封鎖:網站可通過Cookie來確定用戶身份,當一連續(xù)網頁請求來自同一Cookie時,此時可判斷訪問由網絡爬蟲引發(fā),從而拒絕其訪問;User-Agent封鎖:User-Agent是瀏覽器的身份標識,通過User-Agent可確定瀏覽器的類型,網站可將頻繁提交請求的User-Agent作為爬蟲標志,將其列入黑名單;IP封鎖:同一IP短時間連續(xù)訪問同一站點,如訪問數(shù)量過大可以判斷由網絡爬蟲引發(fā),從而拒絕其訪問。以上為封鎖網絡爬蟲最常用的4種技術,破解上述封鎖技術是本文主要解決的問題。本文以網絡爬蟲Scrapy框架為基礎,給出以上4種封鎖技術的破解方法及實現(xiàn)代碼。
1 破解時間間隔封鎖
網站通過兩次網頁請求的時間間隔判斷訪問是否由網絡爬蟲引發(fā),當時間間隔<0.1秒時,可判斷為網絡爬蟲,從而拒絕其訪問;因此,可將兩次請求的時間間隔放大,從而模擬人訪問網頁的速度,達到破解時間間隔的限制。
在Scrapy框架中,兩次網頁請求的時間間隔配置為DOWNLOAD_DELAY。因此放大時間間隔的實現(xiàn)代碼為,在settings.py中加入代碼。
DOWN_DOWNLOAD = 5
2 破解Cookie封鎖
網站可通過Cookie來確定用戶身份,當在同一連續(xù)時間段中,多個請求由同一Cookie的用戶發(fā)起,則可判斷為網絡爬蟲,從而拒絕其訪問;因此,可將Cookie禁用,從而網站方無法判斷是否為同一用戶,以達到破解Cookie封鎖。
在Scrapy框架中,啟用禁用Cookie的配置為COOKIES_ENABLED。因此放大時間間隔的實現(xiàn)代碼為,在settings.py中加入代碼。
COOKIE_ENABLED = False
3 破解User-Agent封鎖
網站可通過User-Agent來確定瀏覽器的類型,當在同一連續(xù)時間段中,多個請求由同一User-Agent的瀏覽器發(fā)起,則可判斷為網絡爬蟲,從而拒絕其訪問;因此,網絡爬蟲可以準備多個User-Agent,發(fā)出請求時隨機選一個User-Agent使用,以達到破解User-Agent封鎖。
在Scrapy框架中,為了實現(xiàn)破解User-Agent封鎖,需要在settings.py的同級目錄創(chuàng)建middlewares模塊;在模塊中,創(chuàng)建資源文件resource.py和中間件文件customUserAgent.py。resource.py用于存放多個User-Agent;customUserAgent.py用于隨機調用不同的User-Agent。
資源文件resource.py,將多個瀏覽器的User-Agent放在列表中,具體實現(xiàn)如下。
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,具體實現(xiàn)如下。
Class RandomUserAgent(UserAgentMiddleware):
Def process_request(self,request,spider):
Ua= random.choice(UserAgents)
Request.headers.setdefault(‘User-Agent, ua)
修改配置文件settings.py,將RandomUserAgent加入到DOWNLOADER_MIDDLEWARES中,具體實現(xiàn)如下。
DOWNLOADER_MIDDLEWARES = {
‘myproject.middlewares.customUserAgent.RandomUserAgent:30,
‘scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware:None
}
通過以上代碼,爬蟲具備破解User-Agent封鎖的能力。
4 破解IP封鎖
網站可通過IP來確定用戶身份,當在同一連續(xù)時間段中,多個請求由同一IP的用戶發(fā)起,如果請求數(shù)量較少,則可判斷為網吧或大型局域網[3],允許其訪問;如果請求數(shù)量較多,則可判斷為網絡爬蟲,從而拒絕其訪問;因此,網絡爬蟲可以準備一個代理池,發(fā)出請求時隨機選一個代理服務器使用,以達到破解IP封鎖。
在Scrapy框架中,為了實現(xiàn)破解IP封鎖,需要在settings.py的同級目錄創(chuàng)建middlewares模塊;在模塊中,創(chuàng)建資源文件resource.py和中間件文件customeProxy.py。resource.py用于存放多個網絡代理;customProxy.py用于隨機調用不同的代理服務器。
資源文件resource.py,將裝有多個代理服務器的代理池放在列表中,具體實現(xiàn)如下。
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,具體實現(xiàn)如下。
Class RandomProxy(object):
Def process_request(self,request,spider):
Ua= random.choice(PROXIES)
Request.meta[‘proxy]= ‘http://%s ?%proxy
修改配置文件settings.py,將RandomProxy加入到DOWNLOADER_MIDDLEWARES中,具體實現(xiàn)如下。
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種封鎖技術的破解方法及實現(xiàn)代碼。
參考文獻
[1]潘曉英,陳柳,余慧敏,趙逸喆,肖康濘.主題爬蟲技術研究綜述[J/OL].計算機應用研究:1-6[2019-10-03].
[2]劉清.網絡爬蟲針對“反爬”網站的爬取策略分析[J].信息與電腦(理論版).2019(03).
[3]黃克敏.網站信息安全之反爬蟲策略[J].保密科學技術,2018(10):62-63.