Python网络爬虫及数据可视化.doc

上传人:李** 文档编号:48535204 上传时间:2022-10-06 格式:DOC 页数:39 大小:7.22MB
返回 下载 相关 举报
Python网络爬虫及数据可视化.doc_第1页
第1页 / 共39页
亲,该文档总共39页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《Python网络爬虫及数据可视化.doc》由会员分享,可在线阅读,更多相关《Python网络爬虫及数据可视化.doc(39页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、Python网络爬虫及数据可视化学 院:专 业:姓 名:指导老师:信息学院通信工程陈悦俊学 号:职 称:160108104497石碧莹讲师中国珠海二二年五月北京理工大学珠海学院2020届本科生毕业设计诚信承诺书本人郑重承诺:本人承诺呈交的毕业设计Python网络爬虫及数据可视化是在指导教师的指导下,独立开展研究取得的成果,文中引用他人的观点和材料,均在文后按顺序列出其参考文献,设计使用的数据真实可靠。本人签名: 日期: 年 月 日Python网络爬虫及数据可视化摘 要随着4G的全面普及,以及5G基站建设开展,带来互联网相关产业的高速发展,电子数据的爆发式增长。对于互联网公司来说,海量用户带来的

2、巨量数据就是待挖掘的金矿,同时数据也是互联网公司的生命线。获取海量的数据如果通过人工一一进行获取,速度缓慢,耗费时间长,效率低下,对于此痛点,网络爬虫是最好的选择,通过计算机的协助,获取海量具有价值的数据。bilibili弹幕网站(以下简称B站)是近年来在年轻人中比较受欢迎的网站,用户趋向90后乃至00后,对于该网站的用户对象比较感兴趣,网站官方对爬虫也比较友好,因此选择该网站为爬取对象。本课题以Python为开发语言,借助requests库编写爬虫,MySQL为数据库,用于存储数据,在后续数据可视化中,还是使用Python进行分析,通过这个程序,可以实现高效获取数据,筛选数据,存储数据,分析

3、数据,数据可视化。关键词:网络爬虫;Python;bilibili弹幕网站;数据可视化Python Web Crawler And Data VisualizationAbstractWith the full popularity of 4G and the construction of 5G base stations, the rapid development of Internet-related industries has brought about explosive growth of electronic data. For Internet companies, the

4、 huge amount of data brought by massive users is the gold mine to be mined, and the data is also the lifeline of Internet companies. Obtaining huge amounts of data manually is slow, time-consuming, and inefficient. For this pain point, web crawlers are the best choice. With the assistance of a compu

5、ter, you can obtain massive amounts of valuable data. The bilibili barrage website(Referred to as B Station) is a popular website among young people in recent years. Users tend to be post-90s or even 00s. They are more interested in the user objects of the site and friendly to crawlers.This topic us

6、es Python as the development language, write crawlers with the request library, and MySQL as the database for storing data. In the subsequent data visualization, Python is used for analysis. Through this program, you can efficiently obtain data, filter data, and store data , Analyze data, data visua

7、lization.Keywords: web crawler; Python; bilibili barrage website; data visualization目 录1 绪论11.1 程序开发背景11.2 程序开发目标11.3 论文内容和结构布局12程序设计与实现22.1 程序描述22.2程序技术介绍22.2.1编程语言22.2.2开发工具22.2.2爬虫原理22.3程序开发及结构32.3.1开发思路32.3.2可行性分析42.3.3开发环境搭建42.3.4数据库搭建42.3.5主程序分析62.4程序调试193运行结果193.1 爬取数据成果193.2数据分析结果214总结23参考文献

8、24谢辞25附录261绪论 1.1程序开发背景 世界进入21世纪,来到我们如今的移动互联网时代,人们通过手机点外卖,通过网络购买世界各地的商品,生活如此便捷,得力于我们国家互联网产业的快速发展以及网络的普及。互联网用户越来越多,由此产生的数据量就越来越大,对于互联网公司来说,数据就是生命线。数据可以增强用户的体验,根据数据为用户更好的体验,同时提高公司的运营效率。对于互联网公司来说,海量用户带来的巨量数据就是待挖掘的金矿。在现在商业竞争如此激烈的情况下,对于企业来说,想要分析自己的数据还是很容易的,但是对于某数据感兴趣人群或者是竞争对手公司想要研究对方公司的数据,可能就需要采取一些方法和手段了

9、,如果手动获取采集数据,效率低下,而且互联网时代,数据产生和数据量可谓是瞬息万变,效率低下不仅影响采集数据的时效性和质量,还成本高昂。在有如此的需求下,网络爬虫应运而生,网络爬虫可以通过特定的规则,高效采集筛选网页的数据,并存储数据。这对于需要快速获取数据的人群来说,是最好的选择。关于网络爬虫,近年来也是对其争议不断,爬虫带来了不少问题,爬虫如果爬取速度过快,会对web服务器造成很大的开销,有可能造成服务器的宕机,爬虫制造和使用者也可能会因此付出相关法律责任,另外爬取对方企业数据进行牟取利益也会带来法律风险,因此爬虫开发和使用需要对这方面相当注意。同时企业的反爬手段也不断更新升级,有些网站一旦

10、发现爬虫就会对访问者的IP封禁,或者限制其访问次数,甚至返回假数据。也有一些网站允许爬虫爬取数据,但会出台相应的Robots协议,告知爬虫使用者哪些数据是允许爬取的,如果Robots协议是空的,则默认可以爬取任意数据,Robots协议只是对爬虫使用者的建议,没有约束性,爬虫使用者仍然可以不遵守。总之现在想要爬取网站的数据正变得越来越难。1.2程序开发目标 此次设计目标,爬虫爬取数据不要求很大,但数据量需要具有一定的代表性,爬取速度计划达到400条/1分钟,爬取时间超过6-7小时,同时可以关联数据库,爬取数据后存储数据库,后续可以在数据库中快速查询提取数据,同时另外建立程序,可以对数据库中数据进

11、行可视化操作,通过绘制一些数据图表,使数据具有更直观的展现。1.2论文内容和结构布局第一章 绪 论:主要介绍程序的发展开发背景,以及开发目的第二章 程序设计与实现:介绍程序的相关技术以及程序的开发过程和步骤;第三章 运行结果:展现程序的运行结果,以及得到数据的分析结果;第四章 总结:总结对程序的学习和开发的一些想法和感悟;2程序设计与实现2.1程序描述本设计程序由三个部分组成,爬虫程序部分为程序1,可以根据B站账号从最小开始,循环爬取网页内用户的账号,昵称,性别,粉丝,关注量,会员信息,等级,上传作品数量,并将其存入数据库,程序2完成读取数据进行数据的快速查询和提取工作,程序3进行数据可视化的

12、工作。2.2程序技术介绍2.2.1编程语言本次设计通过Python3.7编写网络爬虫,事实上用C,Java,C+都可以编写出爬虫,但是与Python相比较而言,语法更加简洁易用,并且提供了大量功能类库,可以直接调用,编写效率更高,同时也方便后续进行数据分析,因此是作为爬虫编写语言的首选。2.2.2开发工具开发语言:Python3.7。开发平台:PyCharm社区版。PyCharm专注于Python开发,工具免费且不臃肿,同时拥有智能填充,还有高效的提示功能,这些功能对于Python新手来说非常友好。数据库:MySQL。需要爬取的用户数据,一条用户数据在80B的样子,所以实际上一百万的用户数据实

13、不超过100MB,数据库方面选择使用命令行的MySQL Community Server 8.0.19版本,MySQL是一种关系型数据库,拥有开源,执行速度快,支持多种编程语言的优点,在存储爬虫数据性能方面绝对够用。2.2.3爬虫原理爬虫的运作是基于HTTP协议的,要了解爬虫的原理,首先需要了解HTTP协议。HTTP协议又叫超文本传输协议,是互联网上应用最为广泛的一种网络协议,协议设计目的是为了提供发送和接收页面内容的方法,所有的网站都遵循这个标准。HTTP协议是面向连接的,一般的HTTP访问过程为:客户端端于服务器建立连接,客户端端向服务器提出请求,服务器接收请求并根据请求返回相应的数据,客

14、户于服务器断开连接。爬虫的原理简单来说是自动向服务器发送请求,并从返回给终端的信息中筛选并存储信息。现如今网页内容都是由HTML,JavaScript,CSS,XML,XHR以及JSON文件组成,其中HTML是网页的骨架,JS,CSS完成网站的色彩和交互功能。本质上爬虫和浏览器的原理是相似的,用户获取信息的过程其实是,客户端将自己的信息通过浏览器是向web服务器提交请求Request,服务器接收请求,并分析请求信息,返回一些JS,CSS,HTML等数据到客户端浏览器,浏览器通过解析数据,最后在用户前展现网页中呈现不同的内容。 而基于Requests库的Python爬虫,模拟浏览器,将自己的信息

15、通过浏览器是向web服务器发送Request信息,如果web服务器正常响应,就会返回Response,包含JS,CSS,HTML或者是JSON,图片,视频。而爬虫在获取数据后根据编写一定的规则,筛选出其中有价值的数据,并进行存储。爬虫原理图如下:图2.1 爬虫原理图2.3程序开发及结构2.3.1开发思路编写程序思路上,根据Requests库官方文档编写爬虫,代码方面尽量倾向从简单,轻量化方面思考,方便后续进行修改和维护。总体结构分为三个部分,将程序分为程序1,程序2和程序3。程序1完成爬虫的工作,循环爬取一百万的用户数据,完成储存后反馈完成信息并记录完成时间点,程序2完成数据分析,程序3完成数

16、据可视化的工作。图2.2 程序开发思路2.3.2可行性分析程序使用Requests库进行开发爬虫,Python简单易学,方便快速入门上手,可以调用多种工具库,MySQL作为数据库,数据库语言上手简单,难度不高,开发环境基于Windows10进行搭建开发。开发工具PyCharm是免费的,完成项目只需要花费学习时间,项目技术上可行。 2.3.3开发环境搭建必备安装:Python3.7,PyCharm存储空间配置,环境变量配置新建程序项目2.3.4数据库搭建下载并解压MySQL Community Server 8.0.19,在命令提示符中进入MySQL根目录bin,输入mysqld install

17、进行安装,以管理员权限打开命令提示符,并输入mysqld -initialize console进行激活数据库,设置环境变量,方便下次进入数据库(没有配置环境变量,每次进入数据库都需要先进入MySQL根目录)。命令提示符输入net start mysql,开启数据库进程(net stop mysql关闭数据库)图2.3 MySQL启动过程命令提示符输入mysql -u root -p,进入数据库,其中root是用户名,p后面填写密码,这边设计密码为空图2.4进入MySQL操作命令行进入数据库后,输入create database test;,创建名为test的数据库。输入use test,选中

18、使用test数据库,进入test数据库后再输入:create table user(mid bigint(20) NOT NULL,name VARCHAR(200) NOT NULL,sex VARCHAR(200) NOT NULL,fans bigint(20) NOT NULL,attention bigint(20) NOT NULL,level bigint(20) NOT NULL,vipType bigint(20) NOT NULL,upload bigint(20) NOT NULL,PRIMARY KEY (mid) )ENGINE=InnoDB DEFAULT CHAR

19、SET=utf8;创建名为users的数据表,包含账号,昵称,性别,粉丝数量,关注数量,等级和会员身份,上传视频数量的键位,昵称、性别为字符串类型varchar,账号、粉丝数量、关注数量、等级和会员身份为整型bigint,存储数字。其中主键是账号(mid),因为要建立关系模型,首先需要确定主键,在关系表中,有个重要的约束,任意两条记录不重复。不重复不是指两条记录不完全相同,而是指可以通过某个字段区分出不同的记录,这个字段被称为主键。建立主键是数据表内的唯一标识,是不可更改的,账号在B站中也是作为每一为用户独有的信息,不会出现两位或以上的用户账号是一样的情况,因此选定账号是主键,设置非空not

20、null,如果键位没有存储数据出现null,则会报错,设置VARCHAR(200)则表示键位无论汉字(每个汉字3字节),字母还是数字都可以存储200个,utf8为数据表的编码格式。至此数据库搭建完成,后续爬取的数据将存储在test数据库中的users数据表中。2.3.5主程序分析程序1:程序1主要完成爬虫的工作,根据HTTP协议,首先需要构造出返回目标网站url的一个函数,需要了解爬取的相关信息。使用谷歌浏览器进入B站图2.5 B站界面图进入B站后,需要进入某个用户(包含up主)的介绍页面,随机点击主页上的一个视频。图2.6点击进入任意视频进入视频播放页面后点击up主头像,进入up主介绍页面这

21、时可以找到我们需要的数据,包含用户的各种信息,包含昵称,关注,粉丝,投稿,会员信息,网站网址是图2.7需要爬取的页面相关信息这个就是我们需要爬取的目标网站了。之后我们停留这个页面,按键盘F12打开开发者工具(这时打开开发者工具是没有内容的,需要刷新页面,重新进入网站),刷新网页重新进入网站。图2.8进入浏览器的开发者工具开发者工具有Elements,console,Sources,Network,Performance,Memory,Application,Security,Audits。这里只需要用到Network图2.9进入开发者工具的Headers图2.10进入开发者工具的Respons

22、e这时我们点击开发者工具内的Network,点击XHR,XHR全称是XMLHttpRequest,用于客户端与服务器交互数据,在位于开发者工具右边的显示为请求文件的具体说明,分为五个模块,分别为Headers,Preview,Response,Cookies,Timing。下一步,需要找到我们需要爬取的信息,点击Response,然后遍历左侧的NAME资源列表,不难找到info中服务器返回Response中有我们需要的信息,包含账号,昵称,性别,粉丝数量,关注数量,等级和会员身份等信息。图2.11 General信息最后需要找到info的资源的请求URL,进入Headers面板,Headers

23、面板中分为General,Request Headers,Response Headers,Query String Parameters。在General中的Request URL就是资源的请求URL。一样通过打开不同用户的网页进入开发者工具可以了解到资源的请求URL中mid后面数字就是用户账号。开始编写获取资源的请求URL的函数,结果如下:图2.12 bilibili_url函数定义名为bilibili_url的函数,url复制粘贴之前获得的资源的请求URL,将mid改为mid1,数据类型为整型, mid1的值会在后面进行定义。函数作用为返回url的值。这个函数会在后续函数中调用根据HTT

24、P协议,访问网站还需要User-Agent,User-Agent会告诉网站服务器,用户访问网站的工具(包括浏览器和计算机操作系统信息,包含版本和内核的信息),包含正常完整的User-Agent信息的Request Headers申请访问网站,一般网站服务器都会同意该访问(也存在一些更加严格审查的网站,除了User-Agent信息,还需要Referer以及Cookie信息)。图2.13 Request Headers信息还是刚才那个网站开发者工具内在Headers模块中,在Request Headers中可以找到User-Agent的信息,可以了解到自己是通过谷歌浏览器问、win10操作系统进入

25、请求网站服务器。因为爬虫需要循环重复申请访问网站,因此需要伪装不同的机器申请访问网站,User-Agent是拥有一定规律的,我在网上收集了各种User-Agent,并收收集进user_agent.txt文件中,一共有899中不同的User-Agent。如下图:图2.14 user_agents文件信息图2.15 UA函数在完成一系列准备工作后,开始编写函数,定义名为UA的函数,在Python中调用random库,调用random.randrange()方法在0,900)范围内随机生成的一个实数作为读取user_agent.txt的行数,调用linecache库,使用linecache.getl

