?

基于大數據環境下Python的爬蟲技術的應用

2020-09-10 08:25許會芳
看世界·學術上半月 2020年12期
關鍵詞:爬蟲網頁頁面

許會芳

摘要:大數據背景下,無法使用常規的工具進行數據挖掘、處理和管理數據,但每個行業每天都有大量的數據產生,如何得到這些數據,就需要有新處理方式才具有更強的處理能力、優化能力來處理浩瀚的數據?,F在網絡上的很多數據都是雜亂的,都需要挖掘、清洗、分析,整理后,才能滿足實際的運用,雖然現在有很多優秀的搜索引擎,但是還是不能滿足各行業對數據的捕捉、搜索等要求。目前,使用網絡爬蟲工具能自動完成數據挖掘,清洗等工作,很大程度上提了工作效率。

關鍵詞:原理;爬蟲;數據分析

中圖分類號:TP96? ? ? ? ? ? ?文獻標識碼:A

一、相關概念及原理

(一)大數據技術

“大數據”一詞指的是不斷增長的大型數據集,其中包括異構格式:結構化、非結構化和半結構化數據。大數據具有復雜性,需要強大的技術和先進的算法。因此,傳統的靜態商業智能工具在大數據應用中已不再有效。大多數數據科學家和專家對大數據的定義主要有以下三個特征(稱為3Vs):①Volume:海量的數字數據不斷地從數以百萬計的設備和應用程序(智能手機、產品代碼、社交網絡、傳感器、日志等)中生成。McAfeeetal.(2012)估計2012年每天大約產生2.5艾字節[1]。這個數字大約每40個月翻一番。2013年,據一家國際數據公司發布的研究報告估計,創建、復制和使用的數字數據總量為4.4Zettabytes(ZB),每兩年翻一番。到2015年,數字數據增長到8ZB(Rajaraman,2016)。根據IDC(Internetdatacenter)的報告,到2020年,數據量將達到驚人的40Zeta字節,是當前數據量的400倍。②Velocity:數據生成速度快,需要快速處理,提取有用信息和相關知識。例如,沃爾瑪(一家國際折扣零售連鎖企業)每小時從客戶交易中產生2.5PB以上的數據。YouTube也是一個展示大數據快速發展的好的案例。③Variety:大數據來源于分布式的各種來源,以多種格式(如視頻、文檔、評論、日志等)產生[2]。大數據集包括結構化和非結構化數據、公共或私有數據、本地或遠程數據、共享或機密數據、完整或不完整數據等。Emanietal.(2015)和GandomiandHaider(2015)指出,為了更好地定義大數據,一些參與者加入了更多Vs等特征:Vision(目的),Verification(處理后的數據符合某些規范),Validation(目標可實現),Value(許多領域的相關信息可以提?。?,Complexity(由于數據關系的演變,很難組織和分析大數據)和Immutability(如果管理得當,收集和存儲大數據可以是永久性的)。

(二)爬蟲技術

網絡爬蟲,是按照設定的規則自動抓取網絡信息的程序。網頁中包含了文字信息、超鏈接信息。從功能上來講,爬蟲的處理過程一般包括數據采集、處理、儲存三個部分。在網絡爬蟲的系統框架中,主過程由控制器、解析器、資源庫三部分組成??刂破鞯闹饕ぷ魇秦撠熃o多線程中的各個爬蟲線程分配工作任務。解析器的主要工作是下載網頁,進行頁面的處理,主要是將一些JS腳本標簽、CSS代碼內容、空格字符、HTML標簽等內容處理掉,爬蟲的基本工作由解析器完成。資源庫用來存放下載到的網頁資源,一般都采用大型的數據庫存儲。網絡爬蟲技術分為以下幾類:通用網絡爬蟲、聚焦網絡爬蟲、增量網絡爬蟲、深層網絡爬蟲。這幾種爬蟲的關鍵技術是類似的。爬蟲獲取網絡數據的方式:模擬瀏覽器發送請求,獲取網頁代碼——提取有用數據,解析內容,保存數據。

Python程序類似于蜘蛛,在每個節點上捕捉獵物。通用爬蟲暨通用的網絡爬蟲也可以稱為可伸縮的網絡爬蟲,有兩種常見的爬取策略:深度優先策略及廣度優先策略。而聚焦爬蟲也被稱為主題網絡爬蟲,主要為特定的人群提供服務,可以節省大量的服務器資源和帶寬資源;增量爬蟲則是指以增量方式更新已下載網頁并僅對新生成或更改的網頁進行爬取的爬蟲程序,可以在一定程度上保證被爬取的頁面是盡可能新的。與周期性的抓取和刷新相比,增量爬蟲只在需要時對新生成或更改的頁面進行抓取,不再下載未更改的頁面,可以有效減少數據下載量,及時更新抓取的頁面,減少時間和空間消耗,但也增加了爬行算法的復雜度和實現難度。增量爬蟲的體系結構包括爬行模塊、排序模塊、更新模塊、本地頁面集、要爬行的URL集和本地頁面URL集。本文采用的增量網頁爬蟲進行發送請求、獲取響應內容、解析內容及保存數據[3]。

(三)Python技術

Python是一種解釋型、面向對象、動態數據類型的高級程序設計語言。它是解釋型語言,但是也可以編譯成.pyc跨平臺的字節碼文件。.pyc文件有幾個好處:一是可以簡單地隱藏源碼,二是提高載入速度,三是跨平臺。相較于C++、Java語言,Python更易于學習,有一個廣泛的標準庫。同時可以結合Java或C/C++語言,封裝成Python可以調用的擴展庫,便于擴展和移植。Python提供了非常豐富的針對網絡協議的標準庫,能簡單高效地進行網頁抓取、網頁解析、數據存儲等,使程序員可以集中精力處理程序邏輯。

二、常用網絡爬蟲技術

(一)通用爬蟲技術

通用網絡爬蟲又稱為全網爬蟲,其爬行對象由一批種子URL擴充至整個網站,這種爬蟲適合搜索的內容廣泛,目前主要是由Web服務提供商或搜索引擎使用。常見的策略有:一是深度優先:根據目標的深度由低到高依次訪問每一級網頁的鏈接,直到訪問完為止;二是廣度優先:根據目標內容目錄結構的深淺來提取,首先提取比較淺層次的頁面,在同一層的數據全部提取完以后,再進入下一層進行提取。

(二)聚焦網絡爬蟲技術

聚焦網絡爬蟲又被稱作主題網絡爬蟲,其最大的特點是只選擇性地爬行與預設的主題相關的頁面。常見的策略有:一是根據用戶需求內容的爬行:這種策略是將用戶輸入的關鍵詞作為查找的主題,包含有查詢關鍵詞的頁面被認為是與用戶查找的目標相關的頁面;二是鏈接結構評價的爬行策略:該種策略將包含很多結構信息的半結構化文檔Web頁面用來評價鏈接的重要性,其中一種廣泛使用的算法為PageRank算法;三是語境圖的爬行:這種策略是通過學習各個網頁之間的關連度,計算出當前頁面與其它相關的頁面的距離,選擇距離越近的頁面進行優先訪問。

(三)增量式的爬蟲技術

增量式爬蟲是在已經保存網站部分數據的情況下,當再次運行爬蟲的時候,它不會對已有的數據重復爬取,只爬取數據庫中尚未保存的數據。常有更新方法有以下幾種:一是統一更新:用相同的頻率獲取所有網頁的數據,不因網頁改變影響訪問的頻率;二是個體更新法:這種方法是根據面頁內容的變化而改變訪問的頻率;三是分類更新法:根據網頁變化頻率,將網頁劃分為快、慢兩個類別,根據不同類別設定不同的訪問頻率。

(四)深層網絡爬蟲技術

Web頁面按照存在方式可以分為表層頁面和深層頁面兩類。表層頁面指以傳統搜索引擎可以索引到的頁面,深層頁面中的大部分數據不能通過靜態鏈接方式獲取,隱藏于表單之后,需要提交搜索主題詞之后才能得到相應的頁面。

三、項目分析、設計、測試與實現

(一)項目分析

1.項目描述

項目為編寫一個網站爬蟲程序,將豆瓣讀書網站上的所有圖書信息爬取下來,并保存到MySQL數據庫中。爬取的信息字段要求有:ID號、書名、作者、出版社、原作名、譯者、出版年、頁數、定價、裝幀、叢書、ISBN、評分、評論人數。

2.爬取網站過程分析

第一步:打開豆瓣讀書首頁https://book.douban.com/。

第二步:在豆瓣讀書首頁的右側點擊“所有熱門標簽”,會跳到豆瓣圖書標簽頁https://book.douban.com/tag/?view=type&icn=index-sorttags-all。

第三步:點擊豆瓣圖書標簽頁分類中的標簽,會展示對應圖書列表頁,在圖書列表頁中可以獲取每本圖書的詳細信息。

3.項目設計

Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基于內存亦可持久化的日志型、Key-Value數據庫,并提供多種語言的API。從2010年3月15日起,Redis的開發工作由VMware主持。Redis 是一個高性能的key-value數據庫。 redis的出現,很大程度補償了memcached這類keyvalue存儲的不足,在部 分場合可以對關系數據庫起到很好的補充作用。它提供了Python,Ruby,Erlang,PHP客戶端,使用很方便。

項目主要分為四大模塊。模塊一實現對豆瓣圖書信息以及所有標簽信息的爬取,并將圖書的標簽信息寫入到Redis數據庫中,此模塊可使用Requests簡單實現。模塊二負責從Redis中獲取每個圖書標簽,分頁式地爬取每本圖書的URL信息后,將信息寫入到Redis中。模塊三負責從Redis中獲取每個圖書的URL地址,并爬取對應的圖書詳情,將每本圖書詳情信息寫回到Redis數據庫中。模塊四負責從Redis中獲取每本圖書的詳情信息,并將信息依次寫入到MySQL數據中,作為最終的爬取信息。該項目結構圖如圖1所示。

(二)項目部分實現

1.定義model類

編輯myweb/web/models.py

https://book.douban.com/

classBooks(models.Model):

title=models.CharField(max_length=255)#書名

author=models.CharField(max_length=64)#作者

......

binding=models.CharField(max_length=32)#裝幀

series=models.CharField(max_length=128)#叢書

isbn=models.CharField(max_length=128)#ISBN

score=models.CharField(max_length=128)#評分

number=models.IntegerField(default=0)#評論人數

2.URL路由配置

fromdjango.conf.urlsimporturl,include

urlpatterns=[

url(r’^’,include(‘web.urls’)),

]

創建Web子路由文件:myweb/web/urls.py,并編寫代碼如下:

fromdjango.conf.urlsimporturl

from.importviews

urlpatterns=[

url(r’^$’,views.index,name=”index”),

url(r’^/$’,views.index,name=”index”),

]

(三)編寫視圖文件部分代碼

defindex(request):

#獲取商品信息查詢對象

mod=Books.objects

list=mod.filter()

#執行分頁處理

pIndex=int(request.GET.get(“p”,1))

page=Paginator(list,50)#以50條每頁創建分頁對象

maxpages=page.num_pages#最大頁數

#判斷頁數是否越界

ifpIndex>maxpages:

pIndex=maxpages

ifpIndex<1:

pIndex=1

list2=page.page(pIndex)#當前頁數據

plist=page.page_range#頁碼數列表

(四)項目測試

啟動服務測試,$pythonmanage.pyrunserver使用瀏覽器訪問測試,抓取部分信息的效果圖如圖2所示。本系統的設計和實現面向定向網站的網絡爬蟲程序,經過測試,能滿足不同的性能要求,且抓取效果良好。

四、結語

文章對互聯網網站的信息進行爬取并展示,并對一些網站的反爬技術使用對應的反反爬策略,不僅不增加網站服務器的壓力,還提高了爬取的效率和穩定性;并且遵守了網站的Robots協議。在大數據時代,爬蟲行業必將風生水起,Python網絡爬蟲更是獨領風騷?;赑ython的Web爬蟲數據抽取是一種主流技術,Python語言具有跨平臺、開發速度快、語言簡單等特點。Python語言可以通過第三方請求庫獲取返回值的內容,然后通過正則、XPath和BeautifulSoup三種Python過濾技術快速匹配和提取網頁中的圖像和文本數據,這樣不僅能精確地找到網頁中需要的數據,還能自動化快速地將這些數據保存下來,極大地減少了查找數據的時間?;赑ython的網絡爬蟲不僅爬取速度快,其語言的簡潔性也大大地縮短了完成爬取的時間。

參考文獻:

[1]曾誠.基于Python的網絡爬蟲及數據可視化和預測分析[J].信息與電腦(理論版),2020,32(09):167-169.

[2]楊雄.基于Python爬蟲的比賽信息查詢交流系統設計[J].無線互聯科技,2020,17(09):45-46.

[3]裴麗麗.基于Python語言對電影影評數據爬蟲與詞云制作[J].信息記錄材料,2020,21(05):116-118.

猜你喜歡
爬蟲網頁頁面
答案
基于Python的網絡爬蟲和反爬蟲技術研究
讓Word同時擁有橫向頁和縱向頁
Python反爬蟲設計
基于Scrapy框架的分布式網絡爬蟲的研究與實現
基于HTML5靜態網頁設計
誰搶走了低價機票
搜索引擎怎樣對網頁排序
驅動器頁面文件大小的總數為何總是07
網頁智能搜索數據挖掘的主要任務
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合