前言:尋找寫作靈感?中文期刊網用心挑選的網絡資源自動采集技術反思,希望能為您的閱讀和創作帶來靈感,歡迎大家閱讀并分享。
摘要:人類已經進入大數據時代,大數據產生了巨大的社會價值和商業價值,如何高效地獲取數據,已成為提高未來競爭力的關鍵要素。網絡爬蟲就是一種高效的信息采集利器,利用它可以快速、準確地采集我們想要的各種數據資源。但是隨著互聯網和Web技術的發展,各種反爬蟲措施的使用,給網絡資源采集帶來了很多困難。因此,為了準確高效地采集到需要的數據,網絡爬蟲也采取了具有針對性的反制措施。本文介紹了網絡信息自動采集技術相關的基礎概念和原則,研究并歸納了網絡信息自動采集技術的存在的主要難點和解決問題的主要技術手段。
關鍵詞:網絡資源采集;反爬蟲;Scrapy;Selenium
0引言
人類社會已經進入大數據時代,大數據深刻影響和改變著我們的工作和生活。隨著互聯網、移動互聯網、社交網絡等的飛速發展,產生了巨量的大數據,蘊含著前所未有的社會價值和商業價值。尤其是人工智能浪潮的興起和深度學習技術的突破,不論在工程領域還是研究領域,數據已經成為必不可少的一部分。大數據成為21世紀最重要的經濟資源之一,正如馬云所說:未來最大的能源不是石油而是大數據。如何高效的獲取數據,并對互聯網上的非結構化數據進行清洗,得到結構化數據,以及對數據進行挖掘、分析的能力,成為企業提高未來競爭力的關鍵要素[1]。
1網絡資源采集基本原理和基礎原則
把互聯網比作一張巨大的網,網上的每一個結點就相當于這張網上的一個節點,而采集的程序就相當于網上的一只小蜘蛛,根據定制的規則,批量的獲取所需要的資源數據,就是這只“小蜘蛛”所要完成的工作。因此,網絡資源采集又叫網絡爬蟲(Webcrawler)或網絡蜘蛛(Webspider)。簡單來說,網絡資源采集就是獲取網頁并提取和保存信息的自動化程序,主要分為三步。
1.1獲取網頁
爬蟲首先要做的就是獲取網頁,也就是獲取網頁的源代碼。源代碼里包含了網頁的部分有用信息,所以將源代碼獲取之后,就可以從中間提取想要的信息。在Python中提供了許多庫來實現源代碼的獲取,如urllib、requests等。
1.2提取信息
獲取網頁源代碼之后,我們需要對網頁源代碼進行分析,從中提取想要的數據。由于網頁的結構具有一定的規則,因此可以根據網頁結點屬性、CSS選擇器或XPath選擇器來提取網頁信息,常用的庫有BeautifulSoup、pyquery、lxml等。
1.3保存數據
提取信息后,我們需要將數據保存到某處以便后續使用。保存形式多種多樣,可以簡單保存為TXT文本或JSON文本,也可以保存到數據庫,如MySQL或MongoDB等。另外,網絡資源自動采集需要滿足以下原則:實時性原則,完整性原則,可靠性原則,準確性原則,易用性原則[2]。
2網絡資源自動采集現階段主要難點
互聯網信息資源豐富,但是非常的分散,不同的網站結構不一、布局復雜、渲染方式多樣,對于不同的網站,通常需要針對性的配置,才能獲取需要的數據。此外,很多的網站還會專門采取一系列的“反爬”措施,比如:(1)使用驗證碼驗證用戶為非機器人;(2)設置登錄驗證,用戶登錄之后才能獲取相關內容;(3)使用動態頁面,目前很多的網頁都會使用JavaScript來進行頁面渲染,或者使用JS動態生成請求參數及JS混淆加密,防止網絡爬蟲的訪問;(4)IP封鎖,對于單位時間內訪問次數過多的IP,許多網站會對IP進行封鎖,無法訪問;(5)字體混淆,部分網站實際頁面展示的文字、數字與網頁源代碼中的值并不相同,造成爬蟲采集雖能正常運行,但獲得的數據與實際數據不符。面對不同的問題,就需要采用具有針對性的反制措施。爬蟲與反爬蟲技術就是在這種競爭中,逐步發展起來的[3-4]。
3網絡資源采集現階段難點的解決技術手段
本節總結了筆者在工作中進行網絡資源采集時碰到的一些問題和解決問題的主要技術手段。
3.1請求頭User-Agent驗證
常見的簡易反爬措施,網站通過驗證User-Agent方式判斷請求是否為正常瀏覽器行為,如果發現非法UA,則返回錯誤響應。突破方法:為請求頭添加瀏覽器的User-Agent字符串即可,在大規模采集過程中可以使用UA池或調用fake_useragent模塊自動動態生成User-Agent并添加。
3.2用戶身份Cookie驗證及JWT驗證
多數網站會將登陸的用戶信息以鍵值對的形式保存在Cookie中,服務器收到請求后首先驗證用戶身份,驗證失敗則返回錯誤響應。JWT身份驗證形式與Cookie大致相同,區別在于身份信息為請求頭特定的JWT字符串而非Cookie。突破方法:通過瀏覽器登陸后,抓包分析尋找登錄后的Cookie或JWT字符串,在爬蟲運行過程中,在請求中添加對應Cookie或請求頭添加對應字符串,即可獲得正確響應。在使用Scrapy框架開發爬蟲的過程中,可將Cookie及JWT的添加過程寫入DownloaderMiddleware的process_request方法中,在Scrapy運行過程中通過中間件自動添加請求頭信息,保證spider流程的可讀性。
3.3動態頁面爬取
目前很多的網站都會使用JavaScript,Ajax(異步JavaScript和XML)技術和動態HTML(dynamicHTML)技術進行頁面渲染,生成動態頁面,既可以使頁面更加豐富,交互功能更強,還可以反爬蟲。突破方法:一個有效的工具就是Selenium,Selenium是一個強大的網絡數據采集工具,最初是為網站自動化測試而開發的,它可以讓瀏覽器自動加載頁面,獲取需要的數據,甚至頁面截屏,或者判斷網站上某些動作是否發生。Selenium自己不帶瀏覽器,因此需要與第三方瀏覽器結合使用,比如Firefox、Chrome、PhantomJS(如果使用Firefox,需要安裝GeckoDriver驅動,如果使用Chrome,需要安裝ChromeDriver驅動)。使用Selenium可以處理cookies、JavaScript、header等,模擬瀏覽器訪問網頁時進行的任何操作。另外,還可以使用Scrapy框架配合Splash服務進行JS動態生成和ajax網頁的內容的采集,此方法可在Scrapy框架內完成動態內容采集,方便scrapyd進行整個爬蟲項目的任務調度,更加適合大規模采集項目。Scrapy是一個用Python實現的為了爬取網站數據、提取結構性數據的應用框架。Scrapy使用Twisted異步網絡庫來處理網絡通訊。該框架集成可高度擴展的5大組件以及封裝完善的中間件模塊,可以高效(爬取效率和開發效率)且高度定制采集需求來完成網站數據爬取任務。Splash是一個Javascript渲染服務。它是一個實現了HTTPAPI的輕量級瀏覽器,Splash是用Python實現的,同時使用Twisted和QT。Twisted(QT)用來讓服務具有異步處理能力,以發揮webkit的并發能力。在docker中下載并安裝Splash鏡像后,啟動Splash服務,python安裝scrapy_splash。在Scrapy項目中添加Splash服務地址,下載器中間件DOWNLOADER_MIDDLEWARE中添加Scrapy_splash相應中間件后,即可在scrapy框架中使用SplashRequest請求方式通過splash服務獲得動態渲染后的網頁響應內容[5-6]。
3.4JS動態生成請求參數及JS混淆加密
在采集過程中,會遇到請求中出現了動態參數的情況,這類參數一般由網站中的JavaScript代碼生成并添加到關鍵的請求中,分析對應的JS文件,發現JS被混淆加密,可讀性極低。這種反爬措施也變得愈發常見,簡單的爬蟲邏輯被輕易拒之門外。突破方法:分析點擊事件或在控制點為JS打斷點的方式定位生成加密參數的JS代碼位置,找到生成參數的JS代碼后,可在反混淆網站中嘗試反混淆清洗,如果成功,可得到正常可讀的JS代碼,此時可在爬蟲程序中仿寫整個參數生成邏輯獲得參數;如不能反混淆成功或加密邏輯過于繁密,可嘗試使用PyExecJS模塊直接在python環境中執行該段JS代碼,也可獲得加密后的參數,突破反爬限制。
3.5字體混淆
在一些網站中,實際頁面展示的文字、數字與網頁源代碼中的值并不相同,造成爬蟲采集雖能正常運行,但獲得的數據與實際數據不符,這是典型的字體混淆反爬特點。此類反爬措施通過動態下載ttf、woff、woff2等經過混淆加密的字體文件生成網頁源代碼。突破方法:首先抓包分析請求的響應過程,獲取每次請求后的字體下載url,在爬蟲程序中對應獲得字體文件的響應,利用python第三方模塊TTFont解析字體文件響應數據,獲得混淆后的字體unicode碼與字體文件中name的映射關系,在利用獲得的name值與字體中帶有的或根據字體文件排序歸納的f_map獲得unicode與實際正確字符的對應關系。
3.6IP封鎖
很多網站為了防止網絡攻擊和惡意爬蟲,通常會采用IP訪問限制措施,對單位時間內訪問量過大的IP地址,會進行封鎖限制訪問,導致采集系統無法正常訪問指定頁面。突破方法:針對這種問題,通常會采用IP的方法,為了采集效率和成功率,需要購買IP,然后維護一個IP池,將所有的IP放在一個池子里面,每次訪問之前獲取一個IP,如果IP失效,則丟棄然后重新獲取,IP池還需要實現自動獲取新的IP的功能和刪除失效IP的功能,以支撐高效的網絡采集任務。
4結語
隨著互聯網與移動互聯網的發展,網絡信息爆炸式增長,不論是企業還是個人,都越來越需要網絡資源自動采集技術的支持。同時,各種新的“反爬蟲”策略也是層出不窮,對于網絡資源采集系統的要求也越來越高。對企業來說,擁有一套比較優良的網絡資源采集系統,可以幫助企業在資源采集、整合方面節約大量的人力與資金。在當前人工智能和大數據飛速發展的時代,網絡資源采集技術的研究與開發,也關系到未來國家、企業的綜合實力??傊?,網絡資源自動采集技術需求巨大,前景廣闊。
參考文獻
[1]韓群鑫.網絡信息資源采集研究[J].農業網絡信息,2007(04):63-66.
[2]劉水.網絡信息采集及數據分析結果可視化的研究與實現[D].西安電子科技大學,2013.
[3]吳海燕.互聯網信息采集系統的設計與實現[D].中國人民大學,2012.
[4]朱志華,張帆.網絡信息資源整合的現狀研究[C]//中國醫學信息教育25周年暨全國醫學信息教育可持續發展學術研討會,2010.
[5]周瑜智,劉展鳴,王博,等.關于網絡信息自動采集技術的難點及其解決辦法的研究[J].科技傳播,2013(6):204-205.
[6]涂輝,王鋒,商慶偉.Python3編程實現網絡圖片爬蟲[J].電腦編程技巧與維護,2017(23):21-22.
作者:李嵐清 王恒 晏曉峰 單位:國家工業信息安全發展研究中心