26、ine()的方法读取文件,方法参数为文件名和行数,a则是之前随机生成的行数。return ua.rstrip()返回读取该行内容并消除在内容中空白部分。该函数作用是返回不同的User-Agent,这个函数会在后面调用。图2.16 PR函数PR()函数是起获取IP代理的作用,IP代理一般有高匿和透明两种,使用高匿IP代理访问网站,服务器不能得知你通过代理访问,而透明IP代理则网站服务器可以得知你通过代理访问网站,代理一般有HTTP和HTTPS两种。函数原理和UA()函数一样,使用random.randrange()在0,100)随机生成数字作为行数读取proxies.txt文件(先前建立存有IP

27、代理的文件),原定是计划使用动态IP代理的技术进行爬取数据,但是网上找到的一些IP代理(包括收费和免费)质量参差不齐,程序运行过程普遍不稳定,经常在爬取的过程中中断,影响爬取效率。最后还是放弃PR(),放弃使用IP代理。双击打开资源的请求URL,可以打开网页,如图:图2.17 爬取页面详情这网页就是爬虫需要获取的数据,也是所有网站返回的信息,数据类型是JSON格式,JSON全称JavaScript Object Notation,是一种轻量级的数据交换格式,格式布局类似Python里面的数据类型字典,在命令提示符中使用pip install requests下载安装requests库,调用re

