Python网络爬虫及数据可视化


    






    Python网络爬虫数视化




    Python网络爬虫数视化


    着4G全面普5G基站建设开展带互联网相关产业高速发展电子数爆发式增长互联网公司说海量户带巨量数挖掘金矿时数互联网公司生命线获取海量数果通工进行获取速度缓慢耗费时间长效率低痛点网络爬虫选择通计算机协助获取海量具价值数
    bilibili弹幕网站(简称B站)年年轻中较受欢迎网站户趋9000该网站户象较感兴趣网站官方爬虫较友选择该网站爬取象
    课题Python开发语言助requests库编写爬虫MySQL数库存储数续数视化中Python进行分析通程序实现高效获取数筛选数存储数分析数数视化
    关键词:网络爬虫Pythonbilibili弹幕网站数视化











    Python Web Crawler And Data Visualization

    Abstract
    With the full popularity of 4G and the construction of 5G base stations the rapid development of Internetrelated industries has brought about explosive growth of electronic data For Internet companies the 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 timeconsuming and inefficient For this pain point web crawlers are the best choice With the assistance of a computer 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 post90s or even 00s They are more interested in the user objects of the site and friendly to crawlers
    This topic uses 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 visualization
    Keywords web crawler Python bilibili barrage website data visualization















    目 录

    1 绪 1
    11 程序开发背景 1
    12 程序开发目标 1
    13 文容结构布局 1
    2程序设计实现 2
    21 程序描述 2
    22程序技术介绍 2
    221编程语言 2
    222开发工具 2
    222爬虫原理 2
    23程序开发结构 3
    231开发思路 3
    232行性分析 4
    233开发环境搭建 4
    234数库搭建 4
    235程序分析 6
    24程序调试 19
    3运行结果 19
    31 爬取数成果 19
    32数分析结果 21
    4总结 23

    参考文献 24
    谢辞 25
    附录 26



    1绪
    11程序开发背景
    世界进入21世纪移动互联网时代通手机点外卖通网络购买世界商品生活便捷力国家互联网产业快速发展网络普互联网户越越产生数量越越互联网公司说数生命线数增强户体验根数户更体验时提高公司运营效率互联网公司说海量户带巨量数挖掘金矿
    现商业竞争激烈情况企业说想分析数容易某数感兴趣群者竞争手公司想研究方公司数需采取方法手段果手动获取采集数效率低互联网时代数产生数量谓瞬息万变效率低仅影响采集数时效性质量成高昂
    需求网络爬虫应运生网络爬虫通特定规高效采集筛选网页数存储数需快速获取数群说选择
    关网络爬虫年争议断爬虫带少问题爬虫果爬取速度快会web服务器造成开销造成服务器宕机爬虫制造者会付出相关法律责外爬取方企业数进行牟取利益会带法律风险爬虫开发需方面相注意时企业反爬手段断更新升级网站旦发现爬虫会访问者IP封禁者限制访问次数甚返回假数网站允许爬虫爬取数会出台相应Robots协议告知爬虫者数允许爬取果Robots协议空默认爬取意数Robots协议爬虫者建议没约束性爬虫者然遵守总现想爬取网站数正变越越难
    12程序开发目标
    次设计目标爬虫爬取数求数量需具定代表性爬取速度计划达400条1分钟爬取时间超67时时关联数库爬取数存储数库续数库中快速查询提取数时外建立程序数库中数进行视化操作通绘制数图表数具更直观展现
    12文容结构布局
    第章 绪 :介绍程序发展开发背景开发目
    第二章 程序设计实现:介绍程序相关技术程序开发程步骤
    第三章 运行结果:展现程序运行结果数分析结果
    第四章 总结:总结程序学开发想法感悟
    2程序设计实现
    21程序描述
    设计程序三部分组成爬虫程序部分程序1根B站账号开始循环爬取网页户账号昵称性粉丝关注量会员信息等级传作品数量存入数库程序2完成读取数进行数快速查询提取工作程序3进行数视化工作
    22程序技术介绍
    221编程语言
    次设计通Python37编写网络爬虫事实CJavaC++编写出爬虫Python相较言语法更加简洁易提供量功类库直接调编写效率更高时方便续进行数分析作爬虫编写语言首选
    222开发工具
    开发语言:
    Python37

    开发台:
    PyCharm社区版PyCharm专注Python开发工具免费臃肿时拥智填充高效提示功功Python新手说非常友

    数库:
    MySQL需爬取户数条户数80B样子实际百万户数实超100MB数库方面选择命令行MySQL Community Server 8019版MySQL种关系型数库拥开源执行速度快支持种编程语言优点存储爬虫数性方面绝够
    223爬虫原理
    爬虫运作基HTTP协议解爬虫原理首先需解HTTP协议HTTP协议超文传输协议互联网应广泛种网络协议协议设计目提供发送接收页面容方法网站遵循标准HTTP协议面连接般HTTP访问程:客户端端服务器建立连接客户端端服务器提出请求服务器接收请求根请求返回相应数客户服务器断开连接
    爬虫原理简单说动服务器发送请求返回终端信息中筛选存储信息现网页容HTMLJavaScriptCSSXMLXHRJSON文件组成中HTML网页骨架JSCSS完成网站色彩交互功质爬虫浏览器原理相似户获取信息程实客户端信息通浏览器web服务器提交请求Request服务器接收请求分析请求信息返回JSCSSHTML等数客户端浏览器浏览器通解析数户前展现网页中呈现容
    基Requests库Python爬虫模拟浏览器信息通浏览器web服务器发送Request信息果web服务器正常响应会返回Response包含JSCSSHTML者JSON图片视频爬虫获取数根编写定规筛选出中价值数进行存储爬虫原理图:

    图21 爬虫原理图

    23程序开发结构
    231开发思路
    编写程序思路根Requests库官方文档编写爬虫代码方面量倾简单轻量化方面思考方便续进行修改维护
    总体结构分三部分程序分程序1程序2程序3程序1完成爬虫工作循环爬取百万户数完成储存反馈完成信息记录完成时间点程序2完成数分析程序3完成数视化工作

    图22 程序开发思路
    232行性分析
    程序Requests库进行开发爬虫Python简单易学方便快速入门手调种工具库MySQL作数库数库语言手简单难度高开发环境基Windows10进行搭建开发开发工具PyCharm免费完成项目需花费学时间项目技术行
    233开发环境搭建
    必备安装:Python37PyCharm
    存储空间配置环境变量配置
    新建程序项目
    234数库搭建
    载解压MySQL Community Server 8019命令提示符中进入MySQL根目录bin输入mysqld –install进行安装理员权限开命令提示符输入mysqld initialize –console进行激活数库设置环境变量方便次进入数库(没配置环境变量次进入数库需先进入MySQL根目录)
    命令提示符输入net start mysql开启数库进程(net stop mysql关闭数库)

    图23 MySQL启动程
    命令提示符输入mysql u root p进入数库中root户名p面填写密码边设计密码空

    图24进入MySQL操作命令行
    进入数库输入create database test创建名test数库输入use test选中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)
    )ENGINEInnoDB DEFAULT CHARSETutf8
    创建名users数表包含账号昵称性粉丝数量关注数量等级会员身份传视频数量键位昵称性字符串类型varchar账号粉丝数量关注数量等级会员身份整型bigint存储数字中键账号(mid)建立关系模型首先需确定键关系表中重约束意两条记录重复重复指两条记录完全相指通某字段区分出记录字段称键建立键数表唯标识更改账号B站中作户独信息会出现两位户账号样情况选定账号键设置非空not null果键位没存储数出现null会报错设置VARCHAR(200)表示键位汉字(汉字3字节)字母数字存储200utf8数表编码格式
    数库搭建完成续爬取数存储test数库中users数表中
    235程序分析
    程序1:
    程序1完成爬虫工作根HTTP协议首先需构造出返回目标网站url函数需解爬取相关信息谷歌浏览器进入B站

    图25 B站界面图
    进入B站需进入某户(包含up)介绍页面机点击页视频

    图26点击进入意视频
    进入视频播放页面点击up头进入up介绍页面时找需数包含户种信息包含昵称关注粉丝投稿会员信息网站网址httpsspacebilibilicom423442果尝试开户介绍页面难发现中规律网址末尾数字该户账号例现页面该户账号423442

    图27需爬取页面相关信息
    需爬取目标网站停留页面键盘F12开开发者工具(时开开发者工具没容需刷新页面重新进入网站)刷新网页重新进入网站

    图28进入浏览器开发者工具
    开发者工具ElementsconsoleSourcesNetworkPerformanceMemoryApplicationSecurityAudits里需Network

    图29进入开发者工具Headers


    图210进入开发者工具Response
    时点击开发者工具Network点击XHRXHR全称XMLHttpRequest客户端服务器交互数位开发者工具右边显示请求文件具体说明分五模块分HeadersPreviewResponseCookiesTiming步需找需爬取信息点击Response然遍历左侧NAME资源列表难找info中服务器返回Response中需信息包含账号昵称性粉丝数量关注数量等级会员身份等信息

    图211 General信息
    需找info资源请求URL进入Headers面板Headers面板中分GeneralRequest HeadersResponse HeadersQuery String ParametersGeneral中Request URL资源请求URL样通开户网页进入开发者工具解资源请求URL中mid面数字户账号
    开始编写获取资源请求URL函数结果:

    图212 bilibili_url函数
    定义名bilibili_url函数url复制粘贴前获资源请求URLmid改mid1数类型整型 mid1值会面进行定义函数作返回url值函数会续函数中调

    根HTTP协议访问网站需UserAgentUserAgent会告诉网站服务器户访问网站工具(包括浏览器计算机操作系统信息包含版核信息)包含正常完整UserAgent信息Request Headers申请访问网站般网站服务器会意该访问(存更加严格审查网站UserAgent信息需RefererCookie信息)

    图213 Request Headers信息
    刚网站开发者工具Headers模块中Request Headers中找UserAgent信息解通谷歌浏览器问win10操作系统进入请求网站服务器
    爬虫需循环重复申请访问网站需伪装机器申请访问网站UserAgent拥定规律网收集种UserAgent收收集进user_agenttxt文件中899中UserAgent图:

    图214 user_agents文件信息

    图215 UA函数
    完成系列准备工作开始编写函数定义名UA函数Python中调random库调randomrandrange()方法[0900)范围机生成实数作读取user_agenttxt行数调linecache库linecachegetline()方法读取文件方法参数文件名行数a前机生成行数return uarstrip()返回读取该行容消容中空白部分该函数作返回UserAgent函数会面调

    图216 PR函数
    PR()函数起获取IP代理作IP代理般高匿透明两种高匿IP代理访问网站服务器知通代理访问透明IP代理网站服务器知通代理访问网站代理般HTTPHTTPS两种函数原理UA()函数样randomrandrange()[0100)机生成数字作行数读取proxiestxt文件(先前建立存IP代理文件)原定计划动态IP代理技术进行爬取数网找IP代理(包括收费免费)质量参差齐程序运行程普遍稳定常爬取程中中断影响爬取效率放弃PR()放弃IP代理
    双击开资源请求URL开网页图:

    图217 爬取页面详情
    网页爬虫需获取数网站返回信息数类型JSON格式JSON全称JavaScript Object Notation种轻量级数交换格式格式布局类似Python里面数类型字典命令提示符中pip install requests载安装requests库调requests库编写函数web服务器发送数客户端先包数然发出requests库作解压服务器网页容


    图218 爬取页面404界面
    果正爬取账号已存网页存信息code等404

    图218 get_user_json函数信息
    定义函数get_user_json定义请求头head调UA函数模拟机器进行请求访问网站proxiesIP代理已放弃定义response调requestget()方法get方式请求网站服务器参数urlheaders里调raise_for_status()方法作访问网页HTTP状态码200时动产生requestsHTTPError基需判断状态码200情况批量爬取网页容时出现HTTPError异常直接跳爬完数进行处理
    定义s网站保持会话时调keep_alive方法关闭余连接防止爬虫循环快开请求网站连接函数结尾response全部信息获web服务器返回信息信息信息未筛选处理面需进行筛选步骤get_user_json函数作返回网站信息续函数中会调该函数

    图219 spider1函数信息
    get_user_json函数返回数格式JSON需筛选进行存储
    命令示符中样方法载安装jsonpathjson库编写函数spider1首先调list方法定义列表mid_list范围[110001)然for循环mid1循环遍历mid_list列表调bilibili_url函数列表值赋值函数中时获取url调get_user_json函数url赋值函数中函数获取数赋值j步jsonload方法读取json数解析数赋值data筛选数

    jsonpath方法首先code进行解析前解存账号存现象获取数前爬取页面进行判断里if判断果code 404表示账号已注销者账号存直接跳该页面记录该户已注销进行账号页面获取果code404json数中账号昵称性粉丝数量关注数量等级会员身份传视频数量筛选解析
    步数完成筛选进行存储前数库搭建完成里调MySQL官方连接库mysqlconnector调mysqlconnectorconnect()方法建立连接参数数库账户密码数库名称conncursor()方法建立游标Python程序数库间交流原理图示mysqlconnectorconnect()方法负责完成程序数库建立连接步骤游标负责完成数传输相中搬运工角色mysql嵌入数命令赋值SQL中值val应筛选数类型列表添加[0]获取筛选数列表中值executemany()方法执行MySQL命令通commit()方法提交数刷新数库完成数存储工作

    图220 程序信息写入MySQL原理图
    完成述步骤反馈完成信息调time库datetimenow()方法记录完成时间timesleep()方法计算爬虫获取数间隙时间执行完次爬取动作静止02秒循环进行爬取
    单进程爬虫已完成需进程技术加快爬虫速度调multiprocessing库spider1理建立外三爬虫函数分spider2spider3spider4函数结构容样mid_list范围相爬取范围相实现爬取账号范围时进行爬取数功

    图221 进程应
    pool()方法建立四进程apply_async()方法进程池中添加目标进程spider1spider2spider3spider4join()方法启动新进程close()方法进程完成工作关闭进程
    程序1爬虫部分完成
    程序2:
    程序2完成数库中提取数进行计算分析工作部分操作实际完全命令提示符中命令完成公式化通运行程序获取全部需数容命令写入程序获取数更加方便必反复输入命令需运行次程序拉取数

    图222 程序信息写入MySQL原理图
    数提取原理样需调mysqlconnector库前存储数差原理样需建立游标传输

    图223 程序建立MySQL游标
    接会建立简单函数获取MySQL中数

    图224 get_vip_datas函数信息
    建立get_vip_datas函数调pandasread_sql()方法读取MySQL数中参数MySQL命令先前建立MySQL连接调pandashead()函数显示读取数时印标题户付费数
    面分建立get_sex_datas()户性数提取工作get_upload_datas()读取投稿视频户数get_level_datas()获取户等级数get_fan_datas()获取户粉丝情况get_fan_sorting_datas()获取拥粉丝数量排名前20 户采样方法原理调pandasread_sql()head()完成数提取工作

    图225 执行函数
    程序调函数程序2提取数功已完成
    程序3:
    程序3需完成工作获取数进行视化计划通绘制圆饼图条形图进行展示数
    通调matplotlib库进行绘图通建立函数程序2程序3系列操作原建立函数建立函数方便续调程序趋模块化方便修改维护


    图226 upload_data函数信息
    建立名upload_data()函数绘制户中UP(仅计算投稿视频包括投稿文章)观众占首先设置字体设置字体绘图中文字体否显示英文figure()方法设置窗口title()设置标题定义labels
    标签观众up定义sizes标签占定义colors圆饼图颜色pie()方法绘制圆饼图添加前定义参数autopct参数31f表示数三位整数位浮点数startangle起始角度选择90度开始圆饼图会较美观Pctdistance06显示百分标签离圆心距离show()方法绘制图形
    面分建立sex_data()vip_data()函数绘制户性占户会员付费情况原理upload_data()样

    图227 level_data函数信息
    建立名level_data()函数展示等级户数量样先设置字体定义区间户数然barh()d方法range77区间数先前定义户数条形宽度07条形颜色steelblue然定义x坐标0500000x轴标签数条形图标题户等级数for循环users值循环标记相应条形顶部show()方法绘制图形
    建立fans_data()函数显示B站户粉丝数量级原理方法level_data()样
    24程序调试
    程序调试集中程序1爬虫部分放弃IP代理方法爬取数选择控制爬虫速度反复尝试爬虫速度爬取速度快会爬取第100条时候封IP天尝试出足够快会web服务器封禁IP址速度时爬虫进程数设置四爬虫访问网站间断时间timesleep控制02秒爬取速度会受网站服务器响应时间网速影响造成速度波动理想状态爬取速度450条1分钟爬取实际速度符合计划预期速度程序3反复尝试绘图颜色达图片起舒服止
    外完成代码部分陆续修正代码规范程序123警告(包括空格行间隙等容)

    3运行结果
    31爬取数成果
    程序1代码运行程:

    图31 程序1运行程
    程序运行程会记录时间爬取账号爬取数进程号爬取成功否
    爬取数库结果:

    图32 MySQL数库展示
    包含账号呢称性粉丝关注等级VIP(B站VIP0代表非会员1代表月度会员2代表年度会员)传视频数量
    程序1命名bilibili_users2py计爬取100万户数100万户序户注册B站序B站前100万户中中63户已存终999937效数爬取速度450条数1分钟爬取程371时终数98MB

    图33 程序2运行程

    图34 程序2运行程

    图35 程序2运行程
    程序2命名get_datapy运行结果获取统计MySQL数包含户性数户付费数纯观众户数量投稿数排名前10户等级数户粉丝量级数户粉丝量排名前10数
    32数分析结果

    图36 出粉丝量排名前10up
    B站前100万户中投稿视频数排名第户VOCALOIDの生放送投稿34357视频粉丝排名第老番茄拥10220154位粉丝第二LexBurner拥7809016粉丝排名第三敖厂长拥6710893粉丝发现粉丝排名前10家较熟悉up

    图37 户活跃数 图38 户性数 图39 户VIP数

    图310 户等级数 图311 户拥粉丝量数

    程序3命名Data results根程序2生成数绘制出圆饼图条形图
    户等级0175万刚注册B站户通答题者填写会员邀请码升级1级基认定等级0户僵尸户(设计中定义注册基没账户户僵尸户)部分户剩825万活跃户半活跃户
    根数图明显出观众占8318(包含僵尸户)生产视频容UP占1682性占中保密性户出男女例接7:2户VIP数出月度会员占5707年费会员占2168前100万户中付费户占惊7876粉丝数量0粉丝数级户占数
    B站早期前100万户男女例接7:2户男性占半B站刚开始二次元动漫音乐吸引户定位关系部分容男性感兴趣居付费会员户占7876僵尸户付费户例已接100出B站早期户质量高认定绝数付费户拥千万级百万级粉丝户说B站骨干户部分户中前100万注册户中49位
    定义早期B站户群体:二次元动漫爱者男性时拥定济力认容付费愿意优质容付费类群体
    4总结
    次毕业项目中整体思路功实现步工作独进行选择做爬虫项目年关爬虫方面较热门Python作编程语言越越流行感兴趣
    选题前完全没接触Python爬虫选题开始学刚开始学Python时断断续续时实法完全专注项目寒假期间突然爆发疫情安心家专注设计完成必考虑实工作事情头开始学Python变量数类型循环类部班学学完Python基础知识刚学完知识编写简单程序面认学基础已没什突破决定开始学爬虫相关知识开始学HTTP部分知识学爬虫结构等学完相关基础知识开始尝试编写爬虫推进设计时候期间遇少困难例程序运行起直报错点点排查问题断网查找资料者干脆重新做期间压力文交差期限定计划时间做出学爬虫结构时候感觉学潜力爆发出爬虫相关知识学星期刚开始学进展缓慢知手苦恼尝试少容点时候甚整天想着遇问题吃饭注意力集中终做出正常运行爬取数单线程爬虫慢慢代码模块化单线程爬虫改成进程爬虫期间春节前夕1月23号开始程序完成3月26日历时差两月
    次设计作品然称完美做出程序种成感享受搭建开发环境推进项目次遇问题然花午甚两天问题解决高兴种付出收获感觉舒服编程枯燥程基频繁遇问题然思考解决问题程怪升级程断体会中快感问题解决种喜悦需真正手体验懂
    现互联网时代作通信工程学生利网信息信息搜索整合利方面力重需效信息保持定敏感度遇问题需独立思考积极查阅资料高效利手资源更更快解决问题想果没丰富互联网资源单点点通书籍学恐怕没快完成设计感谢互联网带便利

    参考文献
    [1](美)Eric Matthes Python Crash CourseA HandsOnProjectBased Introduction to Programming民邮电出版社 2019
    [2](日)西泽梦路 MySQL基础教程民邮电出版社 2020
    [3](巴西)Luciano Ramalho Fluent Python民邮电出版社 2019
    [4](美)Bill Lubanovic Intrducing Python民邮电出版社 2019
    [5](美)Ryan Mitchell Web Scraping Python民邮电出版社 2018
    [6]刘瑜 Python编程零基础项目实战中国水利水电出版社 2019
    [7]唐松陈智全 Python网络爬虫入门实践机械工业出版社 2017
    [8](日)野宣 图解HTTP民邮电出版社 2019
    [9](日)竹隆史图解TCP民邮电出版社 2019
    [1 0](美)Ben Forta MySQL Crash Course民邮电出版社 2019
    [1 1](美)Wes McKinney Python for Data AnalysisData Wrangling with PandasNumpy and IPython机械工业出版社 2019
    [1 2]谢乾坤 Python爬虫开发入门实战民邮电出版社 2018




















    谢 辞

    完成毕业文意味着学生涯结束准备进入新阶段校园生活中开心快乐失落遗憾世界更加丰富认识学生活画句号际衷心感谢指导导师石碧莹老师感谢学四年中朋友帮助关怀


















    附 录

    程序源代码

    程序1:bilibili_users

    import requests
    import jsonpath
    import json
    import time
    import mysqlconnector
    from multiprocessing import Pool
    import random
    import linecache
    import datetime


    def UA()
    a randomrandrange(1 899)
    ua linecachegetline(r'user_agentstxt' a)
    return uarstrip()


    def PR()
    b randomrandrange(1 103)
    pr linecachegetline(r'proxiestxt' b)
    return prrstrip()


    def bilibili_url(mid1)
    url'httpsapibilibilicomxwebinterfacecardmid'+str(mid1)+'&jsonpjsonp&articletrue'
    return url


    def get_user_json(url)
    head {'UserAgent' UA()}
    proxies {http PR()}
    response requestsget(urlurl headershead)
    responseraise_for_status()
    s requestssession()
    skeep_alive False
    return responsecontentdecode()


    def spider1()
    mid_list list(range(960001 970001))
    for mid1 in mid_list
    url bilibili_url(mid1)
    j get_user_json(url)
    data jsonloads(j)
    code jsonpathjsonpath(data 'code')
    if code[0] 404
    print('该户已注销')
    else
    mid jsonpathjsonpath(data 'mid')
    name jsonpathjsonpath(data 'datacardname')
    sex jsonpathjsonpath(data 'sex')
    fans jsonpathjsonpath(data 'fans')
    attention jsonpathjsonpath(data 'attention')
    current_level jsonpathjsonpath(data 'current_level')
    vipType jsonpathjsonpath(data 'vipType')
    archive_count jsonpathjsonpath(data 'archive_count')
    conn mysqlconnectorconnect(user'root' password'' database'python_db')
    mycursor conncursor()
    sql INSERT INTO users ( mid name sex fans attention level vipType upload) VALUES (s s s s s s s s)
    val [
    (mid[0] name[0] sex[0] fans[0] attention[0] current_level[0] vipType[0] archive_count[0])
    ]
    mycursorexecutemany(sql val)
    conncommit()
    print(mid[0] 记录插入成功)
    print(datetimedatetimenow())
    timesleep(02)


    def spider2()
    mid_list list(range(970001 980001))
    for mid1 in mid_list
    url bilibili_url(mid1)
    j get_user_json(url)
    data jsonloads(j)
    code jsonpathjsonpath(data 'code')
    if code[0] 404
    print('该户已注销')
    else
    mid jsonpathjsonpath(data 'mid')
    name jsonpathjsonpath(data 'datacardname')
    sex jsonpathjsonpath(data 'sex')
    fans jsonpathjsonpath(data 'fans')
    attention jsonpathjsonpath(data 'attention')
    current_level jsonpathjsonpath(data 'current_level')
    vipType jsonpathjsonpath(data 'vipType')
    archive_count jsonpathjsonpath(data 'archive_count')
    conn mysqlconnectorconnect(user'root' password'' database'python_db')
    mycursor conncursor()
    sql INSERT INTO users ( mid name sex fans attention level vipType upload) VALUES (s s s s s s s s)
    val [
    (mid[0] name[0] sex[0] fans[0] attention[0] current_level[0] vipType[0] archive_count[0])
    ]
    mycursorexecutemany(sql val)
    conncommit()
    print(mid[0] 记录插入成功二)
    print(datetimedatetimenow())
    timesleep(02)


    def spider3()
    mid_list list(range(980001 990001))
    for mid1 in mid_list
    url bilibili_url(mid1)
    j get_user_json(url)
    data jsonloads(j)
    code jsonpathjsonpath(data 'code')
    if code[0] 404
    print('该户已注销')
    else
    mid jsonpathjsonpath(data 'mid')
    name jsonpathjsonpath(data 'datacardname')
    sex jsonpathjsonpath(data 'sex')
    fans jsonpathjsonpath(data 'fans')
    attention jsonpathjsonpath(data 'attention')
    current_level jsonpathjsonpath(data 'current_level')
    vipType jsonpathjsonpath(data 'vipType')
    archive_count jsonpathjsonpath(data 'archive_count')
    conn mysqlconnectorconnect(user'root' password'' database'python_db')
    mycursor conncursor()
    sql INSERT INTO users ( mid name sex fans attention level vipType upload) VALUES (s s s s s s s s)
    val [
    (mid[0] name[0] sex[0] fans[0] attention[0] current_level[0] vipType[0] archive_count[0])
    ]
    mycursorexecutemany(sql val)
    conncommit()
    print(mid[0] 记录插入成功三)
    print(datetimedatetimenow())
    timesleep(02)


    def spider4()
    mid_list list(range(990001 1000001))
    for mid1 in mid_list
    url bilibili_url(mid1)
    j get_user_json(url)
    data jsonloads(j)
    code jsonpathjsonpath(data 'code')
    if code[0] 404
    print('该户已注销')
    else
    mid jsonpathjsonpath(data 'mid')
    name jsonpathjsonpath(data 'datacardname')
    sex jsonpathjsonpath(data 'sex')
    fans jsonpathjsonpath(data 'fans')
    attention jsonpathjsonpath(data 'attention')
    current_level jsonpathjsonpath(data 'current_level')
    vipType jsonpathjsonpath(data 'vipType')
    archive_count jsonpathjsonpath(data 'archive_count')
    conn mysqlconnectorconnect(user'root' password'' database'python_db')
    mycursor conncursor()
    sql INSERT INTO users ( mid name sex fans attention level vipType upload) VALUES (s s s s s s s s)
    val [
    (mid[0] name[0] sex[0] fans[0] attention[0] current_level[0] vipType[0] archive_count[0])
    ]
    mycursorexecutemany(sql val)
    conncommit()
    print(mid[0] 记录插入成功四)
    print(datetimedatetimenow())
    timesleep(02)


    if __name__ '__main__'
    pool Pool(processes4)
    poolapply_async(spider1)
    poolapply_async(spider2)
    poolapply_async(spider3)
    poolapply_async(spider4)

    poolclose()
    pooljoin()

    程序3 get_data

    import mysqlconnector
    import pandas as pd


    conn mysqlconnectorconnect(user'root' password'' database'test')
    cursor conncursor()


    def get_vip_datas()
    sql 'select vipType as 户count(*) as 数 from users group by vipType'
    a pdread_sql(sql conn)
    b ahead(100)
    print('户付费数')
    print(b)


    def get_sex_datas()
    sql 'select sex as 性count(*) as 数 from users group by sex'
    a pdread_sql(sql conn)
    b ahead(10)
    print('户性数')
    print(b)


    def get_upload_datas()
    sql 'select count(*) as 纯观众数 from users where upload 0'
    sql2 'select * from users order by upload desc limit 10'
    a1 pdread_sql(sql conn)
    b1 a1head(10)
    a2 pdread_sql(sql2 conn)
    b2 a2head(10)
    print('纯观众户数量')
    print(b1)
    print('投稿数排名前10')
    print(b2)


    def get_level_datas()
    sql 'select level as 等级count(*) as 数 from users group by level'
    a pdread_sql(sql conn)
    b ahead(10)
    print('户等级数')
    print(b)


    def get_fan_datas()
    sql1 'select count(*) as 粉丝数0 from users where fans 0'
    sql2 'select count(*) as 粉丝数级 from users where fans between 1 and 9'
    sql3 'select count(*) as 粉丝数十级 from users where fans between 10 and 99'
    sql4 'select count(*) as 粉丝数百级 from users where fans between 100 and 999'
    sql5 'select count(*) as 粉丝数千级 from users where fans between 1000 and 9999'
    sql6 'select count(*) as 粉丝数万级 from users where fans between 10000 and 99999'
    sql7 'select count(*) as 粉丝数十万级 from users where fans between 100000 and 999999'
    sql8 'select count(*) as 粉丝数百万级 from users where fans between 1000000 and 9999999'
    sql9 'select count(*) as 粉丝数千万级 from users where fans between 10000000 and 99999999'
    print('户粉丝量级数')
    a1 pdread_sql(sql1 conn)
    b1 a1head(10)
    print(b1)
    a2 pdread_sql(sql2 conn)
    b2 a2head(10)
    print(b2)
    a3 pdread_sql(sql3 conn)
    b3 a3head(10)
    print(b3)
    a4 pdread_sql(sql4 conn)
    b4 a4head(10)
    print(b4)
    a5 pdread_sql(sql5 conn)
    b5 a5head(10)
    print(b5)
    a6 pdread_sql(sql6 conn)
    b6 a6head(10)
    print(b6)
    a7 pdread_sql(sql7 conn)
    b7 a7head(10)
    print(b7)
    a8 pdread_sql(sql8 conn)
    b8 a8head(10)
    print(b8)
    a9 pdread_sql(sql9 conn)
    b9 a9head(10)
    print(b9)


    def get_fan_sorting_datas()
    sql 'select * from users order by fans desc limit 10'
    print('户粉丝量排名前10数')
    a pdread_sql(sql conn)
    b ahead(20)
    print(b)

    get_sex_datas()
    print('\n')
    get_vip_datas()
    print('\n')
    get_upload_datas()
    print('\n')
    get_level_datas()
    print('\n')
    get_fan_datas()
    print('\n')
    get_fan_sorting_datas()

    程序3 Data_results

    import matplotlib
    from matplotlib import pyplot as plt


    def upload_data()
    pltrcParams['fontsansserif'] ['SimHei']
    pltfigure(figsize(6 6))
    plttitle(户活跃数)
    labels [u'up' u'观众']
    sizes [999937831777 831777]
    colors ['red' 'yellowgreen']
    pltpie(sizes
    labelslabels
    colorscolors
    autopct'32f'
    startangle90
    pctdistance06)
    pltaxis('equal')
    pltshow()


    def sex_data()
    pltrcParams['fontsansserif'] ['SimHei']
    pltfigure(figsize(6 6))
    plttitle(户性数)
    labels [u'男' u'女' u'保密']
    sizes [210262 66120 723555]
    colors ['red' 'yellowgreen' 'lightskyblue']
    pltpie(sizes
    labelslabels
    colorscolors
    autopct'32f'
    startangle90
    pctdistance06)
    pltaxis('equal')
    pltshow()


    def vip_data()
    pltrcParams['fontsansserif'] ['SimHei']
    pltfigure(figsize(6 6))
    plttitle(户VIP数)
    labels [u'年费会员' u'月度会员' u'非会员']
    sizes [216811 570692 212434]
    colors ['red' 'yellowgreen' 'lightskyblue']
    pltpie(sizes
    labelslabels
    colorscolors
    autopct'32f'
    startangle90
    pctdistance06)
    pltaxis('equal')
    pltshow()


    def level_data()
    matplotlibrcParams['fontsansserif'] ['SimHei']
    users [175019 125142 68111 59729 129270 394189 48477]
    pltbarh(range(7) users height07 color'steelblue')
    pltyticks(range(7) ['LV0' 'LV1' 'LV2' 'LV3' 'LV4' 'LV5' 'LV6'])
    pltxlim(0 500000)
    pltxlabel(数)
    plttitle(户等级数)
    for x y in enumerate(users)
    plttext(y x 's' y)
    pltshow()


    def fans_data()
    matplotlibrcParams['fontsansserif'] ['SimHei']
    users [568046 303696 89455 27369 8747 2159 416 48 1]
    pltbarh(range(9) users height07 color'steelblue')
    pltyticks(range(9) ['粉丝数0' '级' '十级' '百级' '千级' '万级'
    '十万级' '百万级' '千万级'])
    pltxlim(0 600000)
    pltxlabel(户数)
    plttitle(户拥粉丝数)
    for x y in enumerate(users)
    plttext(y + 02 x 01 's' y)
    pltshow()

    upload_data()
    sex_data()
    vip_data()
    level_data()
    fans_data()
    文档香网(httpswwwxiangdangnet)户传

    《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
    该内容是文档的文本内容,更好的格式请下载文档

    下载文档到电脑,查找使用更方便

    文档的实际排版效果,会与网站的显示效果略有不同!!

    需要 60 香币 [ 分享文档获得香币 ]

    下载文档

    相关文档

    空间数据可视化的认识及其应用以及空间数据可视化在虚拟环境中的应用

     一、你对空间数据可视化的认识及其应用有何看法?空间数据可视化在虚拟环境中的应用? 首先说一下空间数据可视化的由来,通过百度我知道,可视化是在数字化的背景中产生的 ,其作用是在人机...

    5个月前   
    164    0

    浅析物探生产数据可视化技术应用

    浅析物探生产数据可视化技术应用摘要:物探生产数据在很长时间内都是传统方式管理,存在上报不及时、数据不一致、整理费时费力、数据安全风险等情况,也不利于统计分析。针对这种情况开展生产数据可视化技术...

    4个月前   
    132    0

    基于Python的电影票房信息数据的爬取及分析

     基于Python的电影票房信息数据的爬取及分析 ...

    2年前   
    1366    0

    Python讲义

     Python高效强大:它有非常完善的基础代码库(标准库,开源库,自定义模块),有庞大的外围库来支持。在科学计算、人工智能、大数据、云计算等诸多领域有着丰富的应用。 Python易学易读:它...

    4年前   
    1339    0

    主题网络爬虫关键技术研究

    随着互联网的迅速发展,Web的信息量越来越大。人们往往通过搜索引擎去从互联网上搜索想要的信息,比如:百度,谷歌,搜狗等。这类搜索引擎称之为通用搜索引擎,其为所有的用户提供用户想要的所有信息。随着...

    3年前   
    552    0

    爬虫接入规范

    爬虫接入规范修订历史日期修改说明部门修改人2018.06.12大数据中心李永波数据接入需求基于数据采集需求,初步判断数据的接入源是否从业务数据库中获取。联系技术研发部同事,请求数据源接入的位置...

    4年前   
    589    0

    联通数据网网络管理

    网络管理 1. 综 述 一个没有网络管理和网络控制的网络将是低效的网络,网络也不能被称为智能的,网络的故障诊断、运行状态、收费等都很难实现。对于一个先进的网络来说,用网管软件对网络进行管理...

    12年前   
    7471    0

    《Python程序设计》题库

    第一章 基础知识1、Python安装扩展库常用的是_______工具。(pip)2、Python标准库math中用来计算平方根的函数是__________。(sqrt)3、Python程序文件扩...

    2年前   
    521    0

    Python课后题答案-20180305

    Python课后题答案 第1章 Python概述 一、 填空题 1. 对象 2. 可移植 3. 字节码 4. UTF-8 二、 判断题 1. 对 2. 对 3. 对 4....

    5年前   
    3145    0

    网络数据和信息安全管理规范

    网络数据和信息安全管理规范XXXX有限公司WHB-08网络数据和信息安全管理规范 版本号: A/0编制人: XXX 审核...

    3年前   
    995    0

    企业业务网络数据备份方案

    企业业务网络数据备份方案 各企业单位因其业务的特点,要求企业业务网络能够长时间的安全可靠的运行,以提供其工作人员和企业客户良好的经营环境。然而,随着计算机网络技术的发展和业务拓展的需要,...

    15年前   
    29197    0

    粤教版 信息技术必修1 第五章 数据处理和可视化表达 练习(含部分答案)

    第五章 数据处理和可视化表达 练习1、从互联网产生大数据的角度来看,大数据具有的特征是( )A.“4V”特征:大量、多样、低价值密度、高速B.样本渐趋于总体,精确让位于模糊,相关性重于因果C...

    10个月前   
    239    0

    《Python程序设计》题库(1)

    一、 填空题1、 Python安装扩展库常用的是_______工具。(pip)2、 Python标准库math中用来计算平方根的函数是__________。(sqrt)3、 Python程序文件...

    4年前   
    7628    0

    基于python的人脸识别系统

    随着科技的不断发展,人工智能在人类生活的应用越来越普及,作为当前最受关注的生物特征识别的方法,人脸识别在考勤、边检、安防、运输等领域有着巨大应用前景,是人工智能与计算机视觉领域的研究热点之一。

    3年前   
    2113    2

    分布式网络爬虫的设计与实现——分布式算法研究和系统架构设计

     毕 业 论 文 分布式网络爬虫的设计与实现 ——分...

    5年前   
    1078    0

    基于增量式爬虫的搜索引擎系统的设计

    随着社会的不断发展,信息增长的也越来越快,大量的数据涌现在我们面前,对于这些数据,我们对信息的查找和提取也会更加困难。如何更快速、更精准的找到我们所需要的信息,获取到有用的信息成为了很重要的一个技术。

    3年前   
    485    0

    数据结构网络补考试卷

    1、设根结点的高度为0,则高度为k的二叉树的最大结点数为( )。A) k B) 2k -1 C) 2k+1 -1 D) 2k-1 +...

    6年前   
    13607    0

    《中广数据广播网络公司代理商运营手册》

    代理商运营手册中广数据广播网络有限公司目 录一、 总则二、 代理商资格三、 代理资格申请/认证流程制度四、 产品的订货流程和保管制度 五、 销售规范与服务规范制度六、 代理商销售工...

    2年前   
    271    0

    9.12 浅析电视播出系统网络信息与数据安全

    随着互联网技术的发展,当前各行各业均开始渗透互联网技术。在电视行业当中,互联网技术的应用越来越广泛。互联网技术在为电视行业带来便利的同时,其播出系统网络信息与数据安全问题也越来越多,为了保证电视...

    5年前   
    1157    0

    Chinasec数据保密为电力内网安全服务-网络安全解决方案

    Chinasec数据保密为电力内网安全服务-网络安全解决方案  业界专家指出,近年来我国电力行业信息化发展迅速,企业内部网络和各类信息化应用系统建设逐步完善,电力企业的信息化已经从“建设期”转...

    10年前   
    389    0

    文档贡献者

    平***苏

    贡献于2021-09-04

    下载需要 60 香币 [香币充值 ]
    亲,您也可以通过 分享原创文档 来获得香币奖励!
    下载文档

    该用户的其他文档