肖新鳳 張絳麗 鄧祖民



摘? 要:隨著爬蟲技術的不斷完善,其功能越來越強大,也導致數據竊取問題越來越嚴重。很多網站都采用了反爬蟲技術,因此為了正常獲取數據,需要一些反爬蟲策略。文章設計和實現面向定向網站的網絡爬蟲程序,使其能滿足不同的性能要求,并闡述了定向網站爬蟲的細節和應用環節。爬蟲可以針對不同的主題網站分析構造URL并去重,多線程技術讓爬蟲具備更強大的抓取能力。
關鍵詞:Python;爬蟲;數據;豆瓣讀書網
Abstract:With the continuous improvement of crawler technology,more and more powerful functions,and more and more serious data theft problems,many websites have adopted anti-crawler technology,so in order to obtain data normally,some anti-crawler technology is needed. This paper designs and implements a web crawler program oriented to the directional website,and meets different performance requirements,including the details and applications of the directional website crawler Link. For different theme websites,analyze and construct URL to remove duplication. The multi-threading technology which makes the crawler have more powerful grasping ability.
Keywords:Python;crawler;data;Douban reading website
0? 引? 言
網絡爬蟲一般用于搜索引擎,其中很大的推動力是來自各種個人、中小型爬蟲。一些低質量的爬蟲主要表現為不遵守Robots協議、爬行策略未優化、分布式的架構。隨著大數據應用越來越廣泛,很多人想研究大數據但需要充足的數據,因此“互聯網+”也變得更有價值。所以,隨著大數據應用的發展,爬蟲的使用是不可避免的,并且使用范圍會越來越廣泛。近年來,許多創業公司因其發展需要大量的數據。筆者以某個服務類的公司為例,該公司需要電子商城(如:eBay)的賣家聯系方式,這時就需要利用爬蟲技術。目前爬蟲技術效率較高的就是基于Python的爬蟲技術,它不僅爬取速度快,而且Python語言的簡潔性大大地提高了完成爬取程序的時間,使其可以隨著不同的主題網站分析構造URL并去重。并且網絡爬蟲采用多線程技術,將具備更強大的抓取能力。
1? 爬蟲的基本流程及相關技術
爬蟲在互聯網網站上按一定規則去獲取所需要的信息。互聯網可以比作一張網,每個Web節點都是存儲數據的地方。爬蟲程序是向網站發送請求、獲取資源、分析和提取有用數據的程序。爬蟲爬取數據的基本流程如圖1所示。
Python程序類似于蜘蛛,在每個節點上捕捉獵物。通用爬蟲暨通用的網絡爬蟲也可以稱為可伸縮的網絡爬蟲,有兩種常見的爬取策略:深度優先策略及廣度優先策略。而聚焦爬蟲也被稱為主題網絡爬蟲,主要為特定的人群提供服務,可以節省大量的服務器資源和帶寬資源;增量爬蟲則是指以增量方式更新已下載網頁并僅對新生成或更改的網頁進行爬取的爬蟲程序,可以在一定程度上保證被爬取的頁面是盡可能新的。與周期性的抓取和刷新相比,增量爬蟲只在需要時對新生成或更改的頁面進行抓取,不再下載未更改的頁面,可以有效減少數據下載量,及時更新抓取的頁面,減少時間和空間消耗,但也增加了爬行算法的復雜度和實現難度。增量爬蟲的體系結構包括爬行模塊、排序模塊、更新模塊、本地頁面集、要爬行的URL集和本地頁面URL集。本文采用的增量網頁爬蟲進行發送請求、獲取響應內容、解析內容及保存數據。
2? 項目分析、設計、測試與實現
2.1? 項目分析
2.1.1? 項目描述
項目為編寫一個網站爬蟲程序,將豆瓣讀書網站上的所有圖書信息爬取下來,并保存到MySQL數據庫中。爬取的信息字段要求有:ID號、書名、作者、出版社、原作名、譯者、出版年、頁數、定價、裝幀、叢書、ISBN、評分、評論人數,部分信息如圖2所示。
2.1.2? 爬取網站過程分析
打開豆瓣讀書首頁https://book.douban.com/,如圖3所示;在豆瓣讀書首頁的右側點擊所有熱門標簽,會跳到豆瓣圖書標簽頁https://book.douban.com/tag/?view=type&icn= index-sorttags-all。如圖4所示,點擊豆瓣圖書標簽頁分類中的標簽,會展示對應圖書列表頁,在圖書列表頁中可以獲取每本圖書的詳細信息,如圖5所示。
2.2? 項目設計
項目主要分為四大模塊。模塊一實現對豆瓣圖書信息以及所有標簽信息的爬取,并將圖書的標簽信息寫入到Redis數據庫中,此模塊可使用Requests簡單實現。模塊二負責從Redis中獲取每個圖書標簽,分頁式地爬取每本圖書的URL信息后,將信息寫入到Redis中。模塊三負責從Redis中獲取每個圖書的URL地址,并爬取對應的圖書詳情,將每本圖書詳情信息寫回到Redis數據庫中。模塊四負責從Redis中獲取每本圖書的詳情信息,并將信息依次寫入到MySQL數據中,作為最終的爬取信息。該項目結構圖如圖6所示。
2.3? 項目部分實現
2.3.1? 定義model類
2.3.3? 編寫視圖文件部分代碼
2.4? 項目測試
啟動服務測試,$ python manage.py runserver使用瀏覽器訪問測試,抓取部分信息的效果圖如圖7所示。本系統的設計和實現面向定向網站的網絡爬蟲程序,經過測試,能滿足不同的性能要求,且抓取效果良好。
3? 結? 論
文章對互聯網網站的信息進行爬取并展示,并對一些網站的反爬技術使用對應的反反爬策略,不僅不增加網站服務器的壓力,還提高了爬取的效率和穩定性;并且遵守了網站的Robots協議。在大數據時代,爬蟲行業必將風生水起,Python網絡爬蟲更是獨領風騷。基于Python的Web爬蟲數據抽取是一種主流技術,Python語言具有跨平臺、開發速度快、語言簡單等特點。Python語言可以通過第三方請求庫獲取返回值的內容,然后通過正則、XPath和Beautiful Soup三種Python過濾技術快速匹配和提取網頁中的圖像和文本數據,這樣不僅能精確地找到網頁中需要的數據,還能自動化快速地將這些數據保存下來,極大地減少了查找數據的時間。基于Python的網絡爬蟲不僅爬取速度快,其語言的簡潔性也大大地縮短了完成爬取的時間。
參考文獻:
[1] 李琳.基于Python的網絡爬蟲系統的設計與實現 [J].信息通信,2017(9):26-27.
[2] 張譽曜,陳媛媛.基于Python下的爬蟲綜述及應用 [J].中國新通信,2019,21(6):98.
[3] 王碧瑤.基于Python的網絡爬蟲技術研究 [J].數字技術與應用,2017(5):76.
[4] 陸樹芬.基于Python對網絡爬蟲系統的設計與實現 [J].電腦編程技巧與維護,2019(2):26-27+51.
[5] 唐琳,董依萌,何天宇.基于Python的網絡爬蟲技術的關鍵性問題探索 [J].電子世界,2018(14):32-33.
作者簡介:肖新鳳(1978—),女,漢族,湖南邵陽人,講師,研究生,研究方向:軟件技術、大數據、數據挖掘。