28、quests库编写函数,web服务器发送数据到客户端是先打包数据然后发出的,requests库的作用是解压服务器网页内容。图2.18 爬取页面404界面如果正在爬取的账号已经不存在了,则网页不存在任何信息,code等于-404。图2.18 get_user_json函数信息定义函数get_user_json,定义请求头head,调用UA函数模拟不同的机器进行请求访问网站;proxies是IP代理,已经放弃使用;定义response,调用request.get()的方法,使用get的方式请求网站服务器,参数为url和headers。这里调用raise_for_status()的方法,其作用是当访

29、问网页后的HTTP状态码不是200时,自动产生requests.HTTPError。基于此,就不需要判断状态码不为200情况了,在大批量爬取网页内容时,只要出现HTTPError异常,直接跳过,爬完所有数据后在进行处理。定义s为与网站保持会话,同时调用keep_alive的方法,关闭多余连接,防止爬虫循环过快打开多个请求网站连接。函数结尾response全部信息,获得web服务器返回的所有信息,但是这些信息是所有的信息,未经筛选处理,因此后面还需要进行又筛选的步骤。get_user_json函数作用就是返回网站的所有信息。后续函数中也会调用该函数。图2.19 spider1函数信息因为get_

30、user_json函数返回数据的格式是JSON,需要对其筛选并进行存储。在命令示符中使用一样的方法下载安装jsonpath和json库,编写函数spider1。首先调用list的方法定义列表mid_list的范围在1,10001)。然后使用for循环,使mid1循环遍历mid_list列表,调用bilibili_url函数,将列表内的值赋值到函数中,同时获取url,调用get_user_json函数,再将url赋值到函数中,将函数获取的数据赋值到j。下一步使用json.load的方法读取json数据,将解析数据赋值到data,之后就是筛选数据了。使用jsonpath的方法首先对code进行解析

