版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要哔哩哔哩视频弹幕网,从一开始的无名小站发展到现在月活跃用户超一亿的巨大规模,不仅引起了行业浪潮,也吸引越来越多人选择成为UP主(Uploader)即视频上传者。Bilibili网为UP主提供了平台和各种功能支持,但还是无法面面俱到。本软件设计旨在提供便捷的刚需功能,为新兴UP主提供功能支持。本毕业设计采用标准的软件开发流程,包含了需求分析、整体设计、模块实现、编码、测试、打包软件等等步骤。该软件算法和轮廓基于python设计,调用了包含requests、random、pickle等等成熟的集成库环境。软件主要针对用户需求颇多的两个主要分支:评论和抽奖进行设计实现。评论区功能包括爬取完整的表单数据,解决复数层评论的获取和存储,实现快速浏览、存储和多种查找功能;抽奖区功能包括实现爬取多种抽奖材料,根据需求分析样本并最终使用随机算法进行随机数获取,实现抽奖功能。关键词:爬虫bilibili用户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绪论 绪论项目背景与意义近年来随着网络的飞速发展和建设,人们获取信息的途径也从主流的报纸电视,过渡到手机电脑等网络平台。各类别的文化借此逐渐渗透到人们周围的生活中。作为国内起步最早的一批二次元视频网站之一,哔哩哔哩以其独有的弹幕文化逐步发展成现在国内流量第一的视频弹幕网站。哔哩哔哩视频内容的高跨度、高质量、高时效力也为其吸引了巨大的现有用户和潜在用户,2019年5月起月活跃用户数突破1亿,并且还在呈现增长趋势。作为一个互联网公司,哔哩哔哩是成功的。但其拥有的庞大用户数量,注定决定了哔哩哔哩无法做到面面俱到,满足所有用户的需求。哔哩哔哩主要的运作方式为网页,依赖数据的建设和支持为用户提供了很棒的功能。本课题的主要目的是设计面向用户的网络爬虫程序,提供用户一些官方并未提供的功能,比如类别抽奖和数据获取。1.2国内外研究情况近年来,国内外程序研究人员提出了许多种类的网络爬虫结构与算法,亦应用在不同的行业与领域,大大提高信息利用率和工作效率。许多大型软件公司也积极地根据自身行业特点与需求,开发出许多类别的网络爬虫系统,比如google,微软的bingbot和yahoo的slirp等等。本课题研究的方向是提供特定网站哔哩哔哩的额外功能实现,在经过网络查询后发现,国内目前并未有人系统地开发过相应软件,可以说是较为新颖的研究课题。并且考虑到哔哩哔哩用户基数大,前景可期,用户需求只会越来越多,本课题的研究实现也具有了现实意义。具备研究价值。在实现预期目标的同时,将一同研究作为功能性的爬虫程序,在面对复杂、多样性的环境下可能出现的问题,合理借鉴前人研究经验,解决和优化。1.3文献综述对于网络爬虫的研究从上世纪九十年代就已经开始,目前爬虫技术已经趋见成熟,功能描述向高概括性高度模块化靠拢。网络爬虫是搜索引擎的重要组成部分。网络上比较著名的开源爬虫有Nutch,Larbin,Heritrix等等。网络爬虫最重要的是网页搜索策略(广度优先和最佳度优先)和网页分析策略(基于网络拓扑的分析算法和基于网页内容的网页分析算法)。国内外流行的爬虫技术相当多,各个编程语言都有涉及。基于Python、C++、C、java等等。就原理而言,爬虫组件都是差不多的。而无头浏览器是最能够说明爬虫特性的部分,无需提供多余的身份信息即可向服务器请求数据,以适用于自动化测试等领域。此外主流的浏览器如Chrome、Firefox、Safari等都提供了相应的抓取支持,selenium作为一个集成工具,包含了上述的所有组件,以WebDriver的形式,直接在浏览器进行测试,适配各种爬虫组件,方便使用者进行操作。PAGE2网络爬虫介绍2.1网络爬虫原理网络爬虫行为上就是模拟真人进行流程操作,获取网页返回的数据进行储存分析,等同于浏览器对网页的访问。因这种技术实现很像蜘蛛在蛛网上的往返爬行,也被生动地取名为爬虫。其实质就是一个请求网站并储存数据的自动化程序。2.2网络爬虫框架下图为一个通用的网络爬虫框架。通过调用URL在队列中进行管理,实现数据获取和保存。已下载网页库已下载网页库种子URL待抓取URL已抓取URL读取解析下载放进队列图2.1网络爬虫框架图2.3网络爬虫工作流程2.3.1向服务器发起请求爬虫程序通过request向目标网站的服务器发起请求,服务器会根据request内包含的请求作出处理,返回浏览器结果,这个过程即为response。而Request包含:1、请求方式常用的有GET和POST两种请求类型,另外还有HEAD、PUT、OPTIONS等。2、请求URLURL即(UniformResourceLocator)统一资源定位符,网页、歌曲、视频、图片都可以用一个唯一URL确定定位。3、请求头发送请求时可选的头部信息,取决于网页的请求要求,常见有Cookies、Host等。4、请求体发送请求时可选的额外数据,比如提交的表单、文本数据。2.3.2获取响应内容服务器返回的response包含:1、响应状态即状态码,比如200为处理成功,404为未找到请求页面。2、响应头包含返回的内容格式、长度、类型等自然信息,以及服务器信息等。3、响应体即请求的资源内容,爬虫获取最主要的部分。2.3.3解析内容根据获取的数据类型,比如HTML文档,JSON格式文本,图片,歌曲视频等等,作出相应处理。处理方式有直接处理,正则表达式,json解析,beautifulsoUP等等。2.3.4储存分析以不同的格式:文本、json、jpg、mp3等等储存数据,作进一步处理分析。广东东软学院本科毕业设计(论文)3软件整体设计3.1程序需求分析哔哩哔哩网站作为新类别媒体平台的代表,在近几年以其内容的高跨度、高质量、高影响力吸引了巨大的现有用户和潜在用户,2019年5月起月活跃用户数突破1亿,并且还在呈现增长趋势。UP主,一个哔哩哔哩网站视频创作者的别称,为哔哩哔哩海量视频的产出增添了浓墨重彩的一笔。从起初的小受众网站一步步走向了多元化的媒体平台,这也吸引了越来越多的人成为UP主,加入到创作的浪潮中。本软件面向的对象,就是数量众多的中小规模的新UP主。许多UP主在不断产出高质量视频后,也未必能成为粉丝过万、十万、百万的大UP主。抛去主观因素,通过网上调查等方式,我总结出了他们需要的一些非官方提供功能。一个全面的视频信息汇总功能,让用户看到全部视频的具体数据。一个高效的评论浏览功能,可以使他们了解观众的想法和建议,为新的内容创作蓄力。一个多样化的评论查找功能,有时需要找到特定信息,比如歌名,网站等等,或者查看长度较长的评论,查找功能就能很好地解决问题。这个功能也不局限于UP主,是所有用户都能使用的功能。一个完善的抽奖功能。哔哩哔哩为UP主提供了许多方便的功能,抽奖就是其中之一。但为了防止滥用引发的一系列问题,该功能只提供给粉丝过万或者有一定优质动态、投稿积累的UP主,新人UP主要想在前期积累人气,抽奖功能是必不可少的。一个粉丝流动监视功能。新人UP主最关注的应该就是粉丝增长趋势了。这个功能无疑十分便捷,可以让他们看到一步步的积累。3.2系统框架构造有了需求后,就可以着手设计软件,即面向对象编程。先根据用户需求,总结出需求框架,方便后续工作流程。下图为具体框架:图3.1需求总结图由需求可对程序进行初步构造,设计成由一个初始界面框内嵌一个多层循环且可随时打破的菜单函数构成的程序。设计目的是高效输出,简便操作,让任何人都可以轻易上手。大致逻辑确定后,开始设计系统主逻辑。下图为构造完毕的主体与子功能循环图:图3.2主体与子功能循环图如图示,即菜单程序里的功能模块在循环条件成立时不断循环,功能模块也随需求进入循环或者打破,并在用户给出打破条件后返回主体,参与主程序循环。接下来开始设计主菜单的逻辑流程。如下图:初始界面初始界面开始选择执行输出结果菜单返回功能列表退出程序是否是否图3.3主菜单的逻辑流程图 图示阐述了系统的实现方法,即用户启动程序,选择进入主菜单,依实际需求选择相应功能,执行完毕后,可选择继续操作或者返回主界面,亦或是退出程序。到这里,系统实现的大致方向已经确定,下面开始设计各部分功能的逻辑流程。下图为绘制好的番号互转和评论功能实现逻辑:aab互转a2b获取b2a返回菜单退出查看评论用户+评论评论输入bv查看转换结果是是是否否否图3.4番号互转和评论功能实现逻辑图如图中描绘,获取评论的操作逻辑为输入bv号,程序爬取后输出给用户查看,可继续循环查询功能或者返回主界面。而左半部分的av号与bv号互相转换流程,在后续软件实现会作进一步的补充说明。其逻辑和前部分类似,通过获取用户输入的视频编号(av/bv号)进行转换,输出结果。 下图为评论查找的逻辑设计:评论查找评论查找关键词查找去重查找长评查找输入关键词结果查询返回菜单V码获取查询结果否否是是图3.5评论查找的逻辑设计图 如图中的设计,在获取视频标识符后,对用户的要求分别实现,比如查询功能接收关键词字符,在比对库后输出结果,无论成功与否都可以重复操作或者跳出循环返回菜单。下图为抽奖功能和粉丝流动功能的逻辑实现:抽奖抽奖粉丝流动V码获取mid获取调用多日数据评论抽奖粉丝抽奖粉丝流动新粉抽奖旧粉抽奖结果新增变动取关变动数据储存返回菜单图3.6抽奖功能和粉丝流动功能逻辑图 不同于前几个功能的相对独立,抽奖和粉丝流动这两个功能的分支会有共同的数据需求,在设计程序逻辑的时候应该注意,合理利用资源,实现一对多的函数调用,节省代码量,提高效率。即粉丝抽奖和粉丝流动部分是需要用户提供mid而不是bv号,但整体逻辑依旧和前部分的功能模块类似。 下图为用户视频信息查询:获取mid获取mid用户视频信息浏览合法返回菜单排版打印各评论数视频总量各bv号各标题各播放量获取数据是否图3.7用户视频信息查询 该功能提供用户查看所有的视频相关信息,逻辑设计为较精简的交互模式,获取请求后输入mid,程序判断数据合法性后,将内容排版打印输出,相对于前几个功能的多分支,本功能逻辑简单易懂。绘制完成主程序和功能模块的逻辑设计后,可以开始进行爬虫程序设计。4爬虫程序具体设计流程4.1环境搭载 在有了需求和逻辑框架后,开始进入软件设计环节。 首先是环境的搭载。本软件是基于python开发的爬虫程序,自然少不了python的安装和环境构建。第一步是安装python。进入官网下载地址/downloads/windows,选择对应的32位或64位安装包进行下载,然后根据提示进行安装,需要注意安装路径的选择和应该勾选将python添加到PATH环境变量。安装完后打开命令提示符CMD输入python-V,若返回具体版本则为安装成功。如下图示:图4.1安装结果安装完python,可以选择直接开始代码编写,原生的python组件虽然好用,但有些简洁,缺少了诸多丰富的功能和调试交互。Python也有许多IDE可供选择,这里选择pycharm作为集成开发环境进行代码编写。PyCharm作为知名度和用户量都很高的python编译器,在界面、交互、调试、管理等都比原生要更精致和易用。进入官网/pycharm/download/#section=windows,下载对应版本,跟着指示安装,同样需要更新PATH环境变量。有专业版和社区版可供选择,社区版面向个人开发者,是免费使用的。安装后即可。打开pycharm新建project,进入project界面点击file-new-pythonfile创建新的python文件。并手动添加解释器。点击右上角file-settings进入设置如图示:图4.2进入设置在project:项目名称栏目下点击projectinterpreter,可在右上方添加默认解释器或新建解释器。如图示:图4.3添加解释器至此,基础的环境搭载完成。测试是否成功,输入print('helloworld!'),点击run按钮运行,成功打印字符,如图示:图4.4测试pycharm 在软件编写时经常会对多行代码进行运行测试,每次都使用run运行的话会比较麻烦,因为之前写好的代码也会跟着运行,若每次都注释掉效率也有所降低。我们可以使用ipython解决这一问题。 Ipython是python的一个交互式shell,相比默认的shell功能更强大,也能很好地兼容pycharm,其特有的in-out模式可以支持指定代码行的运行,对功能调试十分有益。安装十分简单,打开cmd输入pipinstallipython等待安装完成即可。若报错失败可检查是不是pip工具没有升级到最新版本。使用pipshowpip可以查看当前pip的版本信息,若提示YoushouldconsiderUPgradingviathe'python-mpipinstall--UPgradepip'comm,直接复制引号内容输入更新即可。安装成功后打开cmd输入ipython,出现下图In[1]即为成功。图4.5测试ipython 打开pycharm选中任意一行代码,右键选择executeselectioninconsole,下方即会打开shell界面。图4.6在pycharm中启用ipython图4.7启用成功 如图,可在shell界面进行代码编写测试。4.2模块功能实现4.2.1实现评论获取与查找 软件环境搭载好后,开始进行代码编写。首先把目标确定在如何获取评论。使用Chrome浏览器打开哔哩哔哩,随意点开一个视频,这里应该选择评论较少的,因为首要目的是实现获取,之后再解决抓取量的问题。若选择大量评论的视频进行测试很可能被哔哩哔哩网站监测到,这对于爬虫的开展无疑是无益的。点开视频后按F12打开开发者工具调试界面,点击network,按下Ctrl+R刷新网页。可以看到网页的所有网络请求。如图示:图4.8找到请求 图中可以看出,请求有很多个,一个个查找肯定可以找到评论相关的数据包,我们也可以使用左方的搜索功能,随意复制一条评论进行搜索,结果如图:图4.9查看请求包 可以看到查询到3条请求结果,进一步查看后发现第一条的reply就是我们想要的数据。点击preview查看网页返回的json包数据,结果如图:图4.10返回包数据1图4.11返回包数据2可以看到,data-replies-0下的content即为我们需要的评论数据,此外member里有mid和用户id,后续也会用到。mid为哔哩哔哩为每一位用户编排的身份标识,具有唯一性,后续进行数据处理可以以mid作为标识符,也考虑到用户的id可能会更改,以id为判别标识不够严谨。知道评论的请求名后,右键复制地址,开始找请求的api地址。如图示:图4.12复制链接地址 复制后打开网址,提示页面未找到。如图示:图4.13访问失败可以理解成api地址被加工了。没有关系,我们分析一下地址构成。/x/v2/reply?callback=jQuery17208760019825264331_1586439746170&jsonp=jsonp&pn=1&type=1&oid=48979270&sort=2&_=1586439751697可以发现reply?后皆为“变量名-值”这一格式。一个个删掉使用排除法可以找到正确的组合,但熟悉网页爬虫的可以知道,callback其实为回调函数。当网页运行时,一般经过API调用库里预备好的函数。但有些库函数会请求网页先传回一个函数,以便在合适的时候调用,完成对应指示。这个被传入后又被调用的函数就称为回调函数(callbackfunction)。一般删除就能获得真实api地址,我们把它删掉试试。得到如下结果:图4.14找到正确api地址没错,这就是正确的aip地址,接下来开始分析变量。Api地址后的”&pn=1&type=1&oid=48979270&sort=2&_=1586439751697”,pn可以猜到为页数,后续也证明了准确性。type、sort为状态,这个默认配置即可,最后剩下的“oid”和“_”应为各视频的唯一变量。打开多个视频进行比对后可验证。那“oid”和“_”该如何获取呢?在网上查询哔哩哔哩的开放api接口后,得知“_”可以用“nohot=1”代替,效果是一样的。而oid先不着急,以该视频为例,oid是已知的。先继续实现评论爬取。以api地址请求数据,可以调用requests库,用get函数获取数据包,再调用json库的loads函数把网页返回的已编码的json字符串解码成python对象。如图示:图4.15请求成功Response[200]说明成功处理了请求。打印输出的字符串也说明成功获取到数据包。开始获取评论数据。首先评论有多页,应该先写一个遍历来实现循环爬取。如何知道某个视频的评论页数呢?我们回到开发者调试窗口,可以找到page里的count即为主楼评论的数量,哔哩哔哩评论默认显示20条一页,那么总页数即为(count-1)//20+1,取整处理。接着应该注意评论不仅有主楼,还有跟楼回复,副楼时有时无,层数也不固定。副楼的数据是在主楼的replies下面的。可以用if语句判断,存在副楼时遍历,以此下推。存储数据时将用户名和评论分别存放在列表中,方便后续调用查找。为什么不选择字典呢?因为用户名可能会重复,字典在存储重复用户名的评论时新评论会顶掉旧的,最终只保留一个。这也是字典的特性,键值对应,键唯一。起初我是用字典存储的,发现怎么都抓不完整,才恍然大悟,改用列表。部分实现代码如下: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) 试运行并交叉打印两个列表,返回结果如图:图4.16爬取评论成功 获取评论成功,可以看到主楼副楼都可以显示出来,并且相同用户的评论也都在纪录。 接下来实现查找部分。排序功能对于大量评论数据的查看有着重要作用,我们使用python内置的sorted函数来实现。需要注意sort的应用对象为list,sorted可对所有可迭代的对象进行排序操作。为了全面我们还是使用sorted。changping=sorted(lou,key=lambdai:len(i),reverse=True)如上一行即可实现正序排列存储到list[changping]中。接着是去重操作,评论里不乏有重复的颜文字,顶帖等等相同的回复,我们可以利用for循环将评论列表与空list对比,若空list中没有即加入list中,以此筛选掉重复的评论,代码如下:foriinlou:ifinotinquchong:quchong.append(i)实现关键词查找的方法也与其类似,在评论列表中用for循环遍历关键词,存在即存入新list中,代码如下:f=[fforfinlouifguanciinf] 至此获取评论与查询部分编写完成。4.2.2实现bv号获取及视频信息总览 考虑到有的UP主发布视频比较多,有时一个个翻bv号会很麻烦,因此新增一个功能,只需输入mid即可自动获取该UP主所有视频的基本信息,包括bv号、名称、播放量、评论数。在不改变原有程序逻辑的情况下,减少用户操作步骤。 首先打开某个用户的视频页面,使用前面获取api的方法,查找到正确的返回数据包,如图:图4.17获取返回包"/x/space/arc/search?mid=34497273&ps=30&tid=0&pn=1&keyword=&order=pubdate&jsonp=jsonp"对地址进行分析可得,ps为pagesize,指一页的容量为30,pn为pagenumber,指页数,我们只需请求ps=30,pn=1和mid即可正确抓到第一页的数据,又因返回包中count里有视频总量,如图示:图4.18找到视频量信息 即可利用count//ps+1来遍历爬取到全部页数的数据。代码编写和获取评论的思路类似,如下为部分代码: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,"/评论数:",z) 运行测试,成功打印到所有数据,如图:图4.19爬取结果到这里获取bv号及视频信息总览功能编写完成。4.2.3抽奖实现与粉丝流动部分抽奖功能分为按评论区回复抽奖、按新增关注者抽奖和按原关注者抽奖。按评论区抽奖我们可以继续使用评论部分的api,请求到用户mid和昵称,存入一个字典dict中。需要注意,这里不同于评论获取采用list存储,在同一用户有多次回复时,采用字典存储可以保证其唯一性,不会多次录入。键选择为不变的mid,值则为可能改变的昵称。yonghu[i['member']['mid']]=i['member']['uname']字典的写入语法如上,其余部分与评论存储相似,不过多说明。按新增关注者抽奖或原关注者抽奖则需要进入用户关注界面,用同样的方法在调试窗口找到api地址:/x/relation/followers?vmid={}&pn={}&ps={}&order=desc,pn和ps的含义和之前一样,vmid经过测试其实就是用户mid。同样的,在发送正确的请求后,我们得到数据包,将data-list里的关注者mid和昵称存入字典中,测试结果如下:图4.20用户信息获取成功这样我们就得到了当日的粉丝数据。但仍需在粉丝变动之后再获取一遍或多遍,来对比筛选出新增的粉丝和一直存在的旧粉丝。使用pychon的file文件功能,open语法可以打开一个文件,调用pickle库函数序列化字典,dump为写入,load为读取。方便以便下次调用。用法如下:file_name='day1.data'withopen(file_name,'wb')asf:pickle.dump(follow_dict,f)dict1=pickle.load(f)实现方法即为将操作分为两个按钮,第一次运行和第n次运行,分别存入day1和day2文件中,day1只写入一次,day2不断覆盖。在有了多日数据后,我们可以定义一个比较函数,使用for循环在day1里面遍历day2的元素,若存在就跳过,不存在的将该元素写入新list中。这个操作是可累计的的,新list(新增list、取关list、旧关list)会根据日数的累计而不断刷新增加。遍历逻辑为:day2存在而day1没有的用户即为新增粉丝;day1存在而day2没有的用户即为取关粉丝;day1排除掉取关粉丝后的用户即为一直存在的旧粉丝。foriindict1.keys():try:follow_dict[i]except:bijiao1[i]=dict1[i]。如上为实现方法,利用try进行元素对比,跳过后在except下将数据存入新list中。3种list都是用同样的框架获取写入的。在多次运行后,新增粉丝列表、取关列表、旧关注列表均获取完毕,可以输出结果给用户查看,即实现了粉丝流动查询。下面为运行结果,打印出新关注列表和取关列表:图4.21打印新增和取关列表得知正确获得后,进行最后的抽奖功能编写。我们可以调用random库,使用其choice函数对3种list列表进行随机数获取,在不同的需求下对相应list进行操作,语法例子如下:xingyun=random.choice(list(yonghu))下面为其中一种抽奖的运行结果:图4.22抽奖功能实现抽奖功能成功实现,至此,多种方式的抽奖功能和粉丝流动查询功能实现完毕。4.2.4mid的获取和ab互转功能实现完成前面的功能函数后,我们还有oid没有解决。程序的理想操作是用户选择所需功能后,只需键入相关视频bv号即可完成功能。但bv号与oid没有关联,如何通过bv号获得mid呢? 其实结论就是oid即av号。这也是我之前编写代码时发现的。本程序是在3月23日之前就编写完成的,当时的实现方法就是用户输入av号,因av号即mid,替换后即可实现各种功能。av号为哔哩哔哩网站之前为视频编排的编号,用于唯一定位该视频,即身份编号。但从2020年3月23日开始,哔哩哔哩正式启用bv号取代av号,意在维护UP主的隐私等,提高安全性。但原有的av号功能依旧可用,因此本程序不仅要考虑旧视频的适用,也要考虑3月23日后发布的视频也能定位到。现在视频的网页地址里参数已经改成bv号,我们该怎么获取到oid呢? 先打开一个3月23日前发布的视频,打开调试窗口:图4.23请求头的oid可以看到header请求头里的类型有个oid,再查看reply里的数据,也有一个oid:图4.24返回表单的oid因为视频是以前发布的,我们知道其av号为av48979270。得出oid即av号。那么新发布的视频是否也适用这一规则呢?打开一个3月23日后发布的视频,查看发现其请求变量依然是oid。图4.25新发布视频的请求类型 可以作出猜测,oid是哔哩哔哩标识视频的真正编号,之前也作为av号提供给用户作为搜索字符,并且在bv号更新后,依旧适用,只是av号不再显示了。 开始验证,打开调试窗口,Ctrl+R,不滚动鼠标搜索视频标题,(请求静态页面的数据包),查看结果如下:图4.26新发布视频的请求类型 可以看到返回表单里aid与上方的oid相同。也证明了哔哩哔哩在更改bv号后依旧是使用oid进行视频管理的。接下来就简单了,拿到api地址,通过输入bv号请求该返回包下的aid,即可获得mid,实现前面的功能模块。代码如下:bvid=input()r=requests.get("/x/web-interface/view?bvid="+bvid)data=json.loads(r.text)aid=data['data']['aid']oid=aid 由此我们解决了oid的获取问题。在此应当多编写一个av号与bv号互相转换的功能,方便需要的用户。如上我们已经实现bv号转为av号的功能,反过来也一样。在api地址上将bvid改为aid,在用户输入av号后请求该地址拿到data里的bvid,即为bv号。测试结果如下:图4.27实现转换功能 成功实现转换功能,功能模块基本完成,开始编写程序框架。4.2.5程序框架实现 依据前面绘制的程序逻辑流程图,程序将被设计成运行-进入初始界面-进入菜单-实现功能-返回菜单-继续执行或者退出。每一步操作中途都可退出返回菜单页或者直接退出程序。初始界面主要由print函数构成,内容包含软件标题,用途,制作者信息,操作须知等等文本提示信息。待用户确认完成后,输入指令进入功能菜单。因功能菜单分支较多,要梳理好各分支的逻辑走向,我决定用while函数来构造菜单,实现多分支的循环和打破。具体框架如下示例程序:whilea:dosthifb==1:dosthifc==1:whiled:dosthife==1:continueife!=0:breakbreak else:ifb!=1break 最外层的while充当菜单,第一层if判断语句实现一级菜单,第二层if判断语句实现二级菜单……以此类推以实现多级菜单。合理套用continue和break即可实现简单的多级菜单。而有一些分支需要在不跳出当前层级菜单的情况下实现重复循环,比如对评论的关键词查找,用户通常会进行多次查询,我们应当提供合适的逻辑构架,以实现对象需求。可以在次级if判断下嵌套多个while,比如: ifa==1: whilea:dosth ifb==1:continue ifb==0: break ifa==2: 在次级判断条件当a==1时,使用whilea作为自循环的条件,因为a已经赋值具有意义,所以whilea可以理解成总是符合循环条件的循环体,即不主动break时会一直重复运行。确定循环的构成后,开始往结构里添加实际判断条件和函数。 前面完成的各部分功能函数这时就可以进行分类打包,等待调用。 使用def函数对各部分功能进行定义,放在程序最前,等待循环体调用。def语法如下: defwater(a,b,c...): dosth returnd,e,f... water为定义的函数名,后接参数,参数数量可变,完成功能语句后return对象。调用时使用water(x)或x=water(a)等形式即可获得结果。这里附上一个功能例子: defb2a(bvid):r=requests.get("/x/web-interface/view?bvid="+bvid)data=json.loads(r.text)ifdata['code']==0:aid=data['data']['aid']returnaidreturn"抱歉!无法找到该视频,请重试"这里定义了名为b2a的函数,其形参为bvid,返回的数据为aid或者一段字符串。函数的功能是输入bv号,返回av号,当程序里某个部分需要调用时,使用print(str(b2a(bvid)))打印或者赋值a=str(b2a(bvid))即可。需要注意函数返回的数据和打印/赋值的对象数据类型应该相同,否则会报错。4.2.6逻辑改善及bug处理 在框架和功能函数编写完成后,结合两者,获得基础的完整程序。但运行后会有很多错误,这是不可避免的。开始完善逻辑和处理bug。 首先是用户输入指令时,原先设计的判断条件为: a=int(input()) ifa==1: dosth ifa==2: … 这虽然高效简洁,但没考虑到用户可能错误键入非阿拉伯数字的其他字符,导致一旦如此程序将直接退出。若将int类型的input改为str或正常input先对输入字符进行判断,因字母符号等无法与整型数据对比,if后的判断类型也要修改,那么面对整个程序的诸多判断分支,修改会异常麻烦。三番思考后,我想到了先以input接收输入,再将if条件的判断符存入元组数据中,将两者都转换为str类型,就可以实现全字符的自由对比,最后把a转换为int类型,即可不改动判断条件对输入判断进行改良,代码如下:a=input()flag=(0,1,2,3…)whilebnotinstr(flag):print("输入错误!请重新输入!")a=input()a=int(b)ifa==1:ifa==2:…如上即可在不改动判断结构的情况下,实现键入指令的字符判断,解决输入非数字的指令程序崩溃的问题。在调用各定义的函数块时,若输入错误的/不符合规范的数据,函数无法return正确值,会导致程序无法继续崩溃退出。这也是由于为对定义函数进行操作判断。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('电磁炮发射中(进度){}'.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如上实行视频数据获取的定义函数bv_inf_get,在输入错误的mid后,程序会报错崩溃。解决方法查看正确与错误返回包的区别。如图示:图4.28错误的返回码图4.29正确的返回码 可以看到两者返回的code数值不同,那就可以根据code作出if判断,若为正确return结果,错误则return“输入出错!”,最后在调用函数时,加一个判断return的值即可解决因错误键入而崩溃的问题。 在多层while构建的系统运作时,经常出现层数过多而忘记在末端添加足够的break而导致死循环,只能细心排查,查漏补缺。 大致问题解决后,开始添加反爬处理。哔哩哔哩对该程序所需的接口开放较为友好,经过测试不在短时间内进行大量爬取时,哔哩哔哩不会对爬虫作出明显限制,但我们还是应该做好延时,为服务器减轻压力。调用time库的sleep功能对爬取进行延时设定,根据需求每几秒发送一次请求,可为设置毫秒,如0.1、0.5秒等等,在不过多等待的情况下减轻服务器承载。4.2.7编写完成打包程序 程序编写完成后,准备进行打包。 将python工程文件打包成可执行文件exe,不仅方便测试,用户使用时也不用额外搭建环境,可以直接在Windows下使用。 这里选择pyinstaller作为打包工具,但其不是默认组件,我们需要手动安装。进入pyinstaller官网:/downloads.html,如下图:图4.30pyinstaller官网可见其提示便捷安装方法为cmd输入pipinstallpyinstaller,或者在未来使用pipinstall--upgradepyinstaller指令更新。若顺利安装完成,结果将如图示:图4.31安装pyinstaller 若提示报错安装失败,可能为build环境依赖失败,解决方法为线下载安装包,下拉官网网页点击下载:图4.32在线下载pyinstaller包 下载后打开cmd,在文件路径输入pythonsetup.pyinstall即可安装成功。安装完毕后,将pyinstaller的安装路径添加到PATH环境变量中。之后把项目关联py文件、ico图标(可选,图标格式应为ico否则会报错)都复制到同一目录下,按住shift点击右键在当前路径打开powershell,输入pyinstaller-F-iC:\路径\图标.ico项目名称.py进行打包。需要注意,若过程文件调用了第三方库,需要将相关库文件放入python的库文件夹里。完成后如图:图4.33输入打包指令图4.34打包成功完成后该路径下会多出三个文件夹__pycache__、build、dist和一个spec格式的同名配置文件,dist文件夹里就是打包完成的exe可执行文件。试运行软件,成功。测试过程会在后续展示。5软件演示与测试5.1测试环境Windows10,python3.7.4,pycharm2019.1.3。5.2步骤演示与测试结果 打开exe软件,进入初始界面,按1可查看使用说明。图5.1软件主菜单 输入0进入功能菜单后,对不同的字符进行测试,结果如下:图5.2非法字符判断结果输入1进入av-bv号互转页面,分别测试两个转换选项,并依次输入合法与错误的av/bv号,测试是否正确返回结果,并对返回菜单的指令进行各种字符测试,测试结果成功,如图示:图5.3av号转为bv号测试结果图5.4bv号转为av号测试结果返回功能菜单输入2进入评论查看界面,分别测试查看昵称+评论和单独查看评论的功能,测试结果成功显示,如下图:图5.5查看昵称和评论测试结果图5.6只查看评论测试结果返回功能菜单输入3进入评论查找界面,分别测试所有功能,即长评论查看,精简评论查看和关键词查找。测试结果长评排序成功,精简评论去重复评论除成功,关键词查找到时返回正确结果,查无关键词会提示重试;无论查询成功与否都可以继续查询或者返回主菜单。如下图:图5.7长评论测试结果图5.8精简评论测试结果图5.9查找关键词测试结果返回功能菜单输入4进入抽奖界面,即按评论区抽奖,按新增/旧粉丝抽奖。输入1测试第一个功能,输入bv号后,正确抽取到一名用户,并且可根据情况重新抽取或者返回菜单,对输入错误指令的判断也成功识别,如下图:图5.10抽奖功能测试结果1 第二个粉丝抽取功能需要多次录入数据进行比对,测试首次、中间次录入成功结果如下:图5.11首日数据录入测试结果图5.12中间日数据录入测试结果测试截止日录入数据后的两种抽奖情况,从新增关注/旧关注中抽取,若未存在表单则提醒无法抽取,并且询问是否返回上一级重新抽取,测试成功,结果如下:图5.13抽奖功能测试结果2 返回功能菜单输入5进入粉丝流动浏览界面,测试第一日爬取成功,如图:图5.14首日数据录入结果测试第二日后的录入情况,并查看两个分支的粉丝情况,可返回上一层查看另一结果,如下:图5.15次日即粉丝流动查询结果返回菜单,输入6进入视频浏览或bv号获取界面,分别输入正确与错误的mid进行测试。返回结果正常,该用户的视频总数、视频标题、bv号、播放量、评论数都正确输出,并会提示进度,在输入错误的mid后提示查无用户,并提示用户重新查找,如下图:图5.16bv号获取及视频总览测试结果到此软件全部功能流程均已测试成功,没有报错。6总结6.1项目开发总结这次程序开发对用户需求逻辑进行了深入的分析,最终也实现了整个过程。从分析用户的需求,基于python环境编译,到考虑如何结合相关模块及函数库实现期望功能,终于开发出一款操作简单,逻辑清晰,查询便捷和具有良好的交互式体验的查询软件。使用成本良好,无需额外搭载平台,只需Windows10即可直接使用,受到了用户的好评。适用于全体哔哩哔哩网站的用户,包括观众和UP主等等。实现过程遇到了许多难点和报错,在导师和网上查询的帮助下不断地探索答案,也让我更加熟悉开发过程,学到更多的知识和技巧。在设计菜单循环时,一开始我并没有系统地定义好各功能函数,导致需要用到时得重复输入相同的代码行和进行更多的if语句判断,这也是一个很不好的习惯,导致代码容易报错,结构紊乱,后期也难以维护。最终我重新定义了各分函数便于主体调用,并优化了菜单逻辑,减少判断,提高软件稳定性。6.2不足与展望虽然软件实现了多个用户期望的功能,但实际中还有更多的需求和未知变化。后期维护更新依然需要解决许多问题。比如评论量巨大的数据爬取,即使设置了爬取间隔,总耗时也依旧很长,需要几个小时甚至更久。在无法获得服务器完全访问权限的前提下如何提高爬虫效率,是每一位爬虫编写者需要考虑的长远问题。参考文献[1]Winter.中文搜索引擎技术解密:网络蜘蛛[M].北京:人民邮电出版社,2014年[2]Wisenut.WisenutSearchEnginewhitepaper[M].北京:中国电力出版社,2014年[3]罗刚王振东.自己动手写网络爬虫[M].北京:机械工业出版社。2002年[4]李晓明,闫宏飞,王继民.搜索引擎:原理、技术与系统—华夏英才基金学术文库[M].北京:科学出版社,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]搜索引擎技术基础[M].北京:清华大学出版社,2010年致谢大学生活如白驹过隙,在欢笑和痛苦中,四年也显得不那么长。我在大学期间遇到了形形色色的人和事物,他们真实、生动而精彩,这些相遇的积累让我了解到世界的宽广。也明白了知识并非俯拾皆是,在相对自由的大学环境中,要想提高自己唯有自律和主动。图书馆淡淡的书本味道,轻盈的脚步声,阳光透过窗映射在书上,字里行间也变得有了温度,偶尔飘来咖啡馆的香气,仿佛咖啡因在刺激脑海。这个大家默契营造的安静氛围,都让我感到惬意和自在。论文的编写过程,导师也给了我很多的帮助和建议,宽容的态度和诲人不倦的指导精神都让我收益良多。在毕业论文即将完成的此刻,向导师和所有教师工作者表示衷心的感谢和崇高的敬意!感谢我的父母,是他们给了我不断的支持,树立我的价值观;感谢我的舍友,是他们的宽容让我改掉了许多生活上的习惯;感谢我的班级同学,是他们在大学生活中给了我方方面面的帮助;感谢我的各位老师,感谢他们无私的传授知识和咨询;感谢大学里遇到的每一个人,与他们相识真的很值得。最后,感谢母校提供了我良好的学习和生活环境,也希望母校越来越好,培养出更多的后辈。我将勇敢面对新的社会生活,迎接挑战!
电脑故障检测卡代码表
1、特殊代码"00"和"ff"及其它起始码有三种情况出现:
①已由一系列其它代码之后再出现:"00"或"ff",则主板ok。
②如果将cmos中设置无错误,则不严重的故障不会影响bios自检的继续,而最终出现"00"或"ff"。
③一开机就出现"00"或"ff"或其它起始代码并且不变化则为主板没有运行起来。
2、本表是按代码值从小到大排序,卡中出码顺序不定。
3、未定义的代码表中未列出。
4、对于不同bios(常用ami、award、phoenix)用同一代码代表的意义不同,因此应弄清您所检测的电脑是属于哪一种类型的bios,您可查阅您的电脑使用手册,或从主板上的bios芯片上直接查看,也可以在启动屏幕时直接看到。
5、有少数主板的pci槽只有一部分代码出现,但isa槽有完整自检代码输出。且目前已发现有极个别原装机主板的isa槽无代码输出,而pci槽则有完整代码输出,故建议您在查看代码不成功时,将本双槽卡换到另一种插槽试一下。另外,同一块主板的不同pci槽,有的槽有完整代码送出,如dell810主板只有靠近cpu的一个pci槽有完整代码显示,一直变化到"00"或"ff",而其它pci槽走到"38"后则不继续变化。
6、复位信号所需时间isa与pci不一定同步,故有可能isa开始出代码,但pci的复位灯还不熄,故pci代码停要起始代码上。
代码对照表
00.已显示系统的配置;即将控制INI19引导装入。
01处理器测试1,处理器状态核实,如果测试失败,循环是无限的。处理器寄存器的测试即将开始,不可屏蔽中断即将停用。CPU寄存器测试正在进行或者失败。
02确定诊断的类型(正常或者制造)。如果键盘缓冲器含有数据就会失效。停用不可屏蔽中断;通过延迟开始。CMOS写入/读出正在进行或者失灵。
03清除8042键盘控制器,发出TESTKBRD命令(AAH)通电延迟已完成。ROMBIOS检查部件正在进行或失灵。
04使8042键盘控制器复位,核实TESTKBRD。键盘控制器软复位/通电测试。可编程间隔计时器的测试正在进行或失灵。
05如果不断重复制造测试1至5,可获得8042控制状态。已确定软复位/通电;即将启动ROM。DMA初如准备正在进行或者失灵。
06使电路片作初始准备,停用视频、奇偶性、DMA电路片,以及清除DMA电路片,所有页面寄存器和CMOS停机字节。已启动ROM计算ROMBIOS检查总和,以及检查键盘缓冲器是否清除。DMA初始页面寄存器读/写测试正在进行或失灵。
07处理器测试2,核实CPU寄存器的工作。ROMBIOS检查总和正常,键盘缓冲器已清除,向键盘发出BAT(基本保证测试)命令。.
08使CMOS计时器作初始准备,正常的更新计时器的循环。已向键盘发出BAT命令,即将写入BAT命令。RAM更新检验正在进行或失灵。
09EPROM检查总和且必须等于零才通过。核实键盘的基本保证测试,接着核实键盘命令字节。第一个64KRAM测试正在进行。
0A使视频接口作初始准备。发出键盘命令字节代码,即将写入命令字节数据。第一个64KRAM芯片或数据线失灵,移位。
0B测试8254通道0。写入键盘控制器命令字节,即将发出引脚23和24的封锁/解锁命令。第一个64KRAM奇/偶逻辑失灵。
0C测试8254通道1。键盘控制器引脚23、24已封锁/解锁;已发出NOP命令。第一个64KRAN的地址线故障。
0D1、检查CPU速度是否与系统时钟相匹配。2、检查控制芯片已编程值是否符合初设置。3、视频通道测试,如果失败,则鸣喇叭。已处理NOP命令;接着测试CMOS停开寄存器。第一个64KRAM的奇偶性失灵
0E测试CMOS停机字节。CMOS停开寄存器读/写测试;将计算CMOS检查总和。初始化输入/输出端口地址。
0F测试扩展的CMOS。已计算CMOS检查总和写入诊断字节;CMOS开始初始准备。.
10测试DMA通道0。CMOS已作初始准备,CMOS状态寄存器即将为日期和时间作初始准备。第一个64KRAM第0位故障。
11测试DMA通道1。CMOS状态寄存器已作初始准备,即将停用DMA和中断控制器。第一个64DKRAM第1位故障。
12测试DMA页面寄存器。停用DMA控制器1以及中断控制器1和2;即将视频显示器并使端口B作初始准备。第一个64DKRAM第2位故障。
13测试8741键盘控制器接口。视频显示器已停用,端口B已作初始准备;即将开始电路片初始化/存储器自动检测。第一个64DKRAM第3位故障。
14测试存储器更新触发电路。电路片初始化/存储器处自动检测结束;8254计时器测试即将开始。第一个64DKRAM第4位故障。
15测试开头64K的系统存储器。第2通道计时器测试了一半;8254第2通道计时器即将完成测试。第一个64DKRAM第5位故障。
16建立8259所用的中断矢量表。第2通道计时器测试结束;8254第1通道计时器即将完成测试。第一个64DKRAM第6位故障。
17调准视频输入/输出工作,若装有视频BIOS则启用。第1通道计时器测试结束;8254第0通道计时器即将完成测试。第一个64DKRAM第7位故障。
18测试视频存储器,如果安装选用的视频BIOS通过,由可绕过。第0通道计时器测试结束;即将开始更新存储器。第一个64DKRAM第8位故障。
19测试第1通道的中断控制器(8259)屏蔽位。已开始更新存储器,接着将完成存储器的更新。第一个64DKRAM第9位故障。
1A测试第2通道的中断控制器(8259)屏蔽位。正在触发存储器更新线路,即将检查15微秒通/断时间。第一个64DKRAM第10位故障。
1B测试CMOS电池电平。完成存储器更新时间30微秒测试;即将开始基本的64K存储器测试。第一个64DKRAM第11位故障。
1C测试CMOS检查总和。.第一个64DKRAM第12位故障。
1D调定CMOS配置。.第一个64DKRAM第13位故障。
1E测定系统存储器的大小,并且把它和CMOS值比较。.第一个64DKRAM第14位故障。
1F测试64K存储器至最高640K。.第一个64DKRAM第15位故障。
20测量固定的8259中断位。开始基本的64K存储器测试;即将测试地址线。从属DMA寄存器测试正在进行或失灵。
21维持不可屏蔽中断(NMI)位(奇偶性或输入/输出通道的检查)。通过地址线测试;即将触发奇偶性。主DMA寄存器测试正在进行或失灵。
22测试8259的中断功能。结束触发奇偶性;将开始串行数据读/写测试。主中断屏蔽寄存器测试正在进行或失灵。
23测试保护方式8086虚拟方式和8086页面方式。基本的64K串行数据读/写测试正常;即将开始中断矢量初始化之前的任何调节。从属中断屏蔽存器测试正在进行或失灵。
24测定1MB以上的扩展存储器。矢量初始化之前的任何调节完成,即将开始中断矢量的初始准备。设置ES段地址寄存器注册表到内存高端。
25测试除头一个64K之后的所有存储器。完成中断矢量初始准备;将为旋转式断续开始读出8042的输入/输出端口。装入中断矢量正在进行或失灵。
26测试保护方式的例外情况。读出8042的输入/输出端口;即将为旋转式断续开始使全局数据作初始准备。开启A20地址线;使之参入寻址。
27确定超高速缓冲存储器的控制或屏蔽RAM。全1数据初始准备结束;接着将进行中断矢量之后的任何初始准备。键盘控制器测试正在进行或失灵。
28确定超高速缓冲存储器的控制或者特别的8042键盘控制器。完成中断矢量之后的初始准备;即将调定单色方式。CMOS电源故障/检查总和计算正在进行。
29.已调定单色方式,即将调定彩色方式。CMOS配置有效性的检查正在进行。
2A使键盘控制器作初始准备。已调定彩色方式,即将进行ROM测试前的触发奇偶性。置空64K基本内存。
2B使磁碟驱动器和控制器作初始准备。触发奇偶性结束;即将控制任选的视频ROM检查前所需的任何调节。屏幕存储器测试正在进行或失灵。
2C检查串行端口,并使之作初始准备。完成视频ROM控制之前的处理;即将查看任选的视频ROM并加以控制。屏幕初始准备正在进行或失灵。
2D检测并行端口,并使之作初始准备。已完成任选的视频ROM控制,即将进行视频ROM回复控制之后任何其他处理的控制。屏幕回扫测试正在进行或失灵。
2E使硬磁盘驱动器和控制器作初始准备。从视频ROM控制之后的处理复原;如果没有发现EGA/VGA就要进行显示器存储器读/写测试。检测视频ROM正在进行。
2F检测数学协处理器,并使之作初始准备。没发现EGA/VGA;即将开始显示器存储器读/写测试。.
30建立基本内存和扩展内存。通过显示器存储器读/写测试;即将进行扫描检查。认为屏幕是可以工作的。
31检测从C800:0至EFFF:0的选用ROM,并使之作初始准备。显示器存储器读/写测试或扫描检查失败,即将进行另一种显示器存储器读/写测试。单色监视器是可以工作的。
32对主板上COM/LTP/FDD/声音设备等I/O芯片编程使之适合设置值。通过另一种显示器存储器读/写测试;却将进行另一种显示器扫描检查。彩色监视器(40列)是可以工作的。
33.视频显示器检查结束;将开始利用调节开关和实际插卡检验显示器的关型。彩色监视器(80列)是可以工作的。
34.已检验显示器适配器;接着将调定显示方式。计时器滴答声中断测试正在进行或失灵。35.完成调定显示方式;即将检查BIOSROM的数据区。停机测试正在进行或失灵。
36.已检查BIOSROM数据区;即将调定通电信息的游标。门电路中A-20失灵。
37.识别通电信息的游标调定已完成;即将显示通电信息。保护方式中的意外中断。
38.完成显示通电信息;即将读出新的游标位置。RAM测试正在进行或者地址故障>FFFFH。
39.已读出保存游标位置,即将显示引用信息串。.
3A.引用信息串显示结束;即将显示发现信息。间隔计时器通道2测试或失灵。
3B用OPTI电路片(只是486)使辅助超高速缓冲存储器作初始准备。已显示发现<ESC>信息;虚拟方式,存储器测试即将开始。按日计算的日历时钟测试正在进行或失灵。
3C建立允许进入CMOS设置的标志。.串行端口测试正在进行或失灵。
3D初始化键盘/PS2鼠标/PNP设备及总内存节点。.并行端口测试正在进行或失灵。
3E尝试打开L2高速缓存。.数学协处理器测试正在进行或失灵。
40.已开始准备虚拟方式的测试;即将从视频存储器来检验。调整CPU速度,使之与外围时钟精确匹配。
41中断已打开,将初始化数据以便于0:0检测内存变换(中断控制器或内存不良)从视频存储器检验之后复原;即将准备描述符表。系统插件板选择失灵。
42显示窗口进入SETUP。描述符表已准备好;即将进行虚拟方式作存储器测试。扩展CMOSRAM故障。
43若是即插即用BIOS,则串口、并口初始化。进入虚拟方式;即将为诊断方式实现中断。.44.已实现中断(如已接通诊断开关;即将使数据作初始准备以检查存储器在0:0返转。)BIOS中断进行初始化。
45初始化数学协处理器。数据已作初始准备;即将检查存储器在0:0返转以及找出系统存储器的规模。.
46.测试存储器已返回;存储器大小计算完毕,即将写入页面来测试存储器。检查只读存储器ROM版本。
47.即将在扩展的存储器试写页面;即将基本640K存储器写入页面。
48.已将基本存储器写入页面;即将确定1MB以上的存储器。视频检查,CMOS重新配置。
49.找出1BM以下的存储器并检验;即将确定1MB以上的存储器。.
4A.找出1MB以上的存储器并检验;即将检查BIOSROM数据区。进行视频的初始化。
4B.BIOSROM数据区的检验结束,即将检查<ESC>和为软复位清除1MB以上的存储器。.4C.清除1MB以上的存储器(软复位)即将清除1MB以上的存储器.屏蔽视频BIOSROM。.4D。已清除1MB以上的存储器(软复位);将保存存储器的大小。.
4E若检测到有错误;在显示器上显示错误信息,并等待客户按<F1>键继续。开始存储器的测试:(无软复位);即将显示第一个64K存储器的测试。显示版权信息。
4F读写软、硬盘数据,进行DOS引导。开始显示存储器的大小,正在测试存储器将使之更新;将进行串行和随机的存储器测试。.
50将当前BIOS监时区内的CMOS值存到CMOS中。完成1MB以下的存储器测试;即将高速存储器的大小以便再定位和掩蔽。将CPU类型和速度送到屏幕。
51.测试1MB以上的存储器。.
52所有ISA只读存储器ROM进行初始化,最终给PCI分配IRQ号等初始化工作。已完成1MB以上的存储器测试;即将准备回到实址方式。进入键盘检测。
53如果不是即插即用BIOS,则初始化串口、并口和设置时种值。保存CPU寄存器和存储器的大小,将进入实址方式。.
54.成功地开启实址方式;即将复原准备停机时保存的寄存器。扫描“打击键”
55.寄存器已复原,将停用门电路A-20的地址线。.
56.成功地停用A-20的地址线;即将检查BIOSROM数据区。键盘测试结束。
57.BIOSROM数据区检查了一半;继续进行。.
58.BIOSROM的数据区检查结束;将清除发现<ESC>信息。非设置中断测试。
59.已清除<ESC>信息;信息已显示;即将开始DMA和中断控制器的测试。.
5A..显示按“F2”键进行设置。
5B..测试基本内存地址。
5C..测试640K
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年抽纱刺绣工艺品合作协议书
- 2024农资市场互购联盟合作协议书3篇
- 2024年专业送气人员劳动协议标准文本
- 2024年吊车租赁协议综合条款
- 2024女方净身出户离婚协议书范本:婚前财产与婚后财产界定3篇
- 2024年产权转让专项协议范本
- 2024年度农产品电商合同:辣椒网络销售平台合作协议3篇
- 2024年度梅翠与林二十三离婚后遗产分配合同3篇
- 2024居间合同居间费分配协议
- 2024年度消防器材采购合同3篇
- 发生盗窃应急处理预案
- 2024年中考语文复习:古代散文分类练习题汇编 (含答案解析)
- 2024年国家统计服务中心招聘历年高频考题难、易错点模拟试题(共500题)附带答案详解
- 声学实验设计:探索声音的传播与谐振现象
- 算法竞赛入门经典(算法实现)
- 单值-移动极差控制图(自动版)
- 前庭性偏头痛课件
- 课题结题报告:小学中高段单元整合.群文阅读课堂教学策略研究
- 机动车交通安全统筹服务规范
- 贺州市钟山县2024年事业单位考试A类《职业能力倾向测验》统考试题含解析
- 外立面改造方案
评论
0/150
提交评论