版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
摘要嗶哩嗶哩視頻彈幕網(wǎng),從一開(kāi)始的無(wú)名小站發(fā)展到現(xiàn)在月活躍用戶(hù)超一億的巨大規(guī)模,不僅引起了行業(yè)浪潮,也吸引越來(lái)越多人選擇成為UP主(Uploader)即視頻上傳者。Bilibili網(wǎng)為UP主提供了平臺(tái)和各種功能支持,但還是無(wú)法面面俱到。本軟件設(shè)計(jì)旨在提供便捷的剛需功能,為新興UP主提供功能支持。本畢業(yè)設(shè)計(jì)采用標(biāo)準(zhǔn)的軟件開(kāi)發(fā)流程,包含了需求分析、整體設(shè)計(jì)、模塊實(shí)現(xiàn)、編碼、測(cè)試、打包軟件等等步驟。該軟件算法和輪廓基于python設(shè)計(jì),調(diào)用了包含requests、random、pickle等等成熟的集成庫(kù)環(huán)境。軟件主要針對(duì)用戶(hù)需求頗多的兩個(gè)主要分支:評(píng)論和抽獎(jiǎng)進(jìn)行設(shè)計(jì)實(shí)現(xiàn)。評(píng)論區(qū)功能包括爬取完整的表單數(shù)據(jù),解決復(fù)數(shù)層評(píng)論的獲取和存儲(chǔ),實(shí)現(xiàn)快速瀏覽、存儲(chǔ)和多種查找功能;抽獎(jiǎng)區(qū)功能包括實(shí)現(xiàn)爬取多種抽獎(jiǎng)材料,根據(jù)需求分析樣本并最終使用隨機(jī)算法進(jìn)行隨機(jī)數(shù)獲取,實(shí)現(xiàn)抽獎(jiǎng)功能。關(guān)鍵詞:爬蟲(chóng)bilibili用戶(hù)python
AbstractBilibilihasstartedasanunfamousacgwebatthebeginningandnowhaveahugescaleofover100millionactiveuserseachmouth,whichiscausingawaveandattractedmoreandmorepeopletochoosetobecomeaUPloader.BilibiliprovidesUploaderssportandvariousfunctionsfortheusers,butitstillcannotcovereverything.Thissoftwareisdesignedtoprovideconvenientandneededfunctionstousers.Thisgraduationdesignusesastandardsoftwaredevelopmentprocess,includingrequirementsanalysis,overalldesign,moduleimplementation,coding,testing,packagingandothersteps.Thesoftwarealgorithmandoutlinearedesignedbasedonpython,andcallthematureintegratedlibraryenvironmentincludingrequests,random,pickleandsoon.Thesoftwareismainlydesignedandimplementedtoslovetwomainfunctionswithmanyuserneeds:reviewsandlotteries. Thereviewfunctionincudingcrawlingcompleteformdatas,solvingtheacquisitionandstorageofmultiplelayersofreviews,realizingquickbrowsing,storageandmultiplesearchfunctionsandsoon.Thelotteryfunctioncontainscrawlingmultipledatastoanalysisandfinallyfinishtherandomchoise.Keywords:WebCrawlerBilibiliUserPython 目錄1緒論 緒論項(xiàng)目背景與意義近年來(lái)隨著網(wǎng)絡(luò)的飛速發(fā)展和建設(shè),人們獲取信息的途徑也從主流的報(bào)紙電視,過(guò)渡到手機(jī)電腦等網(wǎng)絡(luò)平臺(tái)。各類(lèi)別的文化借此逐漸滲透到人們周?chē)纳钪?。作為?guó)內(nèi)起步最早的一批二次元視頻網(wǎng)站之一,嗶哩嗶哩以其獨(dú)有的彈幕文化逐步發(fā)展成現(xiàn)在國(guó)內(nèi)流量第一的視頻彈幕網(wǎng)站。嗶哩嗶哩視頻內(nèi)容的高跨度、高質(zhì)量、高時(shí)效力也為其吸引了巨大的現(xiàn)有用戶(hù)和潛在用戶(hù),2019年5月起月活躍用戶(hù)數(shù)突破1億,并且還在呈現(xiàn)增長(zhǎng)趨勢(shì)。作為一個(gè)互聯(lián)網(wǎng)公司,嗶哩嗶哩是成功的。但其擁有的龐大用戶(hù)數(shù)量,注定決定了嗶哩嗶哩無(wú)法做到面面俱到,滿足所有用戶(hù)的需求。嗶哩嗶哩主要的運(yùn)作方式為網(wǎng)頁(yè),依賴(lài)數(shù)據(jù)的建設(shè)和支持為用戶(hù)提供了很棒的功能。本課題的主要目的是設(shè)計(jì)面向用戶(hù)的網(wǎng)絡(luò)爬蟲(chóng)程序,提供用戶(hù)一些官方并未提供的功能,比如類(lèi)別抽獎(jiǎng)和數(shù)據(jù)獲取。1.2國(guó)內(nèi)外研究情況近年來(lái),國(guó)內(nèi)外程序研究人員提出了許多種類(lèi)的網(wǎng)絡(luò)爬蟲(chóng)結(jié)構(gòu)與算法,亦應(yīng)用在不同的行業(yè)與領(lǐng)域,大大提高信息利用率和工作效率。許多大型軟件公司也積極地根據(jù)自身行業(yè)特點(diǎn)與需求,開(kāi)發(fā)出許多類(lèi)別的網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng),比如google,微軟的bingbot和yahoo的slirp等等。本課題研究的方向是提供特定網(wǎng)站嗶哩嗶哩的額外功能實(shí)現(xiàn),在經(jīng)過(guò)網(wǎng)絡(luò)查詢(xún)后發(fā)現(xiàn),國(guó)內(nèi)目前并未有人系統(tǒng)地開(kāi)發(fā)過(guò)相應(yīng)軟件,可以說(shuō)是較為新穎的研究課題。并且考慮到嗶哩嗶哩用戶(hù)基數(shù)大,前景可期,用戶(hù)需求只會(huì)越來(lái)越多,本課題的研究實(shí)現(xiàn)也具有了現(xiàn)實(shí)意義。具備研究?jī)r(jià)值。在實(shí)現(xiàn)預(yù)期目標(biāo)的同時(shí),將一同研究作為功能性的爬蟲(chóng)程序,在面對(duì)復(fù)雜、多樣性的環(huán)境下可能出現(xiàn)的問(wèn)題,合理借鑒前人研究經(jīng)驗(yàn),解決和優(yōu)化。1.3文獻(xiàn)綜述對(duì)于網(wǎng)絡(luò)爬蟲(chóng)的研究從上世紀(jì)九十年代就已經(jīng)開(kāi)始,目前爬蟲(chóng)技術(shù)已經(jīng)趨見(jiàn)成熟,功能描述向高概括性高度模塊化靠攏。網(wǎng)絡(luò)爬蟲(chóng)是搜索引擎的重要組成部分。網(wǎng)絡(luò)上比較著名的開(kāi)源爬蟲(chóng)有Nutch,Larbin,Heritrix等等。網(wǎng)絡(luò)爬蟲(chóng)最重要的是網(wǎng)頁(yè)搜索策略(廣度優(yōu)先和最佳度優(yōu)先)和網(wǎng)頁(yè)分析策略(基于網(wǎng)絡(luò)拓?fù)涞姆治鏊惴ê突诰W(wǎng)頁(yè)內(nèi)容的網(wǎng)頁(yè)分析算法)。國(guó)內(nèi)外流行的爬蟲(chóng)技術(shù)相當(dāng)多,各個(gè)編程語(yǔ)言都有涉及?;赑ython、C++、C、java等等。就原理而言,爬蟲(chóng)組件都是差不多的。而無(wú)頭瀏覽器是最能夠說(shuō)明爬蟲(chóng)特性的部分,無(wú)需提供多余的身份信息即可向服務(wù)器請(qǐng)求數(shù)據(jù),以適用于自動(dòng)化測(cè)試等領(lǐng)域。此外主流的瀏覽器如Chrome、Firefox、Safari等都提供了相應(yīng)的抓取支持,selenium作為一個(gè)集成工具,包含了上述的所有組件,以WebDriver的形式,直接在瀏覽器進(jìn)行測(cè)試,適配各種爬蟲(chóng)組件,方便使用者進(jìn)行操作。PAGE2網(wǎng)絡(luò)爬蟲(chóng)介紹2.1網(wǎng)絡(luò)爬蟲(chóng)原理網(wǎng)絡(luò)爬蟲(chóng)行為上就是模擬真人進(jìn)行流程操作,獲取網(wǎng)頁(yè)返回的數(shù)據(jù)進(jìn)行儲(chǔ)存分析,等同于瀏覽器對(duì)網(wǎng)頁(yè)的訪問(wèn)。因這種技術(shù)實(shí)現(xiàn)很像蜘蛛在蛛網(wǎng)上的往返爬行,也被生動(dòng)地取名為爬蟲(chóng)。其實(shí)質(zhì)就是一個(gè)請(qǐng)求網(wǎng)站并儲(chǔ)存數(shù)據(jù)的自動(dòng)化程序。2.2網(wǎng)絡(luò)爬蟲(chóng)框架下圖為一個(gè)通用的網(wǎng)絡(luò)爬蟲(chóng)框架。通過(guò)調(diào)用URL在隊(duì)列中進(jìn)行管理,實(shí)現(xiàn)數(shù)據(jù)獲取和保存。已下載網(wǎng)頁(yè)庫(kù)已下載網(wǎng)頁(yè)庫(kù)種子URL待抓取URL已抓取URL讀取解析下載放進(jìn)隊(duì)列圖2.1網(wǎng)絡(luò)爬蟲(chóng)框架圖2.3網(wǎng)絡(luò)爬蟲(chóng)工作流程2.3.1向服務(wù)器發(fā)起請(qǐng)求爬蟲(chóng)程序通過(guò)request向目標(biāo)網(wǎng)站的服務(wù)器發(fā)起請(qǐng)求,服務(wù)器會(huì)根據(jù)request內(nèi)包含的請(qǐng)求作出處理,返回瀏覽器結(jié)果,這個(gè)過(guò)程即為response。而Request包含:1、請(qǐng)求方式常用的有GET和POST兩種請(qǐng)求類(lèi)型,另外還有HEAD、PUT、OPTIONS等。2、請(qǐng)求URLURL即(UniformResourceLocator)統(tǒng)一資源定位符,網(wǎng)頁(yè)、歌曲、視頻、圖片都可以用一個(gè)唯一URL確定定位。3、請(qǐng)求頭發(fā)送請(qǐng)求時(shí)可選的頭部信息,取決于網(wǎng)頁(yè)的請(qǐng)求要求,常見(jiàn)有Cookies、Host等。4、請(qǐng)求體發(fā)送請(qǐng)求時(shí)可選的額外數(shù)據(jù),比如提交的表單、文本數(shù)據(jù)。2.3.2獲取響應(yīng)內(nèi)容服務(wù)器返回的response包含:1、響應(yīng)狀態(tài)即狀態(tài)碼,比如200為處理成功,404為未找到請(qǐng)求頁(yè)面。2、響應(yīng)頭包含返回的內(nèi)容格式、長(zhǎng)度、類(lèi)型等自然信息,以及服務(wù)器信息等。3、響應(yīng)體即請(qǐng)求的資源內(nèi)容,爬蟲(chóng)獲取最主要的部分。2.3.3解析內(nèi)容根據(jù)獲取的數(shù)據(jù)類(lèi)型,比如HTML文檔,JSON格式文本,圖片,歌曲視頻等等,作出相應(yīng)處理。處理方式有直接處理,正則表達(dá)式,json解析,beautifulsoUP等等。2.3.4儲(chǔ)存分析以不同的格式:文本、json、jpg、mp3等等儲(chǔ)存數(shù)據(jù),作進(jìn)一步處理分析。廣東東軟學(xué)院本科畢業(yè)設(shè)計(jì)(論文)3軟件整體設(shè)計(jì)3.1程序需求分析嗶哩嗶哩網(wǎng)站作為新類(lèi)別媒體平臺(tái)的代表,在近幾年以其內(nèi)容的高跨度、高質(zhì)量、高影響力吸引了巨大的現(xiàn)有用戶(hù)和潛在用戶(hù),2019年5月起月活躍用戶(hù)數(shù)突破1億,并且還在呈現(xiàn)增長(zhǎng)趨勢(shì)。UP主,一個(gè)嗶哩嗶哩網(wǎng)站視頻創(chuàng)作者的別稱(chēng),為嗶哩嗶哩海量視頻的產(chǎn)出增添了濃墨重彩的一筆。從起初的小受眾網(wǎng)站一步步走向了多元化的媒體平臺(tái),這也吸引了越來(lái)越多的人成為UP主,加入到創(chuàng)作的浪潮中。本軟件面向的對(duì)象,就是數(shù)量眾多的中小規(guī)模的新UP主。許多UP主在不斷產(chǎn)出高質(zhì)量視頻后,也未必能成為粉絲過(guò)萬(wàn)、十萬(wàn)、百萬(wàn)的大UP主。拋去主觀因素,通過(guò)網(wǎng)上調(diào)查等方式,我總結(jié)出了他們需要的一些非官方提供功能。一個(gè)全面的視頻信息匯總功能,讓用戶(hù)看到全部視頻的具體數(shù)據(jù)。一個(gè)高效的評(píng)論瀏覽功能,可以使他們了解觀眾的想法和建議,為新的內(nèi)容創(chuàng)作蓄力。一個(gè)多樣化的評(píng)論查找功能,有時(shí)需要找到特定信息,比如歌名,網(wǎng)站等等,或者查看長(zhǎng)度較長(zhǎng)的評(píng)論,查找功能就能很好地解決問(wèn)題。這個(gè)功能也不局限于UP主,是所有用戶(hù)都能使用的功能。一個(gè)完善的抽獎(jiǎng)功能。嗶哩嗶哩為UP主提供了許多方便的功能,抽獎(jiǎng)就是其中之一。但為了防止濫用引發(fā)的一系列問(wèn)題,該功能只提供給粉絲過(guò)萬(wàn)或者有一定優(yōu)質(zhì)動(dòng)態(tài)、投稿積累的UP主,新人UP主要想在前期積累人氣,抽獎(jiǎng)功能是必不可少的。一個(gè)粉絲流動(dòng)監(jiān)視功能。新人UP主最關(guān)注的應(yīng)該就是粉絲增長(zhǎng)趨勢(shì)了。這個(gè)功能無(wú)疑十分便捷,可以讓他們看到一步步的積累。3.2系統(tǒng)框架構(gòu)造有了需求后,就可以著手設(shè)計(jì)軟件,即面向?qū)ο缶幊?。先根?jù)用戶(hù)需求,總結(jié)出需求框架,方便后續(xù)工作流程。下圖為具體框架:圖3.1需求總結(jié)圖由需求可對(duì)程序進(jìn)行初步構(gòu)造,設(shè)計(jì)成由一個(gè)初始界面框內(nèi)嵌一個(gè)多層循環(huán)且可隨時(shí)打破的菜單函數(shù)構(gòu)成的程序。設(shè)計(jì)目的是高效輸出,簡(jiǎn)便操作,讓任何人都可以輕易上手。大致邏輯確定后,開(kāi)始設(shè)計(jì)系統(tǒng)主邏輯。下圖為構(gòu)造完畢的主體與子功能循環(huán)圖:圖3.2主體與子功能循環(huán)圖如圖示,即菜單程序里的功能模塊在循環(huán)條件成立時(shí)不斷循環(huán),功能模塊也隨需求進(jìn)入循環(huán)或者打破,并在用戶(hù)給出打破條件后返回主體,參與主程序循環(huán)。接下來(lái)開(kāi)始設(shè)計(jì)主菜單的邏輯流程。如下圖:初始界面初始界面開(kāi)始選擇執(zhí)行輸出結(jié)果菜單返回功能列表退出程序是否是否圖3.3主菜單的邏輯流程圖 圖示闡述了系統(tǒng)的實(shí)現(xiàn)方法,即用戶(hù)啟動(dòng)程序,選擇進(jìn)入主菜單,依實(shí)際需求選擇相應(yīng)功能,執(zhí)行完畢后,可選擇繼續(xù)操作或者返回主界面,亦或是退出程序。到這里,系統(tǒng)實(shí)現(xiàn)的大致方向已經(jīng)確定,下面開(kāi)始設(shè)計(jì)各部分功能的邏輯流程。下圖為繪制好的番號(hào)互轉(zhuǎn)和評(píng)論功能實(shí)現(xiàn)邏輯:aab互轉(zhuǎn)a2b獲取b2a返回菜單退出查看評(píng)論用戶(hù)+評(píng)論評(píng)論輸入bv查看轉(zhuǎn)換結(jié)果是是是否否否圖3.4番號(hào)互轉(zhuǎn)和評(píng)論功能實(shí)現(xiàn)邏輯圖如圖中描繪,獲取評(píng)論的操作邏輯為輸入bv號(hào),程序爬取后輸出給用戶(hù)查看,可繼續(xù)循環(huán)查詢(xún)功能或者返回主界面。而左半部分的av號(hào)與bv號(hào)互相轉(zhuǎn)換流程,在后續(xù)軟件實(shí)現(xiàn)會(huì)作進(jìn)一步的補(bǔ)充說(shuō)明。其邏輯和前部分類(lèi)似,通過(guò)獲取用戶(hù)輸入的視頻編號(hào)(av/bv號(hào))進(jìn)行轉(zhuǎn)換,輸出結(jié)果。 下圖為評(píng)論查找的邏輯設(shè)計(jì):評(píng)論查找評(píng)論查找關(guān)鍵詞查找去重查找長(zhǎng)評(píng)查找輸入關(guān)鍵詞結(jié)果查詢(xún)返回菜單V碼獲取查詢(xún)結(jié)果否否是是圖3.5評(píng)論查找的邏輯設(shè)計(jì)圖 如圖中的設(shè)計(jì),在獲取視頻標(biāo)識(shí)符后,對(duì)用戶(hù)的要求分別實(shí)現(xiàn),比如查詢(xún)功能接收關(guān)鍵詞字符,在比對(duì)庫(kù)后輸出結(jié)果,無(wú)論成功與否都可以重復(fù)操作或者跳出循環(huán)返回菜單。下圖為抽獎(jiǎng)功能和粉絲流動(dòng)功能的邏輯實(shí)現(xiàn):抽獎(jiǎng)抽獎(jiǎng)粉絲流動(dòng)V碼獲取mid獲取調(diào)用多日數(shù)據(jù)評(píng)論抽獎(jiǎng)粉絲抽獎(jiǎng)粉絲流動(dòng)新粉抽獎(jiǎng)舊粉抽獎(jiǎng)結(jié)果新增變動(dòng)取關(guān)變動(dòng)數(shù)據(jù)儲(chǔ)存返回菜單圖3.6抽獎(jiǎng)功能和粉絲流動(dòng)功能邏輯圖 不同于前幾個(gè)功能的相對(duì)獨(dú)立,抽獎(jiǎng)和粉絲流動(dòng)這兩個(gè)功能的分支會(huì)有共同的數(shù)據(jù)需求,在設(shè)計(jì)程序邏輯的時(shí)候應(yīng)該注意,合理利用資源,實(shí)現(xiàn)一對(duì)多的函數(shù)調(diào)用,節(jié)省代碼量,提高效率。即粉絲抽獎(jiǎng)和粉絲流動(dòng)部分是需要用戶(hù)提供mid而不是bv號(hào),但整體邏輯依舊和前部分的功能模塊類(lèi)似。 下圖為用戶(hù)視頻信息查詢(xún):獲取mid獲取mid用戶(hù)視頻信息瀏覽合法返回菜單排版打印各評(píng)論數(shù)視頻總量各bv號(hào)各標(biāo)題各播放量獲取數(shù)據(jù)是否圖3.7用戶(hù)視頻信息查詢(xún) 該功能提供用戶(hù)查看所有的視頻相關(guān)信息,邏輯設(shè)計(jì)為較精簡(jiǎn)的交互模式,獲取請(qǐng)求后輸入mid,程序判斷數(shù)據(jù)合法性后,將內(nèi)容排版打印輸出,相對(duì)于前幾個(gè)功能的多分支,本功能邏輯簡(jiǎn)單易懂。繪制完成主程序和功能模塊的邏輯設(shè)計(jì)后,可以開(kāi)始進(jìn)行爬蟲(chóng)程序設(shè)計(jì)。4爬蟲(chóng)程序具體設(shè)計(jì)流程4.1環(huán)境搭載 在有了需求和邏輯框架后,開(kāi)始進(jìn)入軟件設(shè)計(jì)環(huán)節(jié)。 首先是環(huán)境的搭載。本軟件是基于python開(kāi)發(fā)的爬蟲(chóng)程序,自然少不了python的安裝和環(huán)境構(gòu)建。第一步是安裝python。進(jìn)入官網(wǎng)下載地址/downloads/windows,選擇對(duì)應(yīng)的32位或64位安裝包進(jìn)行下載,然后根據(jù)提示進(jìn)行安裝,需要注意安裝路徑的選擇和應(yīng)該勾選將python添加到PATH環(huán)境變量。安裝完后打開(kāi)命令提示符CMD輸入python-V,若返回具體版本則為安裝成功。如下圖示:圖4.1安裝結(jié)果安裝完python,可以選擇直接開(kāi)始代碼編寫(xiě),原生的python組件雖然好用,但有些簡(jiǎn)潔,缺少了諸多豐富的功能和調(diào)試交互。Python也有許多IDE可供選擇,這里選擇pycharm作為集成開(kāi)發(fā)環(huán)境進(jìn)行代碼編寫(xiě)。PyCharm作為知名度和用戶(hù)量都很高的python編譯器,在界面、交互、調(diào)試、管理等都比原生要更精致和易用。進(jìn)入官網(wǎng)/pycharm/download/#section=windows,下載對(duì)應(yīng)版本,跟著指示安裝,同樣需要更新PATH環(huán)境變量。有專(zhuān)業(yè)版和社區(qū)版可供選擇,社區(qū)版面向個(gè)人開(kāi)發(fā)者,是免費(fèi)使用的。安裝后即可。打開(kāi)pycharm新建project,進(jìn)入project界面點(diǎn)擊file-new-pythonfile創(chuàng)建新的python文件。并手動(dòng)添加解釋器。點(diǎn)擊右上角file-settings進(jìn)入設(shè)置如圖示:圖4.2進(jìn)入設(shè)置在project:項(xiàng)目名稱(chēng)欄目下點(diǎn)擊projectinterpreter,可在右上方添加默認(rèn)解釋器或新建解釋器。如圖示:圖4.3添加解釋器至此,基礎(chǔ)的環(huán)境搭載完成。測(cè)試是否成功,輸入print('helloworld!'),點(diǎn)擊run按鈕運(yùn)行,成功打印字符,如圖示:圖4.4測(cè)試pycharm 在軟件編寫(xiě)時(shí)經(jīng)常會(huì)對(duì)多行代碼進(jìn)行運(yùn)行測(cè)試,每次都使用run運(yùn)行的話會(huì)比較麻煩,因?yàn)橹皩?xiě)好的代碼也會(huì)跟著運(yùn)行,若每次都注釋掉效率也有所降低。我們可以使用ipython解決這一問(wèn)題。 Ipython是python的一個(gè)交互式shell,相比默認(rèn)的shell功能更強(qiáng)大,也能很好地兼容pycharm,其特有的in-out模式可以支持指定代碼行的運(yùn)行,對(duì)功能調(diào)試十分有益。安裝十分簡(jiǎn)單,打開(kāi)cmd輸入pipinstallipython等待安裝完成即可。若報(bào)錯(cuò)失敗可檢查是不是pip工具沒(méi)有升級(jí)到最新版本。使用pipshowpip可以查看當(dāng)前pip的版本信息,若提示YoushouldconsiderUPgradingviathe'python-mpipinstall--UPgradepip'comm,直接復(fù)制引號(hào)內(nèi)容輸入更新即可。安裝成功后打開(kāi)cmd輸入ipython,出現(xiàn)下圖In[1]即為成功。圖4.5測(cè)試ipython 打開(kāi)pycharm選中任意一行代碼,右鍵選擇executeselectioninconsole,下方即會(huì)打開(kāi)shell界面。圖4.6在pycharm中啟用ipython圖4.7啟用成功 如圖,可在shell界面進(jìn)行代碼編寫(xiě)測(cè)試。4.2模塊功能實(shí)現(xiàn)4.2.1實(shí)現(xiàn)評(píng)論獲取與查找 軟件環(huán)境搭載好后,開(kāi)始進(jìn)行代碼編寫(xiě)。首先把目標(biāo)確定在如何獲取評(píng)論。使用Chrome瀏覽器打開(kāi)嗶哩嗶哩,隨意點(diǎn)開(kāi)一個(gè)視頻,這里應(yīng)該選擇評(píng)論較少的,因?yàn)槭滓康氖菍?shí)現(xiàn)獲取,之后再解決抓取量的問(wèn)題。若選擇大量評(píng)論的視頻進(jìn)行測(cè)試很可能被嗶哩嗶哩網(wǎng)站監(jiān)測(cè)到,這對(duì)于爬蟲(chóng)的開(kāi)展無(wú)疑是無(wú)益的。點(diǎn)開(kāi)視頻后按F12打開(kāi)開(kāi)發(fā)者工具調(diào)試界面,點(diǎn)擊network,按下Ctrl+R刷新網(wǎng)頁(yè)??梢钥吹骄W(wǎng)頁(yè)的所有網(wǎng)絡(luò)請(qǐng)求。如圖示:圖4.8找到請(qǐng)求 圖中可以看出,請(qǐng)求有很多個(gè),一個(gè)個(gè)查找肯定可以找到評(píng)論相關(guān)的數(shù)據(jù)包,我們也可以使用左方的搜索功能,隨意復(fù)制一條評(píng)論進(jìn)行搜索,結(jié)果如圖:圖4.9查看請(qǐng)求包 可以看到查詢(xún)到3條請(qǐng)求結(jié)果,進(jìn)一步查看后發(fā)現(xiàn)第一條的reply就是我們想要的數(shù)據(jù)。點(diǎn)擊preview查看網(wǎng)頁(yè)返回的json包數(shù)據(jù),結(jié)果如圖:圖4.10返回包數(shù)據(jù)1圖4.11返回包數(shù)據(jù)2可以看到,data-replies-0下的content即為我們需要的評(píng)論數(shù)據(jù),此外member里有mid和用戶(hù)id,后續(xù)也會(huì)用到。mid為嗶哩嗶哩為每一位用戶(hù)編排的身份標(biāo)識(shí),具有唯一性,后續(xù)進(jìn)行數(shù)據(jù)處理可以以mid作為標(biāo)識(shí)符,也考慮到用戶(hù)的id可能會(huì)更改,以id為判別標(biāo)識(shí)不夠嚴(yán)謹(jǐn)。知道評(píng)論的請(qǐng)求名后,右鍵復(fù)制地址,開(kāi)始找請(qǐng)求的api地址。如圖示:圖4.12復(fù)制鏈接地址 復(fù)制后打開(kāi)網(wǎng)址,提示頁(yè)面未找到。如圖示:圖4.13訪問(wèn)失敗可以理解成api地址被加工了。沒(méi)有關(guān)系,我們分析一下地址構(gòu)成。/x/v2/reply?callback=jQuery17208760019825264331_1586439746170&jsonp=jsonp&pn=1&type=1&oid=48979270&sort=2&_=1586439751697可以發(fā)現(xiàn)reply?后皆為“變量名-值”這一格式。一個(gè)個(gè)刪掉使用排除法可以找到正確的組合,但熟悉網(wǎng)頁(yè)爬蟲(chóng)的可以知道,callback其實(shí)為回調(diào)函數(shù)。當(dāng)網(wǎng)頁(yè)運(yùn)行時(shí),一般經(jīng)過(guò)API調(diào)用庫(kù)里預(yù)備好的函數(shù)。但有些庫(kù)函數(shù)會(huì)請(qǐng)求網(wǎng)頁(yè)先傳回一個(gè)函數(shù),以便在合適的時(shí)候調(diào)用,完成對(duì)應(yīng)指示。這個(gè)被傳入后又被調(diào)用的函數(shù)就稱(chēng)為回調(diào)函數(shù)(callbackfunction)。一般刪除就能獲得真實(shí)api地址,我們把它刪掉試試。得到如下結(jié)果:圖4.14找到正確api地址沒(méi)錯(cuò),這就是正確的aip地址,接下來(lái)開(kāi)始分析變量。Api地址后的”&pn=1&type=1&oid=48979270&sort=2&_=1586439751697”,pn可以猜到為頁(yè)數(shù),后續(xù)也證明了準(zhǔn)確性。type、sort為狀態(tài),這個(gè)默認(rèn)配置即可,最后剩下的“oid”和“_”應(yīng)為各視頻的唯一變量。打開(kāi)多個(gè)視頻進(jìn)行比對(duì)后可驗(yàn)證。那“oid”和“_”該如何獲取呢?在網(wǎng)上查詢(xún)嗶哩嗶哩的開(kāi)放api接口后,得知“_”可以用“nohot=1”代替,效果是一樣的。而oid先不著急,以該視頻為例,oid是已知的。先繼續(xù)實(shí)現(xiàn)評(píng)論爬取。以api地址請(qǐng)求數(shù)據(jù),可以調(diào)用requests庫(kù),用get函數(shù)獲取數(shù)據(jù)包,再調(diào)用json庫(kù)的loads函數(shù)把網(wǎng)頁(yè)返回的已編碼的json字符串解碼成python對(duì)象。如圖示:圖4.15請(qǐng)求成功Response[200]說(shuō)明成功處理了請(qǐng)求。打印輸出的字符串也說(shuō)明成功獲取到數(shù)據(jù)包。開(kāi)始獲取評(píng)論數(shù)據(jù)。首先評(píng)論有多頁(yè),應(yīng)該先寫(xiě)一個(gè)遍歷來(lái)實(shí)現(xiàn)循環(huán)爬取。如何知道某個(gè)視頻的評(píng)論頁(yè)數(shù)呢?我們回到開(kāi)發(fā)者調(diào)試窗口,可以找到page里的count即為主樓評(píng)論的數(shù)量,嗶哩嗶哩評(píng)論默認(rèn)顯示20條一頁(yè),那么總頁(yè)數(shù)即為(count-1)//20+1,取整處理。接著應(yīng)該注意評(píng)論不僅有主樓,還有跟樓回復(fù),副樓時(shí)有時(shí)無(wú),層數(shù)也不固定。副樓的數(shù)據(jù)是在主樓的replies下面的??梢杂胕f語(yǔ)句判斷,存在副樓時(shí)遍歷,以此下推。存儲(chǔ)數(shù)據(jù)時(shí)將用戶(hù)名和評(píng)論分別存放在列表中,方便后續(xù)調(diào)用查找。為什么不選擇字典呢?因?yàn)橛脩?hù)名可能會(huì)重復(fù),字典在存儲(chǔ)重復(fù)用戶(hù)名的評(píng)論時(shí)新評(píng)論會(huì)頂?shù)襞f的,最終只保留一個(gè)。這也是字典的特性,鍵值對(duì)應(yīng),鍵唯一。起初我是用字典存儲(chǔ)的,發(fā)現(xiàn)怎么都抓不完整,才恍然大悟,改用列表。部分實(shí)現(xiàn)代碼如下:total_pages=(data['data']['page']['count']-1)//20+1lou=[]louid=[]forpageinrange(1,total_pages+1):r=requests.get(url)data=json.loads(r.text)foriindata['data']['replies']:lou.append(i['content']['message'])louid.append(i['member']['uname'])ifi['replies']!=None:forjini['replies']:lou.append(j['content']['message'])louid.append(j['member']['uname'])forx,yinzip(louid,lou):print(x,":",y) 試運(yùn)行并交叉打印兩個(gè)列表,返回結(jié)果如圖:圖4.16爬取評(píng)論成功 獲取評(píng)論成功,可以看到主樓副樓都可以顯示出來(lái),并且相同用戶(hù)的評(píng)論也都在紀(jì)錄。 接下來(lái)實(shí)現(xiàn)查找部分。排序功能對(duì)于大量評(píng)論數(shù)據(jù)的查看有著重要作用,我們使用python內(nèi)置的sorted函數(shù)來(lái)實(shí)現(xiàn)。需要注意sort的應(yīng)用對(duì)象為list,sorted可對(duì)所有可迭代的對(duì)象進(jìn)行排序操作。為了全面我們還是使用sorted。changping=sorted(lou,key=lambdai:len(i),reverse=True)如上一行即可實(shí)現(xiàn)正序排列存儲(chǔ)到list[changping]中。接著是去重操作,評(píng)論里不乏有重復(fù)的顏文字,頂帖等等相同的回復(fù),我們可以利用for循環(huán)將評(píng)論列表與空l(shuí)ist對(duì)比,若空l(shuí)ist中沒(méi)有即加入list中,以此篩選掉重復(fù)的評(píng)論,代碼如下:foriinlou:ifinotinquchong:quchong.append(i)實(shí)現(xiàn)關(guān)鍵詞查找的方法也與其類(lèi)似,在評(píng)論列表中用for循環(huán)遍歷關(guān)鍵詞,存在即存入新list中,代碼如下:f=[fforfinlouifguanciinf] 至此獲取評(píng)論與查詢(xún)部分編寫(xiě)完成。4.2.2實(shí)現(xiàn)bv號(hào)獲取及視頻信息總覽 考慮到有的UP主發(fā)布視頻比較多,有時(shí)一個(gè)個(gè)翻bv號(hào)會(huì)很麻煩,因此新增一個(gè)功能,只需輸入mid即可自動(dòng)獲取該UP主所有視頻的基本信息,包括bv號(hào)、名稱(chēng)、播放量、評(píng)論數(shù)。在不改變?cè)谐绦蜻壿嫷那闆r下,減少用戶(hù)操作步驟。 首先打開(kāi)某個(gè)用戶(hù)的視頻頁(yè)面,使用前面獲取api的方法,查找到正確的返回?cái)?shù)據(jù)包,如圖:圖4.17獲取返回包"/x/space/arc/search?mid=34497273&ps=30&tid=0&pn=1&keyword=&order=pubdate&jsonp=jsonp"對(duì)地址進(jìn)行分析可得,ps為pagesize,指一頁(yè)的容量為30,pn為pagenumber,指頁(yè)數(shù),我們只需請(qǐng)求ps=30,pn=1和mid即可正確抓到第一頁(yè)的數(shù)據(jù),又因返回包中count里有視頻總量,如圖示:圖4.18找到視頻量信息 即可利用count//ps+1來(lái)遍歷爬取到全部頁(yè)數(shù)的數(shù)據(jù)。代碼編寫(xiě)和獲取評(píng)論的思路類(lèi)似,如下為部分代碼:r=requests.get(url)data=json.loads(r.text)total_pages=(data['data']['page']['count']-1)//30+1forpageinrange(1,total_pages+1):r=requests.get(url)data=json.loads(r.text)foriindata['data']['list']['vlist']:bid_list.append(i['bvid'])title_list.append(i['title'])play_list.append(i['play'])comment_list.append(i['comment'])forw,x,y,zinzip(bid_list,title_list,play_list,comment_list):print(w,":",x,"/播放量:",y,"/評(píng)論數(shù):",z) 運(yùn)行測(cè)試,成功打印到所有數(shù)據(jù),如圖:圖4.19爬取結(jié)果到這里獲取bv號(hào)及視頻信息總覽功能編寫(xiě)完成。4.2.3抽獎(jiǎng)實(shí)現(xiàn)與粉絲流動(dòng)部分抽獎(jiǎng)功能分為按評(píng)論區(qū)回復(fù)抽獎(jiǎng)、按新增關(guān)注者抽獎(jiǎng)和按原關(guān)注者抽獎(jiǎng)。按評(píng)論區(qū)抽獎(jiǎng)我們可以繼續(xù)使用評(píng)論部分的api,請(qǐng)求到用戶(hù)mid和昵稱(chēng),存入一個(gè)字典dict中。需要注意,這里不同于評(píng)論獲取采用list存儲(chǔ),在同一用戶(hù)有多次回復(fù)時(shí),采用字典存儲(chǔ)可以保證其唯一性,不會(huì)多次錄入。鍵選擇為不變的mid,值則為可能改變的昵稱(chēng)。yonghu[i['member']['mid']]=i['member']['uname']字典的寫(xiě)入語(yǔ)法如上,其余部分與評(píng)論存儲(chǔ)相似,不過(guò)多說(shuō)明。按新增關(guān)注者抽獎(jiǎng)或原關(guān)注者抽獎(jiǎng)則需要進(jìn)入用戶(hù)關(guān)注界面,用同樣的方法在調(diào)試窗口找到api地址:/x/relation/followers?vmid={}&pn={}&ps={}&order=desc,pn和ps的含義和之前一樣,vmid經(jīng)過(guò)測(cè)試其實(shí)就是用戶(hù)mid。同樣的,在發(fā)送正確的請(qǐng)求后,我們得到數(shù)據(jù)包,將data-list里的關(guān)注者mid和昵稱(chēng)存入字典中,測(cè)試結(jié)果如下:圖4.20用戶(hù)信息獲取成功這樣我們就得到了當(dāng)日的粉絲數(shù)據(jù)。但仍需在粉絲變動(dòng)之后再獲取一遍或多遍,來(lái)對(duì)比篩選出新增的粉絲和一直存在的舊粉絲。使用pychon的file文件功能,open語(yǔ)法可以打開(kāi)一個(gè)文件,調(diào)用pickle庫(kù)函數(shù)序列化字典,dump為寫(xiě)入,load為讀取。方便以便下次調(diào)用。用法如下:file_name='day1.data'withopen(file_name,'wb')asf:pickle.dump(follow_dict,f)dict1=pickle.load(f)實(shí)現(xiàn)方法即為將操作分為兩個(gè)按鈕,第一次運(yùn)行和第n次運(yùn)行,分別存入day1和day2文件中,day1只寫(xiě)入一次,day2不斷覆蓋。在有了多日數(shù)據(jù)后,我們可以定義一個(gè)比較函數(shù),使用for循環(huán)在day1里面遍歷day2的元素,若存在就跳過(guò),不存在的將該元素寫(xiě)入新list中。這個(gè)操作是可累計(jì)的的,新list(新增list、取關(guān)list、舊關(guān)list)會(huì)根據(jù)日數(shù)的累計(jì)而不斷刷新增加。遍歷邏輯為:day2存在而day1沒(méi)有的用戶(hù)即為新增粉絲;day1存在而day2沒(méi)有的用戶(hù)即為取關(guān)粉絲;day1排除掉取關(guān)粉絲后的用戶(hù)即為一直存在的舊粉絲。foriindict1.keys():try:follow_dict[i]except:bijiao1[i]=dict1[i]。如上為實(shí)現(xiàn)方法,利用try進(jìn)行元素對(duì)比,跳過(guò)后在except下將數(shù)據(jù)存入新list中。3種list都是用同樣的框架獲取寫(xiě)入的。在多次運(yùn)行后,新增粉絲列表、取關(guān)列表、舊關(guān)注列表均獲取完畢,可以輸出結(jié)果給用戶(hù)查看,即實(shí)現(xiàn)了粉絲流動(dòng)查詢(xún)。下面為運(yùn)行結(jié)果,打印出新關(guān)注列表和取關(guān)列表:圖4.21打印新增和取關(guān)列表得知正確獲得后,進(jìn)行最后的抽獎(jiǎng)功能編寫(xiě)。我們可以調(diào)用random庫(kù),使用其choice函數(shù)對(duì)3種list列表進(jìn)行隨機(jī)數(shù)獲取,在不同的需求下對(duì)相應(yīng)list進(jìn)行操作,語(yǔ)法例子如下:xingyun=random.choice(list(yonghu))下面為其中一種抽獎(jiǎng)的運(yùn)行結(jié)果:圖4.22抽獎(jiǎng)功能實(shí)現(xiàn)抽獎(jiǎng)功能成功實(shí)現(xiàn),至此,多種方式的抽獎(jiǎng)功能和粉絲流動(dòng)查詢(xún)功能實(shí)現(xiàn)完畢。4.2.4mid的獲取和ab互轉(zhuǎn)功能實(shí)現(xiàn)完成前面的功能函數(shù)后,我們還有oid沒(méi)有解決。程序的理想操作是用戶(hù)選擇所需功能后,只需鍵入相關(guān)視頻bv號(hào)即可完成功能。但bv號(hào)與oid沒(méi)有關(guān)聯(lián),如何通過(guò)bv號(hào)獲得mid呢? 其實(shí)結(jié)論就是oid即av號(hào)。這也是我之前編寫(xiě)代碼時(shí)發(fā)現(xiàn)的。本程序是在3月23日之前就編寫(xiě)完成的,當(dāng)時(shí)的實(shí)現(xiàn)方法就是用戶(hù)輸入av號(hào),因av號(hào)即mid,替換后即可實(shí)現(xiàn)各種功能。av號(hào)為嗶哩嗶哩網(wǎng)站之前為視頻編排的編號(hào),用于唯一定位該視頻,即身份編號(hào)。但從2020年3月23日開(kāi)始,嗶哩嗶哩正式啟用bv號(hào)取代av號(hào),意在維護(hù)UP主的隱私等,提高安全性。但原有的av號(hào)功能依舊可用,因此本程序不僅要考慮舊視頻的適用,也要考慮3月23日后發(fā)布的視頻也能定位到?,F(xiàn)在視頻的網(wǎng)頁(yè)地址里參數(shù)已經(jīng)改成bv號(hào),我們?cè)撛趺传@取到oid呢? 先打開(kāi)一個(gè)3月23日前發(fā)布的視頻,打開(kāi)調(diào)試窗口:圖4.23請(qǐng)求頭的oid可以看到header請(qǐng)求頭里的類(lèi)型有個(gè)oid,再查看reply里的數(shù)據(jù),也有一個(gè)oid:圖4.24返回表單的oid因?yàn)橐曨l是以前發(fā)布的,我們知道其av號(hào)為av48979270。得出oid即av號(hào)。那么新發(fā)布的視頻是否也適用這一規(guī)則呢?打開(kāi)一個(gè)3月23日后發(fā)布的視頻,查看發(fā)現(xiàn)其請(qǐng)求變量依然是oid。圖4.25新發(fā)布視頻的請(qǐng)求類(lèi)型 可以作出猜測(cè),oid是嗶哩嗶哩標(biāo)識(shí)視頻的真正編號(hào),之前也作為av號(hào)提供給用戶(hù)作為搜索字符,并且在bv號(hào)更新后,依舊適用,只是av號(hào)不再顯示了。 開(kāi)始驗(yàn)證,打開(kāi)調(diào)試窗口,Ctrl+R,不滾動(dòng)鼠標(biāo)搜索視頻標(biāo)題,(請(qǐng)求靜態(tài)頁(yè)面的數(shù)據(jù)包),查看結(jié)果如下:圖4.26新發(fā)布視頻的請(qǐng)求類(lèi)型 可以看到返回表單里aid與上方的oid相同。也證明了嗶哩嗶哩在更改bv號(hào)后依舊是使用oid進(jìn)行視頻管理的。接下來(lái)就簡(jiǎn)單了,拿到api地址,通過(guò)輸入bv號(hào)請(qǐng)求該返回包下的aid,即可獲得mid,實(shí)現(xiàn)前面的功能模塊。代碼如下:bvid=input()r=requests.get("/x/web-interface/view?bvid="+bvid)data=json.loads(r.text)aid=data['data']['aid']oid=aid 由此我們解決了oid的獲取問(wèn)題。在此應(yīng)當(dāng)多編寫(xiě)一個(gè)av號(hào)與bv號(hào)互相轉(zhuǎn)換的功能,方便需要的用戶(hù)。如上我們已經(jīng)實(shí)現(xiàn)bv號(hào)轉(zhuǎn)為av號(hào)的功能,反過(guò)來(lái)也一樣。在api地址上將bvid改為aid,在用戶(hù)輸入av號(hào)后請(qǐng)求該地址拿到data里的bvid,即為bv號(hào)。測(cè)試結(jié)果如下:圖4.27實(shí)現(xiàn)轉(zhuǎn)換功能 成功實(shí)現(xiàn)轉(zhuǎn)換功能,功能模塊基本完成,開(kāi)始編寫(xiě)程序框架。4.2.5程序框架實(shí)現(xiàn) 依據(jù)前面繪制的程序邏輯流程圖,程序?qū)⒈辉O(shè)計(jì)成運(yùn)行-進(jìn)入初始界面-進(jìn)入菜單-實(shí)現(xiàn)功能-返回菜單-繼續(xù)執(zhí)行或者退出。每一步操作中途都可退出返回菜單頁(yè)或者直接退出程序。初始界面主要由print函數(shù)構(gòu)成,內(nèi)容包含軟件標(biāo)題,用途,制作者信息,操作須知等等文本提示信息。待用戶(hù)確認(rèn)完成后,輸入指令進(jìn)入功能菜單。因功能菜單分支較多,要梳理好各分支的邏輯走向,我決定用while函數(shù)來(lái)構(gòu)造菜單,實(shí)現(xiàn)多分支的循環(huán)和打破。具體框架如下示例程序:whilea:dosthifb==1:dosthifc==1:whiled:dosthife==1:continueife!=0:breakbreak else:ifb!=1break 最外層的while充當(dāng)菜單,第一層if判斷語(yǔ)句實(shí)現(xiàn)一級(jí)菜單,第二層if判斷語(yǔ)句實(shí)現(xiàn)二級(jí)菜單……以此類(lèi)推以實(shí)現(xiàn)多級(jí)菜單。合理套用continue和break即可實(shí)現(xiàn)簡(jiǎn)單的多級(jí)菜單。而有一些分支需要在不跳出當(dāng)前層級(jí)菜單的情況下實(shí)現(xiàn)重復(fù)循環(huán),比如對(duì)評(píng)論的關(guān)鍵詞查找,用戶(hù)通常會(huì)進(jìn)行多次查詢(xún),我們應(yīng)當(dāng)提供合適的邏輯構(gòu)架,以實(shí)現(xiàn)對(duì)象需求。可以在次級(jí)if判斷下嵌套多個(gè)while,比如: ifa==1: whilea:dosth ifb==1:continue ifb==0: break ifa==2: 在次級(jí)判斷條件當(dāng)a==1時(shí),使用whilea作為自循環(huán)的條件,因?yàn)閍已經(jīng)賦值具有意義,所以whilea可以理解成總是符合循環(huán)條件的循環(huán)體,即不主動(dòng)break時(shí)會(huì)一直重復(fù)運(yùn)行。確定循環(huán)的構(gòu)成后,開(kāi)始往結(jié)構(gòu)里添加實(shí)際判斷條件和函數(shù)。 前面完成的各部分功能函數(shù)這時(shí)就可以進(jìn)行分類(lèi)打包,等待調(diào)用。 使用def函數(shù)對(duì)各部分功能進(jìn)行定義,放在程序最前,等待循環(huán)體調(diào)用。def語(yǔ)法如下: defwater(a,b,c...): dosth returnd,e,f... water為定義的函數(shù)名,后接參數(shù),參數(shù)數(shù)量可變,完成功能語(yǔ)句后return對(duì)象。調(diào)用時(shí)使用water(x)或x=water(a)等形式即可獲得結(jié)果。這里附上一個(gè)功能例子: defb2a(bvid):r=requests.get("/x/web-interface/view?bvid="+bvid)data=json.loads(r.text)ifdata['code']==0:aid=data['data']['aid']returnaidreturn"抱歉!無(wú)法找到該視頻,請(qǐng)重試"這里定義了名為b2a的函數(shù),其形參為bvid,返回的數(shù)據(jù)為aid或者一段字符串。函數(shù)的功能是輸入bv號(hào),返回av號(hào),當(dāng)程序里某個(gè)部分需要調(diào)用時(shí),使用print(str(b2a(bvid)))打印或者賦值a=str(b2a(bvid))即可。需要注意函數(shù)返回的數(shù)據(jù)和打印/賦值的對(duì)象數(shù)據(jù)類(lèi)型應(yīng)該相同,否則會(huì)報(bào)錯(cuò)。4.2.6邏輯改善及bug處理 在框架和功能函數(shù)編寫(xiě)完成后,結(jié)合兩者,獲得基礎(chǔ)的完整程序。但運(yùn)行后會(huì)有很多錯(cuò)誤,這是不可避免的。開(kāi)始完善邏輯和處理bug。 首先是用戶(hù)輸入指令時(shí),原先設(shè)計(jì)的判斷條件為: a=int(input()) ifa==1: dosth ifa==2: … 這雖然高效簡(jiǎn)潔,但沒(méi)考慮到用戶(hù)可能錯(cuò)誤鍵入非阿拉伯?dāng)?shù)字的其他字符,導(dǎo)致一旦如此程序?qū)⒅苯油顺觥H魧nt類(lèi)型的input改為str或正常input先對(duì)輸入字符進(jìn)行判斷,因字母符號(hào)等無(wú)法與整型數(shù)據(jù)對(duì)比,if后的判斷類(lèi)型也要修改,那么面對(duì)整個(gè)程序的諸多判斷分支,修改會(huì)異常麻煩。三番思考后,我想到了先以input接收輸入,再將if條件的判斷符存入元組數(shù)據(jù)中,將兩者都轉(zhuǎn)換為str類(lèi)型,就可以實(shí)現(xiàn)全字符的自由對(duì)比,最后把a(bǔ)轉(zhuǎn)換為int類(lèi)型,即可不改動(dòng)判斷條件對(duì)輸入判斷進(jìn)行改良,代碼如下:a=input()flag=(0,1,2,3…)whilebnotinstr(flag):print("輸入錯(cuò)誤!請(qǐng)重新輸入!")a=input()a=int(b)ifa==1:ifa==2:…如上即可在不改動(dòng)判斷結(jié)構(gòu)的情況下,實(shí)現(xiàn)鍵入指令的字符判斷,解決輸入非數(shù)字的指令程序崩潰的問(wèn)題。在調(diào)用各定義的函數(shù)塊時(shí),若輸入錯(cuò)誤的/不符合規(guī)范的數(shù)據(jù),函數(shù)無(wú)法return正確值,會(huì)導(dǎo)致程序無(wú)法繼續(xù)崩潰退出。這也是由于為對(duì)定義函數(shù)進(jìn)行操作判斷。defbv_inf_get(mid):bid_list=[],title_list=[],play_list=[],comment_list=[],count_num=[]url=("/x/space/arc/search?mid="+mid+"&ps=30&tid=0&pn=1&keyword=&order=pubdate&jsonp=jsonp")r=requests.get(url)data=json.loads(r.text)total_pages=data['data']['page']['count']//30+1count_num=data['data']['page']['count']forpageinrange(1,total_pages+1):time.sleep(0.1)print('電磁炮發(fā)射中(進(jìn)度){}'.format(page),'/',total_pages)r=requests.get(url)data=json.loads(r.text)foriindata['data']['list']['vlist']:bid_list.append(i['bvid'])title_list.append(i['title'])play_list.append(i['play'])comment_list.append(i['comment'])returnbid_list,title_list,play_list,comment_list,count_num如上實(shí)行視頻數(shù)據(jù)獲取的定義函數(shù)bv_inf_get,在輸入錯(cuò)誤的mid后,程序會(huì)報(bào)錯(cuò)崩潰。解決方法查看正確與錯(cuò)誤返回包的區(qū)別。如圖示:圖4.28錯(cuò)誤的返回碼圖4.29正確的返回碼 可以看到兩者返回的code數(shù)值不同,那就可以根據(jù)code作出if判斷,若為正確return結(jié)果,錯(cuò)誤則return“輸入出錯(cuò)!”,最后在調(diào)用函數(shù)時(shí),加一個(gè)判斷return的值即可解決因錯(cuò)誤鍵入而崩潰的問(wèn)題。 在多層while構(gòu)建的系統(tǒng)運(yùn)作時(shí),經(jīng)常出現(xiàn)層數(shù)過(guò)多而忘記在末端添加足夠的break而導(dǎo)致死循環(huán),只能細(xì)心排查,查漏補(bǔ)缺。 大致問(wèn)題解決后,開(kāi)始添加反爬處理。嗶哩嗶哩對(duì)該程序所需的接口開(kāi)放較為友好,經(jīng)過(guò)測(cè)試不在短時(shí)間內(nèi)進(jìn)行大量爬取時(shí),嗶哩嗶哩不會(huì)對(duì)爬蟲(chóng)作出明顯限制,但我們還是應(yīng)該做好延時(shí),為服務(wù)器減輕壓力。調(diào)用time庫(kù)的sleep功能對(duì)爬取進(jìn)行延時(shí)設(shè)定,根據(jù)需求每幾秒發(fā)送一次請(qǐng)求,可為設(shè)置毫秒,如0.1、0.5秒等等,在不過(guò)多等待的情況下減輕服務(wù)器承載。4.2.7編寫(xiě)完成打包程序 程序編寫(xiě)完成后,準(zhǔn)備進(jìn)行打包。 將python工程文件打包成可執(zhí)行文件exe,不僅方便測(cè)試,用戶(hù)使用時(shí)也不用額外搭建環(huán)境,可以直接在Windows下使用。 這里選擇pyinstaller作為打包工具,但其不是默認(rèn)組件,我們需要手動(dòng)安裝。進(jìn)入pyinstaller官網(wǎng):/downloads.html,如下圖:圖4.30pyinstaller官網(wǎng)可見(jiàn)其提示便捷安裝方法為cmd輸入pipinstallpyinstaller,或者在未來(lái)使用pipinstall--upgradepyinstaller指令更新。若順利安裝完成,結(jié)果將如圖示:圖4.31安裝pyinstaller 若提示報(bào)錯(cuò)安裝失敗,可能為build環(huán)境依賴(lài)失敗,解決方法為線下載安裝包,下拉官網(wǎng)網(wǎng)頁(yè)點(diǎn)擊下載:圖4.32在線下載pyinstaller包 下載后打開(kāi)cmd,在文件路徑輸入pythonsetup.pyinstall即可安裝成功。安裝完畢后,將pyinstaller的安裝路徑添加到PATH環(huán)境變量中。之后把項(xiàng)目關(guān)聯(lián)py文件、ico圖標(biāo)(可選,圖標(biāo)格式應(yīng)為ico否則會(huì)報(bào)錯(cuò))都復(fù)制到同一目錄下,按住shift點(diǎn)擊右鍵在當(dāng)前路徑打開(kāi)powershell,輸入pyinstaller-F-iC:\路徑\圖標(biāo).ico項(xiàng)目名稱(chēng).py進(jìn)行打包。需要注意,若過(guò)程文件調(diào)用了第三方庫(kù),需要將相關(guān)庫(kù)文件放入python的庫(kù)文件夾里。完成后如圖:圖4.33輸入打包指令圖4.34打包成功完成后該路徑下會(huì)多出三個(gè)文件夾__pycache__、build、dist和一個(gè)spec格式的同名配置文件,dist文件夾里就是打包完成的exe可執(zhí)行文件。試運(yùn)行軟件,成功。測(cè)試過(guò)程會(huì)在后續(xù)展示。5軟件演示與測(cè)試5.1測(cè)試環(huán)境Windows10,python3.7.4,pycharm2019.1.3。5.2步驟演示與測(cè)試結(jié)果 打開(kāi)exe軟件,進(jìn)入初始界面,按1可查看使用說(shuō)明。圖5.1軟件主菜單 輸入0進(jìn)入功能菜單后,對(duì)不同的字符進(jìn)行測(cè)試,結(jié)果如下:圖5.2非法字符判斷結(jié)果輸入1進(jìn)入av-bv號(hào)互轉(zhuǎn)頁(yè)面,分別測(cè)試兩個(gè)轉(zhuǎn)換選項(xiàng),并依次輸入合法與錯(cuò)誤的av/bv號(hào),測(cè)試是否正確返回結(jié)果,并對(duì)返回菜單的指令進(jìn)行各種字符測(cè)試,測(cè)試結(jié)果成功,如圖示:圖5.3av號(hào)轉(zhuǎn)為bv號(hào)測(cè)試結(jié)果圖5.4bv號(hào)轉(zhuǎn)為av號(hào)測(cè)試結(jié)果返回功能菜單輸入2進(jìn)入評(píng)論查看界面,分別測(cè)試查看昵稱(chēng)+評(píng)論和單獨(dú)查看評(píng)論的功能,測(cè)試結(jié)果成功顯示,如下圖:圖5.5查看昵稱(chēng)和評(píng)論測(cè)試結(jié)果圖5.6只查看評(píng)論測(cè)試結(jié)果返回功能菜單輸入3進(jìn)入評(píng)論查找界面,分別測(cè)試所有功能,即長(zhǎng)評(píng)論查看,精簡(jiǎn)評(píng)論查看和關(guān)鍵詞查找。測(cè)試結(jié)果長(zhǎng)評(píng)排序成功,精簡(jiǎn)評(píng)論去重復(fù)評(píng)論除成功,關(guān)鍵詞查找到時(shí)返回正確結(jié)果,查無(wú)關(guān)鍵詞會(huì)提示重試;無(wú)論查詢(xún)成功與否都可以繼續(xù)查詢(xún)或者返回主菜單。如下圖:圖5.7長(zhǎng)評(píng)論測(cè)試結(jié)果圖5.8精簡(jiǎn)評(píng)論測(cè)試結(jié)果圖5.9查找關(guān)鍵詞測(cè)試結(jié)果返回功能菜單輸入4進(jìn)入抽獎(jiǎng)界面,即按評(píng)論區(qū)抽獎(jiǎng),按新增/舊粉絲抽獎(jiǎng)。輸入1測(cè)試第一個(gè)功能,輸入bv號(hào)后,正確抽取到一名用戶(hù),并且可根據(jù)情況重新抽取或者返回菜單,對(duì)輸入錯(cuò)誤指令的判斷也成功識(shí)別,如下圖:圖5.10抽獎(jiǎng)功能測(cè)試結(jié)果1 第二個(gè)粉絲抽取功能需要多次錄入數(shù)據(jù)進(jìn)行比對(duì),測(cè)試首次、中間次錄入成功結(jié)果如下:圖5.11首日數(shù)據(jù)錄入測(cè)試結(jié)果圖5.12中間日數(shù)據(jù)錄入測(cè)試結(jié)果測(cè)試截止日錄入數(shù)據(jù)后的兩種抽獎(jiǎng)情況,從新增關(guān)注/舊關(guān)注中抽取,若未存在表單則提醒無(wú)法抽取,并且詢(xún)問(wèn)是否返回上一級(jí)重新抽取,測(cè)試成功,結(jié)果如下:圖5.13抽獎(jiǎng)功能測(cè)試結(jié)果2 返回功能菜單輸入5進(jìn)入粉絲流動(dòng)瀏覽界面,測(cè)試第一日爬取成功,如圖:圖5.14首日數(shù)據(jù)錄入結(jié)果測(cè)試第二日后的錄入情況,并查看兩個(gè)分支的粉絲情況,可返回上一層查看另一結(jié)果,如下:圖5.15次日即粉絲流動(dòng)查詢(xún)結(jié)果返回菜單,輸入6進(jìn)入視頻瀏覽或bv號(hào)獲取界面,分別輸入正確與錯(cuò)誤的mid進(jìn)行測(cè)試。返回結(jié)果正常,該用戶(hù)的視頻總數(shù)、視頻標(biāo)題、bv號(hào)、播放量、評(píng)論數(shù)都正確輸出,并會(huì)提示進(jìn)度,在輸入錯(cuò)誤的mid后提示查無(wú)用戶(hù),并提示用戶(hù)重新查找,如下圖:圖5.16bv號(hào)獲取及視頻總覽測(cè)試結(jié)果到此軟件全部功能流程均已測(cè)試成功,沒(méi)有報(bào)錯(cuò)。6總結(jié)6.1項(xiàng)目開(kāi)發(fā)總結(jié)這次程序開(kāi)發(fā)對(duì)用戶(hù)需求邏輯進(jìn)行了深入的分析,最終也實(shí)現(xiàn)了整個(gè)過(guò)程。從分析用戶(hù)的需求,基于python環(huán)境編譯,到考慮如何結(jié)合相關(guān)模塊及函數(shù)庫(kù)實(shí)現(xiàn)期望功能,終于開(kāi)發(fā)出一款操作簡(jiǎn)單,邏輯清晰,查詢(xún)便捷和具有良好的交互式體驗(yàn)的查詢(xún)軟件。使用成本良好,無(wú)需額外搭載平臺(tái),只需Windows10即可直接使用,受到了用戶(hù)的好評(píng)。適用于全體嗶哩嗶哩網(wǎng)站的用戶(hù),包括觀眾和UP主等等。實(shí)現(xiàn)過(guò)程遇到了許多難點(diǎn)和報(bào)錯(cuò),在導(dǎo)師和網(wǎng)上查詢(xún)的幫助下不斷地探索答案,也讓我更加熟悉開(kāi)發(fā)過(guò)程,學(xué)到更多的知識(shí)和技巧。在設(shè)計(jì)菜單循環(huán)時(shí),一開(kāi)始我并沒(méi)有系統(tǒng)地定義好各功能函數(shù),導(dǎo)致需要用到時(shí)得重復(fù)輸入相同的代碼行和進(jìn)行更多的if語(yǔ)句判斷,這也是一個(gè)很不好的習(xí)慣,導(dǎo)致代碼容易報(bào)錯(cuò),結(jié)構(gòu)紊亂,后期也難以維護(hù)。最終我重新定義了各分函數(shù)便于主體調(diào)用,并優(yōu)化了菜單邏輯,減少判斷,提高軟件穩(wěn)定性。6.2不足與展望雖然軟件實(shí)現(xiàn)了多個(gè)用戶(hù)期望的功能,但實(shí)際中還有更多的需求和未知變化。后期維護(hù)更新依然需要解決許多問(wèn)題。比如評(píng)論量巨大的數(shù)據(jù)爬取,即使設(shè)置了爬取間隔,總耗時(shí)也依舊很長(zhǎng),需要幾個(gè)小時(shí)甚至更久。在無(wú)法獲得服務(wù)器完全訪問(wèn)權(quán)限的前提下如何提高爬蟲(chóng)效率,是每一位爬蟲(chóng)編寫(xiě)者需要考慮的長(zhǎng)遠(yuǎn)問(wèn)題。參考文獻(xiàn)[1]Winter.中文搜索引擎技術(shù)解密:網(wǎng)絡(luò)蜘蛛[M].北京:人民郵電出版社,2014年[2]Wisenut.WisenutSearchEnginewhitepaper[M].北京:中國(guó)電力出版社,2014年[3]羅剛王振東.自己動(dòng)手寫(xiě)網(wǎng)絡(luò)爬蟲(chóng)[M].北京:機(jī)械工業(yè)出版社。2002年[4]李曉明,閆宏飛,王繼民.搜索引擎:原理、技術(shù)與系統(tǒng)—華夏英才基金學(xué)術(shù)文庫(kù)[M].北京:科學(xué)出版社,2005年[5]WesleyChun.CorePythonProgramming[M].PrenticeHall,2006[6]R.?SalakhutdinovandA.?Mnih,ProbabilisticMatrixFactorization.?InProceedingsofNIPS.?2007[7]NajorkM,WienerJL.Breadth-firstcrawlingyieldshigh-qualitypages[C]//Proceedingsofthe10thinternationalconferenceonWorldWideWeb.ACM,2001:114-118[8]ChenX,LiWJ,ZhaoTJ,etal.DesignoftheDistributedWebCrawler[J].Ad-vancedMaterialsResearch,2011,204-210:1454-1458[9]搜索引擎技術(shù)基礎(chǔ)[M].北京:清華大學(xué)出版社,2010年致謝大學(xué)生活如白駒過(guò)隙,在歡笑和痛苦中,四年也顯得不那么長(zhǎng)。我在大學(xué)期間遇到了形形色色的人和事物,他們真實(shí)、生動(dòng)而精彩,這些相遇的積累讓我了解到世界的寬廣。也明白了知識(shí)并非俯拾皆是,在相對(duì)自由的大學(xué)環(huán)境中,要想提高自己唯有自律和主動(dòng)。圖書(shū)館淡淡的書(shū)本味道,輕盈的腳步聲,陽(yáng)光透過(guò)窗映射在書(shū)上,字里行間也變得有了溫度,偶爾飄來(lái)咖啡館的香氣,仿佛咖啡因在刺激腦海。這個(gè)大家默契營(yíng)造的安靜氛圍,都讓我感到愜意和自在。論文的編寫(xiě)過(guò)程,導(dǎo)師也給了我很多的幫助和建議,寬容的態(tài)度和誨人不倦的指導(dǎo)精神都讓我收益良多。在畢業(yè)論文即將完成的此刻,向?qū)熀退薪處煿ぷ髡弑硎局孕牡母兄x和崇高的敬意!感謝我的父母,是他們給了我不斷的支持,樹(shù)立我的價(jià)值觀;感謝我的舍友,是他們的寬容讓我改掉了許多生活上的習(xí)慣;感謝我的班級(jí)同學(xué),是他們?cè)诖髮W(xué)生活中給了我方方面面的幫助;感謝我的各位老師,感謝他們無(wú)私的傳授知識(shí)和咨詢(xún);感謝大學(xué)里遇到的每一個(gè)人,與他們相識(shí)真的很值得。最后,感謝母校提供了我良好的學(xué)習(xí)和生活環(huán)境,也希望母校越來(lái)越好,培養(yǎng)出更多的后輩。我將勇敢面對(duì)新的社會(huì)生活,迎接挑戰(zhàn)!
電腦故障檢測(cè)卡代碼表
1、特殊代碼"00"和"ff"及其它起始碼有三種情況出現(xiàn):
①已由一系列其它代碼之后再出現(xiàn):"00"或"ff",則主板ok。
②如果將cmos中設(shè)置無(wú)錯(cuò)誤,則不嚴(yán)重的故障不會(huì)影響bios自檢的繼續(xù),而最終出現(xiàn)"00"或"ff"。
③一開(kāi)機(jī)就出現(xiàn)"00"或"ff"或其它起始代碼并且不變化則為主板沒(méi)有運(yùn)行起來(lái)。
2、本表是按代碼值從小到大排序,卡中出碼順序不定。
3、未定義的代碼表中未列出。
4、對(duì)于不同bios(常用ami、award、phoenix)用同一代碼代表的意義不同,因此應(yīng)弄清您所檢測(cè)的電腦是屬于哪一種類(lèi)型的bios,您可查閱您的電腦使用手冊(cè),或從主板上的bios芯片上直接查看,也可以在啟動(dòng)屏幕時(shí)直接看到。
5、有少數(shù)主板的pci槽只有一部分代碼出現(xiàn),但isa槽有完整自檢代碼輸出。且目前已發(fā)現(xiàn)有極個(gè)別原裝機(jī)主板的isa槽無(wú)代碼輸出,而pci槽則有完整代碼輸出,故建議您在查看代碼不成功時(shí),將本雙槽卡換到另一種插槽試一下。另外,同一塊主板的不同pci槽,有的槽有完整代碼送出,如dell810主板只有靠近c(diǎn)pu的一個(gè)pci槽有完整代碼顯示,一直變化到"00"或"ff",而其它pci槽走到"38"后則不繼續(xù)變化。
6、復(fù)位信號(hào)所需時(shí)間isa與pci不一定同步,故有可能isa開(kāi)始出代碼,但pci的復(fù)位燈還不熄,故pci代碼停要起始代碼上。
代碼對(duì)照表
00.已顯示系統(tǒng)的配置;即將控制INI19引導(dǎo)裝入。
01處理器測(cè)試1,處理器狀態(tài)核實(shí),如果測(cè)試失敗,循環(huán)是無(wú)限的。處理器寄存器的測(cè)試即將開(kāi)始,不可屏蔽中斷即將停用。CPU寄存器測(cè)試正在進(jìn)行或者失敗。
02確定診斷的類(lèi)型(正常或者制造)。如果鍵盤(pán)緩沖器含有數(shù)據(jù)就會(huì)失效。停用不可屏蔽中斷;通過(guò)延遲開(kāi)始。CMOS寫(xiě)入/讀出正在進(jìn)行或者失靈。
03清除8042鍵盤(pán)控制器,發(fā)出TESTKBRD命令(AAH)通電延遲已完成。ROMBIOS檢查部件正在進(jìn)行或失靈。
04使8042鍵盤(pán)控制器復(fù)位,核實(shí)TESTKBRD。鍵盤(pán)控制器軟復(fù)位/通電測(cè)試??删幊涕g隔計(jì)時(shí)器的測(cè)試正在進(jìn)行或失靈。
05如果不斷重復(fù)制造測(cè)試1至5,可獲得8042控制狀態(tài)。已確定軟復(fù)位/通電;即將啟動(dòng)ROM。DMA初如準(zhǔn)備正在進(jìn)行或者失靈。
06使電路片作初始準(zhǔn)備,停用視頻、奇偶性、DMA電路片,以及清除DMA電路片,所有頁(yè)面寄存器和CMOS停機(jī)字節(jié)。已啟動(dòng)ROM計(jì)算ROMBIOS檢查總和,以及檢查鍵盤(pán)緩沖器是否清除。DMA初始頁(yè)面寄存器讀/寫(xiě)測(cè)試正在進(jìn)行或失靈。
07處理器測(cè)試2,核實(shí)CPU寄存器的工作。ROMBIOS檢查總和正常,鍵盤(pán)緩沖器已清除,向鍵盤(pán)發(fā)出BAT(基本保證測(cè)試)命令。.
08使CMOS計(jì)時(shí)器作初始準(zhǔn)備,正常的更新計(jì)時(shí)器的循環(huán)。已向鍵盤(pán)發(fā)出BAT命令,即將寫(xiě)入BAT命令。RAM更新檢驗(yàn)正在進(jìn)行或失靈。
09EPROM檢查總和且必須等于零才通過(guò)。核實(shí)鍵盤(pán)的基本保證測(cè)試,接著核實(shí)鍵盤(pán)命令字節(jié)。第一個(gè)64KRAM測(cè)試正在進(jìn)行。
0A使視頻接口作初始準(zhǔn)備。發(fā)出鍵盤(pán)命令字節(jié)代碼,即將寫(xiě)入命令字節(jié)數(shù)據(jù)。第一個(gè)64KRAM芯片或數(shù)據(jù)線失靈,移位。
0B測(cè)試8254通道0。寫(xiě)入鍵盤(pán)控制器命令字節(jié),即將發(fā)出引腳23和24的封鎖/解鎖命令。第一個(gè)64KRAM奇/偶邏輯失靈。
0C測(cè)試8254通道1。鍵盤(pán)控制器引腳23、24已封鎖/解鎖;已發(fā)出NOP命令。第一個(gè)64KRAN的地址線故障。
0D1、檢查CPU速度是否與系統(tǒng)時(shí)鐘相匹配。2、檢查控制芯片已編程值是否符合初設(shè)置。3、視頻通道測(cè)試,如果失敗,則鳴喇叭。已處理NOP命令;接著測(cè)試CMOS停開(kāi)寄存器。第一個(gè)64KRAM的奇偶性失靈
0E測(cè)試CMOS停機(jī)字節(jié)。CMOS停開(kāi)寄存器讀/寫(xiě)測(cè)試;將計(jì)算CMOS檢查總和。初始化輸入/輸出端口地址。
0F測(cè)試擴(kuò)展的CMOS。已計(jì)算CMOS檢查總和寫(xiě)入診斷字節(jié);CMOS開(kāi)始初始準(zhǔn)備。.
10測(cè)試DMA通道0。CMOS已作初始準(zhǔn)備,CMOS狀態(tài)寄存器即將為日期和時(shí)間作初始準(zhǔn)備。第一個(gè)64KRAM第0位故障。
11測(cè)試DMA通道1。CMOS狀態(tài)寄存器已作初始準(zhǔn)備,即將停用DMA和中斷控制器。第一個(gè)64DKRAM第1位故障。
12測(cè)試DMA頁(yè)面寄存器。停用DMA控制器1以及中斷控制器1和2;即將視頻顯示器并使端口B作初始準(zhǔn)備。第一個(gè)64DKRAM第2位故障。
13測(cè)試8741鍵盤(pán)控制器接口。視頻顯示器已停用,端口B已作初始準(zhǔn)備;即將開(kāi)始電路片初始化/存儲(chǔ)器自動(dòng)檢測(cè)。第一個(gè)64DKRAM第3位故障。
14測(cè)試存儲(chǔ)器更新觸發(fā)電路。電路片初始化/存儲(chǔ)器處自動(dòng)檢測(cè)結(jié)束;8254計(jì)時(shí)器測(cè)試即將開(kāi)始。第一個(gè)64DKRAM第4位故障。
15測(cè)試開(kāi)頭64K的系統(tǒng)存儲(chǔ)器。第2通道計(jì)時(shí)器測(cè)試了一半;8254第2通道計(jì)時(shí)器即將完成測(cè)試。第一個(gè)64DKRAM第5位故障。
16建立8259所用的中斷矢量表。第2通道計(jì)時(shí)器測(cè)試結(jié)束;8254第1通道計(jì)時(shí)器即將完成測(cè)試。第一個(gè)64DKRAM第6位故障。
17調(diào)準(zhǔn)視頻輸入/輸出工作,若裝有視頻BIOS則啟用。第1通道計(jì)時(shí)器測(cè)試結(jié)束;8254第0通道計(jì)時(shí)器即將完成測(cè)試。第一個(gè)64DKRAM第7位故障。
18測(cè)試視頻存儲(chǔ)器,如果安裝選用的視頻BIOS通過(guò),由可繞過(guò)。第0通道計(jì)時(shí)器測(cè)試結(jié)束;即將開(kāi)始更新存儲(chǔ)器。第一個(gè)64DKRAM第8位故障。
19測(cè)試第1通道的中斷控制器(8259)屏蔽位。已開(kāi)始更新存儲(chǔ)器,接著將完成存儲(chǔ)器的更新。第一個(gè)64DKRAM第9位故障。
1A測(cè)試第2通道的中斷控制器(8259)屏蔽位。正在觸發(fā)存儲(chǔ)器更新線路,即將檢查15微秒通/斷時(shí)間。第一個(gè)64DKRAM第10位故障。
1B測(cè)試CMOS電池電平。完成存儲(chǔ)器更新時(shí)間30微秒測(cè)試;即將開(kāi)始基本的64K存儲(chǔ)器測(cè)試。第一個(gè)64DKRAM第11位故障。
1C測(cè)試CMOS檢查總和。.第一個(gè)64DKRAM第12位故障。
1D調(diào)定CMOS配置。.第一個(gè)64DKRAM第13位故障。
1E測(cè)定系統(tǒng)存儲(chǔ)器的大小,并且把它和CMOS值比較。.第一個(gè)64DKRAM第14位故障。
1F測(cè)試64K存儲(chǔ)器至最高640K。.第一個(gè)64DKRAM第15位故障。
20測(cè)量固定的8259中斷位。開(kāi)始基本的64K存儲(chǔ)器測(cè)試;即將測(cè)試地址線。從屬DMA寄存器測(cè)試正在進(jìn)行或失靈。
21維持不可屏蔽中斷(NMI)位(奇偶性或輸入/輸出通道的檢查)。通過(guò)地址線測(cè)試;即將觸發(fā)奇偶性。主DMA寄存器測(cè)試正在進(jìn)行或失靈。
22測(cè)試8259的中斷功能。結(jié)束觸發(fā)奇偶性;將開(kāi)始串行數(shù)據(jù)讀/寫(xiě)測(cè)試。主中斷屏蔽寄存器測(cè)試正在進(jìn)行或失靈。
23測(cè)試保護(hù)方式8086虛擬方式和8086頁(yè)面方式?;镜?4K串行數(shù)據(jù)讀/寫(xiě)測(cè)試正常;即將開(kāi)始中斷矢量初始化之前的任何調(diào)節(jié)。從屬中斷屏蔽存器測(cè)試正在進(jìn)行或失靈。
24測(cè)定1MB以上的擴(kuò)展存儲(chǔ)器。矢量初始化之前的任何調(diào)節(jié)完成,即將開(kāi)始中斷矢量的初始準(zhǔn)備。設(shè)置ES段地址寄存器注冊(cè)表到內(nèi)存高端。
25測(cè)試除頭一個(gè)64K之后的所有存儲(chǔ)器。完成中斷矢量初始準(zhǔn)備;將為旋轉(zhuǎn)式斷續(xù)開(kāi)始讀出8042的輸入/輸出端口。裝入中斷矢量正在進(jìn)行或失靈。
26測(cè)試保護(hù)方式的例外情況。讀出8042的輸入/輸出端口;即將為旋轉(zhuǎn)式斷續(xù)開(kāi)始使全局?jǐn)?shù)據(jù)作初始準(zhǔn)備。開(kāi)啟A20地址線;使之參入尋址。
27確定超高速緩沖存儲(chǔ)器的控制或屏蔽RAM。全1數(shù)據(jù)初始準(zhǔn)備結(jié)束;接著將進(jìn)行中斷矢量之后的任何初始準(zhǔn)備。鍵盤(pán)控制器測(cè)試正在進(jìn)行或失靈。
28確定超高速緩沖存儲(chǔ)器的控制或者特別的8042鍵盤(pán)控制器。完成中斷矢量之后的初始準(zhǔn)備;即將調(diào)定單色方式。CMOS電源故障/檢查總和計(jì)算正在進(jìn)行。
29.已調(diào)定單色方式,即將調(diào)定彩色方式。CMOS配置有效性的檢查正在進(jìn)行。
2A使鍵盤(pán)控制器作初始準(zhǔn)備。已調(diào)定彩色方式,即將進(jìn)行ROM測(cè)試前的觸發(fā)奇偶性。置空64K基本內(nèi)存。
2B使磁碟驅(qū)動(dòng)器和控制器作初始準(zhǔn)備。觸發(fā)奇偶性結(jié)束;即將控制任選的視頻ROM檢查前所需的任何調(diào)節(jié)。屏幕存儲(chǔ)器測(cè)試正在進(jìn)行或失靈。
2C檢查串行端口,并使之作初始準(zhǔn)備。完成視頻ROM控制之前的處理;即將查看任選的視頻ROM并加以控制。屏幕初始準(zhǔn)備正在進(jìn)行或失靈。
2D檢測(cè)并行端口,并使之作初始準(zhǔn)備。已完成任選的視頻ROM控制,即將進(jìn)行視頻ROM回復(fù)控制之后任何其他處理的控制。屏幕回掃測(cè)試正在進(jìn)行或失靈。
2E使硬磁盤(pán)驅(qū)動(dòng)器和控制器作初始準(zhǔn)備。從視頻ROM控制之后的處理復(fù)原;如果沒(méi)有發(fā)現(xiàn)EGA/VGA就要進(jìn)行顯示器存儲(chǔ)器讀/寫(xiě)測(cè)試。檢測(cè)視頻ROM正在進(jìn)行。
2F檢測(cè)數(shù)學(xué)協(xié)處理器,并使之作初始準(zhǔn)備。沒(méi)發(fā)現(xiàn)EGA/VGA;即將開(kāi)始顯示器存儲(chǔ)器讀/寫(xiě)測(cè)試。.
30建立基本內(nèi)存和擴(kuò)展內(nèi)存。通過(guò)顯示器存儲(chǔ)器讀/寫(xiě)測(cè)試;即將進(jìn)行掃描檢查。認(rèn)為屏幕是可以工作的。
31檢測(cè)從C800:0至EFFF:0的選用ROM,并使之作初始準(zhǔn)備。顯示器存儲(chǔ)器讀/寫(xiě)測(cè)試或掃描檢查失敗,即將進(jìn)行另一種顯示器存儲(chǔ)器讀/寫(xiě)測(cè)試。單色監(jiān)視器是可以工作的。
32對(duì)主板上COM/LTP/FDD/聲音設(shè)備等I/O芯片編程使之適合設(shè)置值。通過(guò)另一種顯示器存儲(chǔ)器讀/寫(xiě)測(cè)試;卻將進(jìn)行另一種顯示器掃描檢查。彩色監(jiān)視器(40列)是可以工作的。
33.視頻顯示器檢查結(jié)束;將開(kāi)始利用調(diào)節(jié)開(kāi)關(guān)和實(shí)際插卡檢驗(yàn)顯示器的關(guān)型。彩色監(jiān)視器(80列)是可以工作的。
34.已檢驗(yàn)顯示器適配器;接著將調(diào)定顯示方式。計(jì)時(shí)器滴答聲中斷測(cè)試正在進(jìn)行或失靈。35.完成調(diào)定顯示方式;即將檢查BIOSROM的數(shù)據(jù)區(qū)。停機(jī)測(cè)試正在進(jìn)行或失靈。
36.已檢查BIOSROM數(shù)據(jù)區(qū);即將調(diào)定通電信息的游標(biāo)。門(mén)電路中A-20失靈。
37.識(shí)別通電信息的游標(biāo)調(diào)定已完成;即將顯示通電信息。保護(hù)方式中的意外中斷。
38.完成顯示通電信息;即將讀出新的游標(biāo)位置。RAM測(cè)試正在進(jìn)行或者地址故障>FFFFH。
39.已讀出保存游標(biāo)位置,即將顯示引用信息串。.
3A.引用信息串顯示結(jié)束;即將顯示發(fā)現(xiàn)信息。間隔計(jì)時(shí)器通道2測(cè)試或失靈。
3B用OPTI電路片(只是486)使輔助超高速緩沖存儲(chǔ)器作初始準(zhǔn)備。已顯示發(fā)現(xiàn)<ESC>信息;虛擬方式,存儲(chǔ)器測(cè)試即將開(kāi)始。按日計(jì)算的日歷時(shí)鐘測(cè)試正在進(jìn)行或失靈。
3C建立允許進(jìn)入CMOS設(shè)置的標(biāo)志。.串行端口測(cè)試正在進(jìn)行或失靈。
3D初始化鍵盤(pán)/PS2鼠標(biāo)/PNP設(shè)備及總內(nèi)存節(jié)點(diǎn)。.并行端口測(cè)試正在進(jìn)行或失靈。
3E嘗試打開(kāi)L2高速緩存。.數(shù)學(xué)協(xié)處理器測(cè)試正在進(jìn)行或失靈。
40.已開(kāi)始準(zhǔn)備虛擬方式的測(cè)試;即將從視頻存儲(chǔ)器來(lái)檢驗(yàn)。調(diào)整CPU速度,使之與外圍時(shí)鐘精確匹配。
41中斷已打開(kāi),將初始化數(shù)據(jù)以便于0:0檢測(cè)內(nèi)存變換(中斷控制器或內(nèi)存不良)從視頻存儲(chǔ)器檢驗(yàn)之后復(fù)原;即將準(zhǔn)備描述符表。系統(tǒng)插件板選擇失靈。
42顯示窗口進(jìn)入SETUP。描述符表已準(zhǔn)備好;即將進(jìn)行虛擬方式作存儲(chǔ)器測(cè)試。擴(kuò)展CMOSRAM故障。
43若是即插即用BIOS,則串口、并口初始化。進(jìn)入虛擬方式;即將為診斷方式實(shí)現(xiàn)中斷。.44.已實(shí)現(xiàn)中斷(如已接通診斷開(kāi)關(guān);即將使數(shù)據(jù)作初始準(zhǔn)備以檢查存儲(chǔ)器在0:0返轉(zhuǎn)。)BIOS中斷進(jìn)行初始化。
45初始化數(shù)學(xué)協(xié)處理器。數(shù)據(jù)已作初始準(zhǔn)備;即將檢查存儲(chǔ)器在0:0返轉(zhuǎn)以及找出系統(tǒng)存儲(chǔ)器的規(guī)模。.
46.測(cè)試存儲(chǔ)器已返回;存儲(chǔ)器大小計(jì)算完畢,即將寫(xiě)入頁(yè)面來(lái)測(cè)試存儲(chǔ)器。檢查只讀存儲(chǔ)器ROM版本。
47.即將在擴(kuò)展的存儲(chǔ)器試寫(xiě)頁(yè)面;即將基本640K存儲(chǔ)器寫(xiě)入頁(yè)面。
48.已將基本存儲(chǔ)器寫(xiě)入頁(yè)面;即將確定1MB以上的存儲(chǔ)器。視頻檢查,CMOS重新配置。
49.找出1BM以下的存儲(chǔ)器并檢驗(yàn);即將確定1MB以上的存儲(chǔ)器。.
4A.找出1MB以上的存儲(chǔ)器并檢驗(yàn);即將檢查BIOSROM數(shù)據(jù)區(qū)。進(jìn)行視頻的初始化。
4B.BIOSROM數(shù)據(jù)區(qū)的檢驗(yàn)結(jié)束,即將檢查<ESC>和為軟復(fù)位清除1MB以上的存儲(chǔ)器。.4C.清除1MB以上的存儲(chǔ)器(軟復(fù)位)即將清除1MB以上的存儲(chǔ)器.屏蔽視頻BIOSROM。.4D。已清除1MB以上的存儲(chǔ)器(軟復(fù)位);將保存存儲(chǔ)器的大小。.
4E若檢測(cè)到有錯(cuò)誤;在顯示器上顯示錯(cuò)誤信息,并等待客戶(hù)按<F1>鍵繼續(xù)。開(kāi)始存儲(chǔ)器的測(cè)試:(無(wú)軟復(fù)位);即將顯示第一個(gè)64K存儲(chǔ)器的測(cè)試。顯示版權(quán)信息。
4F讀寫(xiě)軟、硬盤(pán)數(shù)據(jù),進(jìn)行DOS引導(dǎo)。開(kāi)始顯示存儲(chǔ)器的大小,正在測(cè)試存儲(chǔ)器將使之更新;將進(jìn)行串行和隨機(jī)的存儲(chǔ)器測(cè)試。.
50將當(dāng)前BIOS監(jiān)時(shí)區(qū)內(nèi)的CMOS值存到CMOS中。完成1MB以下的存儲(chǔ)器測(cè)試;即將高速存儲(chǔ)器的大小以便再定位和掩蔽。將CPU類(lèi)型和速度送到屏幕。
51.測(cè)試1MB以上的存儲(chǔ)器。.
52所有ISA只讀存儲(chǔ)器ROM進(jìn)行初始化,最終給PCI分配IRQ號(hào)等初始化工作。已完成1MB以上的存儲(chǔ)器測(cè)試;即將準(zhǔn)備回到實(shí)址方式。進(jìn)入鍵盤(pán)檢測(cè)。
53如果不是即插即用BIOS,則初始化串口、并口和設(shè)置時(shí)種值。保存CPU寄存器和存儲(chǔ)器的大小,將進(jìn)入實(shí)址方式。.
54.成功地開(kāi)啟實(shí)址方式;即將復(fù)原準(zhǔn)備停機(jī)時(shí)保存的寄存器。掃描“打擊鍵”
55.寄存器已復(fù)原,將停用門(mén)電路A-20的地址線。.
56.成功地停用A-20的地址線;即將檢查BIOSROM數(shù)據(jù)區(qū)。鍵盤(pán)測(cè)試結(jié)束。
57.BIOSROM數(shù)據(jù)區(qū)檢查了一半;繼續(xù)進(jìn)行。.
58.BIOSROM的數(shù)據(jù)區(qū)檢查結(jié)束;將清除發(fā)現(xiàn)<ESC>信息。非設(shè)置中斷測(cè)試。
59.已清除<ESC>信息;信息已顯示;即將開(kāi)始DMA和中斷控制器的測(cè)試。.
5A..顯示按“F2”鍵進(jìn)行設(shè)置。
5B..測(cè)試基本內(nèi)存地址。
5C..測(cè)試640K
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 教學(xué)樓室內(nèi)裝修協(xié)議模板
- 家庭護(hù)理保姆服務(wù)合同樣本
- 辦公空間色彩搭配合同范本
- 咖啡店店員招聘協(xié)議書(shū)
- 城市文化中心地暖工程承包合同
- 環(huán)境保護(hù)企業(yè)消防整改施工合同
- 化工廠彩鋼板翻新合同
- 勞動(dòng)報(bào)酬零花錢(qián)協(xié)議
- 消防工程發(fā)包合同
- 常州乒乓球館租賃合同
- 天津市河?xùn)|區(qū)2023-2024學(xué)年九年級(jí)上學(xué)期期末數(shù)學(xué)試題
- 巖體力學(xué)與工程智慧樹(shù)知到期末考試答案章節(jié)答案2024年合肥工業(yè)大學(xué)
- 精氨酸在肥胖中的作用
- 2024年醫(yī)藥衛(wèi)生考試-醫(yī)院信息科筆試參考題庫(kù)含答案
- 微觀經(jīng)濟(jì)學(xué)(對(duì)外經(jīng)濟(jì)貿(mào)易大學(xué))智慧樹(shù)知到期末考試答案2024年
- 初中語(yǔ)文文言文《狼》習(xí)題
- 醫(yī)院總值班培訓(xùn)課件
- MOOC 創(chuàng)新創(chuàng)業(yè)學(xué)-西安工業(yè)大學(xué) 中國(guó)大學(xué)慕課答案
- 北京市東城區(qū)2022-2023學(xué)年八年級(jí)上學(xué)期期末統(tǒng)一檢測(cè) 數(shù)學(xué)試卷 (解析版)
- 智能手機(jī)使用培訓(xùn)課件
- 2023年中國(guó)煙草總公司河北省公司考試真題及答案
評(píng)論
0/150
提交評(píng)論