31、,在此前了解到存在账号不存在的现象,因此获取数据之前对将要爬取的页面进行判断,这里使用if判断,如果code = -404,则表示这个账号已经被注销了,或者账号不存在,直接跳过该页面并记录“该用户已注销”,进行下一个账号页面的获取;如果code不是-404则对json数据中的账号,昵称,性别,粉丝数量,关注数量,等级,会员身份,上传视频数量一一筛选并解析。到了这一步数据以及完成筛选,则要进行存储了,之前数据库以及搭建完成,这里我调用MySQL官方连接库mysql.connector,调用mysql.connector.connect()的方法建立连接,参数为数据库的账户,密码和数据库名称。使用

32、conn.cursor()的方法建立游标,Python程序与数据库之间交流的原理如下图所示,mysql.connector.connect()方法负责完成程序与数据库建立连接的步骤,游标负责完成数据传输,相当于其中搬运工的角色,将mysql嵌入数据命令赋值到SQL中,值为val一一对应,因为筛选后的数据类型是列表,所以添加0,获取筛选数据后列表中的值,最后使用executemany()的方法执行MySQL命令,最后通过commit()的方法,提交数据并刷新数据库,完成数据存储的工作。图2.20 程序信息写入MySQL原理图完成上述步骤后反馈完成信息,并调用time库,使用datetime.no

