999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

2021-11-20 03:17:20單艷張帆
電子技術(shù)與軟件工程 2021年14期
關(guān)鍵詞:頁(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í)代的到來(lái)網(wǎng)絡(luò)爬蟲技術(shù)得到了快速的發(fā)展得到,用戶通過(guò)網(wǎng)絡(luò)爬蟲的爬取技術(shù)可以更加快捷的獲取到網(wǎng)絡(luò)數(shù)據(jù),便于進(jìn)行數(shù)據(jù)挖掘。對(duì)于Python語(yǔ)言來(lái)說(shuō)快捷簡(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)單易上手的程序語(yǔ)言得到越來(lái)越多的重視,本文就主要選擇Python作為爬取技術(shù)的編寫軟件,使用其中較為成熟的庫(kù),數(shù)據(jù)分配展示方面我們配合使用spring, mybats以及mvc三個(gè)主要框架實(shí)現(xiàn)數(shù)據(jù)的展示。

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

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

2 爬蟲框架介紹分析

2.1 scrapy庫(kù)

對(duì)于python編程軟件來(lái)說(shuō)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框架封裝以及下載等過(guò)程,這樣將會(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ǔ)存。

首先,我們通過(guò)火狐瀏覽器進(jìn)入豆瓣網(wǎng)中,隨便選擇一個(gè)有關(guān)主題的圖書頁(yè)面,單擊鼠標(biāo)左鍵將其打開。在更換主題過(guò)程中,我們發(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,說(shuō)明每一頁(yè)展示的資源數(shù)量就是15個(gè)。

3.2 信息匹配和檢索

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

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

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

由于在測(cè)試爬蟲的過(guò)程中,要持續(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è)代碼給加上去,從而通過(guò)判斷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 編寫爬蟲過(guò)程中存在的一些問(wèn)題

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í)候,說(shuō)明被爬取的網(wǎng)站已經(jīng)檢測(cè)出來(lái)爬蟲腳本程序,由于在瀏覽特性方面與正常用戶存在差異,使得服務(wù)器自動(dòng)封禁了檢測(cè)到的IP。

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

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

5 結(jié)束語(yǔ)

在研究的初期通過(guò)對(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)的問(wèn)題等,通過(guò)這些資料的整理和對(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)行研究,通過(guò)爬蟲程序的實(shí)現(xiàn),來(lái)爬取目標(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ǔ)爬取的信息,說(shuō)明本文的研究目標(biāo)已經(jīng)基本達(dá)成了。

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

猜你喜歡
頁(yè)面語(yǔ)言信息
大狗熊在睡覺
刷新生活的頁(yè)面
語(yǔ)言是刀
文苑(2020年4期)2020-05-30 12:35:30
讓語(yǔ)言描寫搖曳多姿
訂閱信息
中華手工(2017年2期)2017-06-06 23:00:31
累積動(dòng)態(tài)分析下的同聲傳譯語(yǔ)言壓縮
我有我語(yǔ)言
展會(huì)信息
同一Word文檔 縱橫頁(yè)面并存
淺析ASP.NET頁(yè)面導(dǎo)航技術(shù)
主站蜘蛛池模板: 日本高清免费一本在线观看| 日韩欧美国产综合| 久久精品人妻中文视频| 丝袜亚洲综合| 中文字幕在线免费看| 亚洲伊人电影| 欧美综合中文字幕久久| 一级毛片免费观看久| 内射人妻无套中出无码| 亚洲av无码成人专区| 成人在线天堂| 日韩国产黄色网站| 伊人婷婷色香五月综合缴缴情 | 欧美成人在线免费| 欧美中文字幕一区| 欧美日本在线播放| 网友自拍视频精品区| 欧美在线视频a| 爱做久久久久久| 久久一本日韩精品中文字幕屁孩| 激情视频综合网| 久久精品66| 国产美女91呻吟求| 欧美h在线观看| 久久久久88色偷偷| 青青操国产| 熟女视频91| www.91在线播放| 热思思久久免费视频| 亚洲精品国产乱码不卡| 亚洲欧美日韩视频一区| 欧美狠狠干| 亚洲国产中文精品va在线播放| 91亚瑟视频| 国产欧美日韩免费| 精品一区二区三区无码视频无码| 久久久久人妻一区精品| 国产精品无码AⅤ在线观看播放| 最新国产在线| 思思99思思久久最新精品| 97免费在线观看视频| 亚洲AV电影不卡在线观看| 亚洲第一视频网| 久久无码高潮喷水| 91九色国产porny| 国产精品99久久久久久董美香| 国产亚洲精久久久久久久91| 97精品久久久大香线焦| 一级毛片免费观看久| 她的性爱视频| 国产成人综合久久精品下载| 久久久久国产精品熟女影院| 天堂亚洲网| 人妻中文久热无码丝袜| 亚欧美国产综合| 欧美日韩另类国产| 国产精品xxx| 精品久久蜜桃| 国产成人1024精品| yy6080理论大片一级久久| 尤物精品视频一区二区三区| 日韩高清在线观看不卡一区二区 | 国产激情无码一区二区免费| 亚洲国产系列| 欧美啪啪网| 欧美日韩精品一区二区在线线 | 欧美一区日韩一区中文字幕页| 欧美日韩在线国产| 国产91麻豆免费观看| h视频在线播放| 日韩精品亚洲一区中文字幕| 天天爽免费视频| 青青青草国产| 蝴蝶伊人久久中文娱乐网| 国产爽妇精品| 97se亚洲综合在线| 特级毛片8级毛片免费观看| 全色黄大色大片免费久久老太| 黄片在线永久| 日韩精品高清自在线| 久久美女精品| 国产在线视频欧美亚综合|