• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于大數(shù)據(jù)環(huán)境下Python的爬蟲技術(shù)的應(yīng)用

      2020-09-10 08:25:16許會芳
      看世界·學(xué)術(shù)上半月 2020年12期
      關(guān)鍵詞:爬蟲網(wǎng)頁頁面

      許會芳

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

      關(guān)鍵詞:原理;爬蟲;數(shù)據(jù)分析

      中圖分類號:TP96? ? ? ? ? ? ?文獻(xiàn)標(biāo)識碼:A

      一、相關(guān)概念及原理

      (一)大數(shù)據(jù)技術(shù)

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

      (二)爬蟲技術(shù)

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

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

      (三)Python技術(shù)

      Python是一種解釋型、面向?qū)ο?、動態(tài)數(shù)據(jù)類型的高級程序設(shè)計語言。它是解釋型語言,但是也可以編譯成.pyc跨平臺的字節(jié)碼文件。.pyc文件有幾個好處:一是可以簡單地隱藏源碼,二是提高載入速度,三是跨平臺。相較于C++、Java語言,Python更易于學(xué)習(xí),有一個廣泛的標(biāo)準(zhǔn)庫。同時可以結(jié)合Java或C/C++語言,封裝成Python可以調(diào)用的擴(kuò)展庫,便于擴(kuò)展和移植。Python提供了非常豐富的針對網(wǎng)絡(luò)協(xié)議的標(biāo)準(zhǔn)庫,能簡單高效地進(jìn)行網(wǎng)頁抓取、網(wǎng)頁解析、數(shù)據(jù)存儲等,使程序員可以集中精力處理程序邏輯。

      二、常用網(wǎng)絡(luò)爬蟲技術(shù)

      (一)通用爬蟲技術(shù)

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

      (二)聚焦網(wǎng)絡(luò)爬蟲技術(shù)

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

      (三)增量式的爬蟲技術(shù)

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

      (四)深層網(wǎng)絡(luò)爬蟲技術(shù)

      Web頁面按照存在方式可以分為表層頁面和深層頁面兩類。表層頁面指以傳統(tǒng)搜索引擎可以索引到的頁面,深層頁面中的大部分?jǐn)?shù)據(jù)不能通過靜態(tài)鏈接方式獲取,隱藏于表單之后,需要提交搜索主題詞之后才能得到相應(yīng)的頁面。

      三、項(xiàng)目分析、設(shè)計、測試與實(shí)現(xiàn)

      (一)項(xiàng)目分析

      1.項(xiàng)目描述

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

      2.爬取網(wǎng)站過程分析

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

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

      第三步:點(diǎn)擊豆瓣圖書標(biāo)簽頁分類中的標(biāo)簽,會展示對應(yīng)圖書列表頁,在圖書列表頁中可以獲取每本圖書的詳細(xì)信息。

      3.項(xiàng)目設(shè)計

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

      項(xiàng)目主要分為四大模塊。模塊一實(shí)現(xiàn)對豆瓣圖書信息以及所有標(biāo)簽信息的爬取,并將圖書的標(biāo)簽信息寫入到Redis數(shù)據(jù)庫中,此模塊可使用Requests簡單實(shí)現(xiàn)。模塊二負(fù)責(zé)從Redis中獲取每個圖書標(biāo)簽,分頁式地爬取每本圖書的URL信息后,將信息寫入到Redis中。模塊三負(fù)責(zé)從Redis中獲取每個圖書的URL地址,并爬取對應(yīng)的圖書詳情,將每本圖書詳情信息寫回到Redis數(shù)據(jù)庫中。模塊四負(fù)責(zé)從Redis中獲取每本圖書的詳情信息,并將信息依次寫入到MySQL數(shù)據(jù)中,作為最終的爬取信息。該項(xiàng)目結(jié)構(gòu)圖如圖1所示。

      (二)項(xiàng)目部分實(shí)現(xiàn)

      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)#評論人數(shù)

      2.URL路由配置

      fromdjango.conf.urlsimporturl,include

      urlpatterns=[

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

      ]

      創(chuàng)建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()

      #執(zhí)行分頁處理

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

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

      maxpages=page.num_pages#最大頁數(shù)

      #判斷頁數(shù)是否越界

      ifpIndex>maxpages:

      pIndex=maxpages

      ifpIndex<1:

      pIndex=1

      list2=page.page(pIndex)#當(dāng)前頁數(shù)據(jù)

      plist=page.page_range#頁碼數(shù)列表

      (四)項(xiàng)目測試

      啟動服務(wù)測試,$pythonmanage.pyrunserver使用瀏覽器訪問測試,抓取部分信息的效果圖如圖2所示。本系統(tǒng)的設(shè)計和實(shí)現(xiàn)面向定向網(wǎng)站的網(wǎng)絡(luò)爬蟲程序,經(jīng)過測試,能滿足不同的性能要求,且抓取效果良好。

      四、結(jié)語

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

      參考文獻(xiàn):

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

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

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

      猜你喜歡
      爬蟲網(wǎng)頁頁面
      大狗熊在睡覺
      利用網(wǎng)絡(luò)爬蟲技術(shù)驗(yàn)證房地產(chǎn)灰犀牛之說
      刷新生活的頁面
      基于Python的網(wǎng)絡(luò)爬蟲和反爬蟲技術(shù)研究
      基于CSS的網(wǎng)頁導(dǎo)航欄的設(shè)計
      電子制作(2018年10期)2018-08-04 03:24:38
      利用爬蟲技術(shù)的Geo-Gnutel la VANET流量采集
      電子測試(2018年1期)2018-04-18 11:53:04
      基于URL和網(wǎng)頁類型的網(wǎng)頁信息采集研究
      電子制作(2017年2期)2017-05-17 03:54:56
      大數(shù)據(jù)環(huán)境下基于python的網(wǎng)絡(luò)爬蟲技術(shù)
      電子制作(2017年9期)2017-04-17 03:00:46
      網(wǎng)頁制作在英語教學(xué)中的應(yīng)用
      電子測試(2015年18期)2016-01-14 01:22:58
      10個必知的網(wǎng)頁設(shè)計術(shù)語
      久治县| 金乡县| 安阳县| 台前县| 阿荣旗| 万荣县| 自贡市| 思茅市| 衢州市| 湄潭县| 宁安市| 宣恩县| 长治县| 石河子市| 济源市| 贵南县| 垣曲县| 左云县| 泰和县| 湖北省| 柳州市| 微博| 军事| 游戏| 铁岭县| 潍坊市| 原阳县| 定陶县| 资溪县| 泽库县| 怀集县| 花垣县| 信宜市| 乐陵市| 南通市| 内丘县| 行唐县| 定边县| 柳江县| 拜城县| 恩平市|