33、w()的方法记录完成时间。使用time.sleep()的方法计算爬虫获取数据的间隙时间,每执行完一次爬取动作后,静止0.2秒,再循环进行下一爬取。单进程爬虫至此已经完成,如今需要使用多进程的技术加快爬虫的速度。调用multiprocessing库,与spider1同理。建立另外三个爬虫函数,分别为spider2,spider3,spider4,函数结构和内容上都是一样的,只有mid_list的范围各不相同,由此爬取的范围也各不相同,实现爬取多个账号范围同时进行爬取数据的功能。图2.21 多进程应用使用pool()的方法建立四个进程,使用apply_async()的方法在进程池中添加目标进程为s

34、pider1,spider2,spider3,spider4,使用join()的方法启动新进程,使用close()的方法在进程完成工作后关闭进程。至此,程序1爬虫部分就此完成。程序2:程序2主要完成从数据库中提取数据并进行计算分析的工作。这部分操作实际上是完全可以从命令提示符中使用命令完成的,但是为了可以公式化,通过运行程序就可以获取全部所需要的数据内容,最后还是把命令写入程序,获取数据更加方便,不必再去反复输入命令,只需要运行一次程序就可以拉取所有数据。 图2.22 程序信息写入MySQL原理图数据提取的原理一样需要调用mysql.connector库,和之前存储数据差不多的原理,同样需要建

