• 
    

    
    

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

      ?

      基于Python的網(wǎng)頁(yè)信息爬取技術(shù)研究

      2021-11-20 03:17:20單艷張帆
      電子技術(shù)與軟件工程 2021年14期
      關(guān)鍵詞:爬蟲網(wǎng)頁(yè)頁(yè)面

      單艷 張帆

      (國(guó)家計(jì)算機(jī)網(wǎng)絡(luò)與信息安全管理中心新疆分中心 新疆維吾爾自治區(qū)烏魯木齊市 830017)

      互聯(lián)網(wǎng)以及信息技術(shù)產(chǎn)業(yè)的快速發(fā)展,讓互聯(lián)網(wǎng)當(dāng)中的數(shù)據(jù)變得繁雜多樣,網(wǎng)絡(luò)爬蟲本身是按照一定的規(guī)則,實(shí)現(xiàn)自動(dòng)地抓取網(wǎng)頁(yè)的信息并且進(jìn)行計(jì)算,網(wǎng)絡(luò)爬蟲的目的最主要在于將目標(biāo)網(wǎng)頁(yè)當(dāng)中的數(shù)據(jù)進(jìn)行下載管理,方便用戶的使用,提高用戶的使用體驗(yàn),由于大數(shù)據(jù)時(shí)代的到來網(wǎng)絡(luò)爬蟲技術(shù)得到了快速的發(fā)展得到,用戶通過網(wǎng)絡(luò)爬蟲的爬取技術(shù)可以更加快捷的獲取到網(wǎng)絡(luò)數(shù)據(jù),便于進(jìn)行數(shù)據(jù)挖掘。對(duì)于Python語言來說快捷簡(jiǎn)單,目前的爬蟲框架和工具可以大幅度降低使用的門檻,保證表達(dá)式的使用,讓數(shù)據(jù)的抓取更加的穩(wěn)定。先目前,各大網(wǎng)站的反爬蟲機(jī)制已經(jīng)構(gòu)建完善,市面上存在的一部分爬蟲程序已經(jīng)滿足客戶的實(shí)際需求,所以一個(gè)能夠?qū)崿F(xiàn)網(wǎng)頁(yè)信息爬取的爬蟲項(xiàng)目也是時(shí)代發(fā)展的需要。本文最主要的研究?jī)?nèi)容就是實(shí)現(xiàn)如何從目標(biāo)網(wǎng)頁(yè)當(dāng)中爬取自己所需要的信息,Pyhton作為一個(gè)學(xué)習(xí)較為簡(jiǎn)單,簡(jiǎn)單易上手的程序語言得到越來越多的重視,本文就主要選擇Python作為爬取技術(shù)的編寫軟件,使用其中較為成熟的庫(kù),數(shù)據(jù)分配展示方面我們配合使用spring, mybats以及mvc三個(gè)主要框架實(shí)現(xiàn)數(shù)據(jù)的展示。

      1 Python語言簡(jiǎn)介和優(yōu)勢(shì)

      Python語言對(duì)開發(fā)的軟件一致性和質(zhì)量水準(zhǔn)尤為重視,在使用Python語言進(jìn)行開發(fā)之后,絕大部分人都不會(huì)再使用其他的開發(fā)語言,這就足以表明開發(fā)者們是有多執(zhí)迷于Python語言的應(yīng)用。初見Python語言的時(shí)候,人們會(huì)首先注意到它的可讀性功能,大部分人對(duì)于Python語言的定義就是,它是一種效率極高的腳本語言,這其實(shí)是和使用者的個(gè)人看法有關(guān),盡管它本身就具備著周期短、便于使用等諸多優(yōu)點(diǎn),還能從容應(yīng)對(duì)所有的腳本語言工作,但它可不僅僅是一款功能強(qiáng)大的shell語言,甚至可以說是超出了控制語言的范疇,因?yàn)樗诳焖偾异`活的開發(fā)模式中可以有出色的表現(xiàn),所以我們常說Python語言是多面性的。相比之下,Python語言的可讀性、可維護(hù)性等要比傳統(tǒng)腳本語言強(qiáng)大得多,這就是為什么許多人更愿意使用Python語言的根本原因。不僅如此,Python語言還具有著更好的軟件質(zhì)量、模塊數(shù)量多、支持標(biāo)準(zhǔn)庫(kù)、較強(qiáng)的可移植性、極高的開發(fā)效率、組件集成等諸多優(yōu)勢(shì),得益于自身的強(qiáng)大功能,Python語言才可以在編程者的心中占據(jù)核心地位[1]。

      2 爬蟲框架介紹分析

      2.1 scrapy庫(kù)

      對(duì)于python編程軟件來說scrapy是一個(gè)非常著名的爬取網(wǎng)站數(shù)據(jù)、提取結(jié)構(gòu)性數(shù)據(jù)的應(yīng)用框架,主要有scrapy Engine(引擎)、Scheduler(調(diào)度器)、Downloader(下載器)、Spider(爬蟲)、Item Pipeline(管道)五大組件,本次框架主要依靠downloader實(shí)現(xiàn)數(shù)據(jù)的抓取,我們只需要指定相應(yīng)的url,就可自動(dòng)將抓取得到的內(nèi)容放置在item當(dāng)中,客戶實(shí)現(xiàn)自定義的處理之后,scrapy框架封裝以及下載等過程,這樣將會(huì)大幅度加快軟件的編寫速度。scrapy enginer系統(tǒng)主要實(shí)現(xiàn)相關(guān)數(shù)據(jù)的通訊,信號(hào)的傳遞。scheduler系統(tǒng)主要實(shí)現(xiàn)對(duì)于SEd 下載之后發(fā)送給相關(guān)的管理請(qǐng)求得到報(bào)告數(shù)據(jù)返還。spiders主要是處理返回?cái)?shù)據(jù)請(qǐng)求,提取試劑需要的數(shù)據(jù),交換引擎再次輸入到shceduler當(dāng)中[2]。

      2.2 scrapy框架運(yùn)作程序

      因?yàn)閟crapy需要一個(gè)較為固定明確目標(biāo)網(wǎng)站,被首先處理的spider將會(huì)發(fā)送給引擎,引擎控制調(diào)度器將request加入其中,調(diào)度器處理完成之后再送回引擎。引擎將調(diào)度器送回的request分析之后轉(zhuǎn)送到下載器當(dāng)中下載相關(guān)的信息,如果下載已經(jīng)失敗,引擎會(huì)保留之后傳回調(diào)度器,完成所有下載之后再繼續(xù)下載相關(guān)數(shù)據(jù)。

      根本頁(yè)面的實(shí)際代碼我們可以知道,書單當(dāng)中的信息卸載classs當(dāng)中的mod book list當(dāng)中的div其中存儲(chǔ),在這些dl標(biāo)簽當(dāng)中的都是一個(gè)主題書當(dāng)中的實(shí)際信息,我們需要的信息除非評(píng)價(jià)之后還需要簽訂dd標(biāo)簽當(dāng)中,評(píng)價(jià)的人數(shù)信息頁(yè)面當(dāng)中,也就是實(shí)現(xiàn)超鏈接,按照相關(guān)的方法實(shí)現(xiàn)代碼的定位。

      2.3 狀態(tài)碼的檢測(cè)分析

      在實(shí)際檢測(cè)爬蟲軟件的時(shí)候需要構(gòu)建URL進(jìn)行請(qǐng)求的時(shí)候,我們需要對(duì)于請(qǐng)求的狀態(tài)碼進(jìn)行檢測(cè)分析。我們?cè)谶M(jìn)行爬取的時(shí)候需要遇到網(wǎng)站被封閉IP模式下,需要返回reponse的狀態(tài)碼需要分析,但是scrapy框架體系需要忽視,但是在scrapy庫(kù)模式需要對(duì)于狀態(tài)碼需要達(dá)到200-300請(qǐng)求處理分析。我們需要實(shí)現(xiàn)手動(dòng)添加相關(guān)的代碼,這樣我們就可以判斷是否穩(wěn)定,最后實(shí)現(xiàn)相關(guān)的抓取分析。

      2.4 錄取展示

      MYSQL數(shù)據(jù)庫(kù)是一種具有小型關(guān)系型數(shù)據(jù)庫(kù)的管理系統(tǒng)。由于它具備體積小、運(yùn)行速度快、研發(fā)成本低、開放源代碼等諸多優(yōu)勢(shì),所以在各類中小型網(wǎng)站中得到了極為廣泛的普及和應(yīng)用。對(duì)于本次數(shù)據(jù)庫(kù)當(dāng)中使用的mysql數(shù)據(jù)庫(kù),需要進(jìn)行pymysql驅(qū)動(dòng)進(jìn)行鏈接數(shù)據(jù)庫(kù)系統(tǒng),讀取相關(guān)的信息展示在相關(guān)的頁(yè)面當(dāng)中,本文主要使用java當(dāng)中的spring以及sprng mvc和mybatis作為主要的構(gòu)建頁(yè)面[3]。

      3 目標(biāo)網(wǎng)站爬蟲設(shè)計(jì)

      3.1 目標(biāo)網(wǎng)站的確認(rèn)和進(jìn)入

      現(xiàn)階段已經(jīng)出現(xiàn)的爬蟲,可以為我們提供豐富的開發(fā)經(jīng)驗(yàn)、相關(guān)注意事項(xiàng)等。本次我們將豆瓣網(wǎng)作為研究對(duì)象,目的是對(duì)該網(wǎng)站上讀書標(biāo)簽下的圖書進(jìn)行爬取,同時(shí)根據(jù)該圖書的評(píng)分完成順序儲(chǔ)存。

      首先,我們通過火狐瀏覽器進(jìn)入豆瓣網(wǎng)中,隨便選擇一個(gè)有關(guān)主題的圖書頁(yè)面,單擊鼠標(biāo)左鍵將其打開。在更換主題過程中,我們發(fā)現(xiàn)豆瓣網(wǎng)的URL具有一定的規(guī)律性。

      對(duì)URL的轉(zhuǎn)換規(guī)律進(jìn)行總結(jié)后得出:tag后面就是目標(biāo)主題,類型資源緊隨其后,比如在看到book、source時(shí),它們分別顯示的是圖書和各種資源。

      其次,我們看到豆瓣網(wǎng)站的圖書頁(yè)面都是分頁(yè)的,而且單個(gè)頁(yè)面展示的資源數(shù)量為15個(gè)。將第2頁(yè)打開,可以看到頁(yè)面的URL出現(xiàn)了很大改變。

      到這里,本文可以確認(rèn)頁(yè)面URL的變化規(guī)律是:將頁(yè)面打開時(shí),因?yàn)槭堑?頁(yè),start參數(shù)顯示0,故而不顯示。進(jìn)入第2頁(yè)后,start單次增加15,說明每一頁(yè)展示的資源數(shù)量就是15個(gè)。

      3.2 信息匹配和檢索

      將目標(biāo)網(wǎng)站的URL變化模式確定下來后,接下來我們就要對(duì)網(wǎng)站中爬蟲內(nèi)容所處的位置進(jìn)行分析。當(dāng)前的目標(biāo)信息包括書名、作者、評(píng)分、出版社和評(píng)價(jià)人數(shù)這5個(gè)。通過火狐瀏覽器進(jìn)入豆瓣網(wǎng)的頁(yè)面,把目標(biāo)網(wǎng)站找出來,按下F12鍵,隨后對(duì)頁(yè)面的源代碼進(jìn)行分析,就能將所需信息的CSS代碼找出。本次我們將與南京有關(guān)的圖書假設(shè)為查找目標(biāo),結(jié)合火狐瀏覽器給到的信息,圖書與CSS關(guān)鍵代碼相互對(duì)應(yīng)。

      從頁(yè)面的源代碼來看,書單的全部信息在class為mod booklist的div中都能夠找到。并且每一個(gè)dl標(biāo)簽中,都有著與一本主題書相關(guān)的信息內(nèi)容。目標(biāo)信息全部寫在dd標(biāo)簽里,僅僅是評(píng)價(jià)人數(shù)沒有。但在其他頁(yè)面可以找到,即書名所在標(biāo)簽的超鏈接位置。采用同樣的方法,可直接定位具體代碼。

      3.3 狀態(tài)碼檢測(cè)

      由于在測(cè)試爬蟲的過程中,要持續(xù)構(gòu)造URL將請(qǐng)求發(fā)出,因此要監(jiān)測(cè)每一次請(qǐng)求后的狀態(tài)碼。在爬取期間,偶爾會(huì)有被該網(wǎng)站封IP的意外發(fā)生,這樣返回的reponse的狀態(tài)碼就會(huì)顯示403,但Scrapy會(huì)直接忽略這種狀態(tài)碼,原因在于它只處理在200到300以內(nèi)的狀態(tài)碼請(qǐng)求。所以,我們只能手動(dòng)把handle-httpstatuslist=[403]這個(gè)代碼給加上去,從而通過判斷response.status==403,將CloseSpider異常排出,以此獲取結(jié)束抓取的功能。

      3.4 錄入和展示

      本次研究中我們選擇了Mysql數(shù)據(jù)庫(kù),使用PyMySQL驅(qū)動(dòng)連接,才能實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的操作。讀取展示模塊的功能是把數(shù)據(jù)庫(kù)里儲(chǔ)存的信息值在自己頁(yè)面上進(jìn)行展示。本文在打造查詢頁(yè)面上,選用了Java中的三大框架,分別為MyBatis、SpringMvc和Spring[4]。

      4 編寫爬蟲過程中存在的一些問題

      4.1 爬蟲被封禁

      在首次運(yùn)行爬蟲時(shí)我們發(fā)現(xiàn),只要爬取出的數(shù)據(jù)量在幾百條左右,就會(huì)陸續(xù)有許多像404的非正常狀態(tài)碼彈出。隨后進(jìn)入豆瓣網(wǎng)中,發(fā)現(xiàn)以上的異常行為早已被網(wǎng)站所察覺,如果想要獲得正常的頁(yè)面,我們唯一的選擇就是進(jìn)行登錄。出現(xiàn)這種情況的時(shí)候,說明被爬取的網(wǎng)站已經(jīng)檢測(cè)出來爬蟲腳本程序,由于在瀏覽特性方面與正常用戶存在差異,使得服務(wù)器自動(dòng)封禁了檢測(cè)到的IP。

      解決辦法:用User Agent偽裝后再來爬取目標(biāo)網(wǎng)站,條件允許的話,可以再加一個(gè)隨機(jī)延時(shí),使訪問瀏覽器行為更接近于正常用戶的操作。

      4.2 多主體爬取

      由于本次爬取僅選擇和儲(chǔ)存了一個(gè)主題的書,因此在單表設(shè)計(jì)上是完全正常的。在同時(shí)爬取多個(gè)主題的書時(shí),單表對(duì)于瀏覽所爬取的信息就不能起到幫助了。所以,當(dāng)我們需要同時(shí)爬取多個(gè)主題的書時(shí),應(yīng)該先把它轉(zhuǎn)移到Excel表格里進(jìn)行存放,但要求一個(gè)單元格要與一跳爬取數(shù)據(jù)相互對(duì)應(yīng)。每個(gè)sheet頁(yè)都可以當(dāng)做對(duì)應(yīng)主題爬取出的書的信息的存放空間。

      按照評(píng)分?jǐn)?shù)據(jù),由高到低進(jìn)行順序排列和展示,可以讓我們?yōu)g覽目標(biāo)的效率得到顯著提高。

      4.3 加密的傳參

      本次研究是在豆瓣網(wǎng)中進(jìn)行爬取。由于該網(wǎng)站里的靜態(tài)頁(yè)面占比較大,所以爬取難度要比其他的低很多。有時(shí)目標(biāo)信息只有通過請(qǐng)求才能得到,例如應(yīng)用JavaScript生成、Ajax傳值等等。因此,我們要將火狐自帶的開發(fā)者工具運(yùn)用起來,對(duì)請(qǐng)求中的參數(shù)進(jìn)行查詢和瀏覽,緊接著再通過程序完成模擬過程。但是,部分網(wǎng)址的傳參已經(jīng)過加密處理,不能將目標(biāo)參數(shù)請(qǐng)求給模擬構(gòu)造出來。對(duì)于該類網(wǎng)站,就得換個(gè)方法,比如通過selemium+phantomJS框架,用phantomJS將模擬人為的操作執(zhí)行下去,獲取JavaScript后,便具備了觸發(fā)頁(yè)面的條件。從表單數(shù)據(jù)的填寫、提交一直到回滾頁(yè)面,都能進(jìn)行模擬。在這套框架的應(yīng)用下,絕大部分的反爬蟲方案都被破除了[5]。

      5 結(jié)束語

      在研究的初期通過對(duì)研究?jī)?nèi)容的文獻(xiàn)的整理,本人較為充分的利用了互聯(lián)網(wǎng)文獻(xiàn)資料和圖書館資源,對(duì)基于Python的網(wǎng)頁(yè)信息爬取技術(shù)進(jìn)行了較為全面的學(xué)習(xí)和研究,同時(shí)整理收集了大量Python的網(wǎng)頁(yè)信息爬取技術(shù)研究的相關(guān)資料,并且思考分析Python的網(wǎng)頁(yè)信息爬取技術(shù)研究當(dāng)中容易出現(xiàn)的問題等,通過這些資料的整理和對(duì)前人的研究成功進(jìn)行比較和借鑒,全面的總結(jié)了現(xiàn)有的文獻(xiàn)資料,得出了我國(guó)網(wǎng)頁(yè)信息爬取研究領(lǐng)域的最新觀點(diǎn),實(shí)現(xiàn)了研究的現(xiàn)實(shí)性和實(shí)踐性。本文主要是對(duì)Python框架下基于主題的數(shù)據(jù)爬取技術(shù)研究與實(shí)現(xiàn)進(jìn)行研究,通過爬蟲程序的實(shí)現(xiàn),來爬取目標(biāo)網(wǎng)站的所需數(shù)據(jù),從而達(dá)到對(duì)Python開發(fā)相關(guān)步驟的充分了解及初步掌握。從程序編寫結(jié)束爬取數(shù)據(jù)出現(xiàn)IP被網(wǎng)站封禁的情況,到逐步優(yōu)化程序,能夠?qū)崿F(xiàn)在本地存儲(chǔ)爬取的信息,說明本文的研究目標(biāo)已經(jīng)基本達(dá)成了。

      經(jīng)過此次開發(fā)爬蟲程序,我們發(fā)現(xiàn)需要完善的部分還有許多。例如:在數(shù)據(jù)量較大時(shí),爬蟲爬取的速度會(huì)明顯減慢,可嘗試用分布式的爬蟲進(jìn)行爬取,有利于工作效率的提高。

      猜你喜歡
      爬蟲網(wǎng)頁(yè)頁(yè)面
      利用網(wǎng)絡(luò)爬蟲技術(shù)驗(yàn)證房地產(chǎn)灰犀牛之說
      刷新生活的頁(yè)面
      基于Python的網(wǎng)絡(luò)爬蟲和反爬蟲技術(shù)研究
      基于CSS的網(wǎng)頁(yè)導(dǎo)航欄的設(shè)計(jì)
      電子制作(2018年10期)2018-08-04 03:24:38
      利用爬蟲技術(shù)的Geo-Gnutel la VANET流量采集
      基于URL和網(wǎng)頁(yè)類型的網(wǎng)頁(yè)信息采集研究
      電子制作(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)頁(yè)制作在英語教學(xué)中的應(yīng)用
      10個(gè)必知的網(wǎng)頁(yè)設(shè)計(jì)術(shù)語
      同一Word文檔 縱橫頁(yè)面并存
      行唐县| 泸西县| 独山县| 连州市| 沛县| 东平县| 龙胜| 曲麻莱县| 泌阳县| 彩票| 江城| 体育| 出国| 碌曲县| 壤塘县| 霸州市| 朝阳市| 集安市| 土默特左旗| 临高县| 哈密市| 宜城市| 仲巴县| 延寿县| 德清县| 阿城市| 根河市| 七台河市| 泉州市| 大安市| 台北市| 龙里县| 武清区| 青神县| 大新县| 嘉祥县| 富阳市| 岳普湖县| 分宜县| 佛学| 乌海市|