35、立游标传输。图2.23 程序建立MySQL游标接下来会建立几个简单的函数,用以获取MySQL中的数据。图2.24 get_vip_datas函数信息建立get_vip_datas函数,调用pandas.read_sql()的方法读取MySQL数据,其中参数是MySQL命令和先前建立的MySQL连接,调用pandas的head()的函数,显示读取的数据,同时打印标题“用户付费数据”。后面分别建立get_sex_datas(),用于用户性别数据提取工作,get_upload_datas()读取投稿视频用户的人数,get_level_datas()获取用户等级数据,get_fan_datas()获取

36、用户的粉丝情况,get_fan_sorting_datas()获取拥有粉丝数量排名前20 的用户,都采用同样的方法和原理,调用pandas.read_sql()和head(),完成数据提取的工作。图2.25 执行函数在程序的最后调用函数,至此程序2提取数据的功能已经完成。程序3:程序3需要完成的工作是将获取的数据进行可视化,我计划通过绘制圆饼图和条形图进行展示数据。通过调用matplotlib库进行绘图。也是通过建立函数,程序2和程序3的一系列操作原本是可以不建立函数的,建立函数是为了方便后续调用,程序趋向模块化,方便修改和维护。图2.26 upload_data函数信息建立名为upload_

37、data()的函数,绘制用户中UP主(仅计算投稿视频,不包括投稿文章)和观众的占比,首先使用设置字体,设置字体后绘图就可以使用中文字体了,否则只能显示英文。使用figure()的方法设置窗口大小,title()设置标题,定义labels标签为观众和up主,定义sizes各个标签的占比,定义colors圆饼图的颜色,最后使用pie()的方法绘制圆饼图,添加之前定义的参数,autopct参数为%3.1f%表示小数有三位,整数有一位的浮点数。startangle是起始角度,选择从90度开始圆饼图会比较美观。Pctdistance为0.6,是显示百分比的标签离圆心的距离,最后使用show()的方法绘制

38、图形。后面再分别建立sex_data()和vip_data()函数,用于绘制用户性别占比以及用户会员付费的情况,原理与upload_data()是一样的。图2.27 level_data函数信息建立名为level_data()的函数,展示每个等级的用户数量。还是一样,先设置字体,定义各个区间的用户人数。然后使用barh()d的方法,range为7,因为有7个区间,数据为先前定义的用户人数,条形宽度为0.7,条形颜色为steelblue,然后定义x坐标为0至500000,x轴标签为人数,条形图标题为用户等级数据,最后使用for循环,将users的值循环标记到相应条形的顶部,最后使用show()的

39、方法绘制图形。最后再建立fans_data()函数,显示B站用户的粉丝数量级,原理和方法和level_data()一样。2.4主程序调试程序调试主要集中在程序1爬虫部分,由于放弃IP代理的方法爬取数据,最后只能选择控制爬虫速度,反复尝试不同的爬虫速度,爬取速度过快会在爬取到第100多条的时候就被封IP一天,最后尝试出一个足够快而且不会被web服务器封禁IP地址的速度,同时将爬虫的进程数设置在四个,爬虫访问网站间断时间time.sleep控制在0.2秒。爬取速度可能会受到网站服务器的响应时间以及网速的影响,造成速度上下波动,理想状态下,爬取速度才是450条/1分钟,爬取实际速度符合计划预期速度。

40、程序3则反复尝试不同的绘图颜色,达到图片看起来了舒服为止。 另外,在完成好代码部分后,陆续修正代码规范以及程序1,2,3的一些警告(包括空格,行间隙等内容)。3运行结果3.1爬取数据成果程序1代码运行过程:图3.1 程序1运行过程程序运行过程会记录时间,爬取的账号,爬取数据的进程号,以及爬取成功与否。爬取数据库结果如下:图3.2 MySQL数据库展示包含账号,呢称,性别,粉丝,关注,等级,VIP(B站VIP,0代表非会员,1代表月度会员,2代表年度会员)及上传视频数量。程序1命名为bilibili_users2.py,共计爬取了100万用户的数据,这100万用户的顺序按用户注册B站的顺序,在B

41、站的前100万用户中,其中有63个用户已经不存在,故最终有999937个有效数据。爬取速度为450条数据/1分钟,爬取过程37.1小时,最终数据大小为98MB。图3.3 程序2运行过程图3.4 程序2运行过程图3.5 程序2运行过程程序2命名为get_data.py,以上为运行结果,获取和统计MySQL的数据,包含有用户性别数据,用户付费数据,纯观众用户数量,投稿数排名前10,用户等级数据,用户粉丝量级数据,用户粉丝量排名前10数据。3.2数据分析结果图3.6 得出粉丝量排名前10的up主在B站前100万的用户中,投稿视频数排名第一的用户是VOCALOID生放送,投稿了34357个视频;粉丝排

42、名第一的是老番茄,拥有10220154位粉丝,第二为LexBurner,拥有7809016为粉丝,排名第三的是敖厂长,拥有6710893为粉丝。可以发现粉丝排名前10的很多都是大家比较熟悉的up主了。图3.7 用户活跃数据 图3.8 用户性别数据 图3.9 用户VIP数据图3.10 用户等级数据 图3.11 用户拥有粉丝量数据程序3命名为Data results,根据程序2生成的数据绘制出以上圆饼图和条形图。用户等级为0有17.5万,刚注册B站的用户只要通过答题或者填写会员邀请码就可以升级到1级,所以基本可以认定等级为0的用户是僵尸用户(在本设计中定义注册后基本没有使用账户的用户为僵尸用户),

43、除去这部分用户后剩下的82.5万为活跃用户或半活跃用户。根据数据图可以明显看出观众占了83.18%(包含僵尸用户),生产视频内容的UP主占了16.82%。性别占比中除去保密性别的用户,可以看出男女比例接近7:2。用户VIP数据可以看出,月度会员占57.07%,年费会员占21.68%,这前100万用户中付费用户占了惊人的78.76%。粉丝数量为0和粉丝数个级的用户占了大多数。B站早期的前100万用户男女比例接近7:2,用户男性占了大半,和B站刚开始以二次元,动漫,音乐吸引用户的定位有很大关系,这部分内容男性感兴趣的居多;付费会员用户占了78.76%,除去僵尸用户,付费用户的比例已经接近了100%

44、了!可以看出B站的早期用户质量都是很高的,可以认定绝大多数都是付费用户;拥有千万级和百万级粉丝的用户可以说是B站的骨干用户了,这一部分用户中,前100万的注册用户中只有49位。最后可以定义早期B站的用户群体为:二次元、动漫爱好者,多为男性,同时拥有一定的经济能力,认同内容付费且愿意为优质内容付费的一类群体。4总结在这次的毕业项目中,从整体思路和功能的实现每步工作都是自己独自进行的。之所以选择做爬虫项目,也是近来几年,关于爬虫这方面比较热门,Python作为编程语言也越来越流行,我也是对其有些感兴趣。 选题前,完全没有接触过Python和爬虫,选题后才开始学习,刚开始学习Python时也是断断续

45、续,当时也是在实习,无法完全专注于项目,寒假期间由于突然爆发的疫情,我可以安心在家专注于本设计的完成,不必考虑实习工作的事情。于是从头开始学Python,从变量、数据类型、循环到类的按部就班地学,每学完Python基础知识,就使用刚学习完的知识编写一些简单的小程序,后面认为学习基础已经没有什么大的突破了后,决定开始学习爬虫相关的知识,于是开始学习HTTP的部分知识,学习爬虫的结构等。在学习完相关基础知识后,开始尝试编写爬虫。在推进设计的时候,期间也遇到不少困难,例如程序运行不起来,一直报错,我也是去一点点排查问题,不断在网上查找资料,或者干脆就重新做。期间也是压力很大,因为论文交差有期限,一定

46、要按照计划时间内做出来。在学习爬虫结构的那时候,感觉自己的学习潜力才爆发出来,爬虫相关知识学习了近一个星期,刚开始学习进展缓慢,不知从何下手,因此很苦恼,尝试了不少内容,有点时候甚至整天想着遇到的问题,吃饭注意力都不集中,最后终于做出可以正常运行爬取数据的单线程爬虫了,在这之后又慢慢把代码模块化,把单线程爬虫改成多进程爬虫。期间从春节前夕1月23号开始,到程序完成的3月26日,历时差不多两个月。 本次设计的作品虽然称不上完美,但是做出程序后的那种成就感我很享受,从搭建开发环境到推进项目,每次遇到问题,然后花了一个上午甚至一两天才把问题解决,我都很高兴,这种有付出就有收获的感觉很舒服。编程是一个枯燥的过程,基本就是个频繁遇到问题,然后思考并解决问题的过程,这也是一个打怪升级的过程,可以不断体会到其中的快感,以及把问题解决后的那种喜悦,这些都需要真正上手体验过的人才懂。现在是互联网时代,作为通信工程的学生,利用网上的信息,信息搜索、整合、利用方面的能力很重要,需要对有效信息保持一定的敏感度,遇到问题需要独立思考,积极查阅资料,高效利用手上的资源才能更好更快地解决问题。我在想如果没有丰富的互联网资源,单凭我一点点通过书籍学习,恐怕没有那么快就可以完成本设计。感谢互联网带来的便利。参考文献1(美)Eric Matthes Python Crash Course-

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