本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

以下文章来源于可以叫我才哥 ,作者可以叫我才哥

1.概述

《王者荣耀》上线至今5个年头了,作为这些年国内最热门的手游(没有之一),除了带来游戏娱乐之外,我们在这五周年之际,试着从他们的官网找点乐趣,学习一下Python爬虫的一些简单基础操作。

本篇将主要介绍简单的Python爬虫,包括网页分析、数据请求、数据解析和数据保存,适用于基本不带反爬的一些网站,旨在进行学习交流,请勿用作任何商业非法用途。

网页分析其实就是打开你需要请求数据的网页,然后「F12」看下这个网页源数据长啥样(如果你会web知识会更好处理,不过我没系统学过,操作多了就熟悉一点);

数据请求我们用人见人爱的「requests」库,关于该库的更详细用法大家可以去查询该链接了解(https://requests.readthedocs.io/zh_CN/latest/);

数据解析一般视请求的数据格式而定,如果请求的数据是html格式,我将介绍「bs4」「xpath」两种方式进行解析,若请求的数据是json格式,我将介绍json和eval两种方式进行解析;

数据保存这里分为两种情况,如果是图片类会用到「open」「write」函数方法,若是文本类的我会用到pandas的「to_excel」保存为表单格式。

2.网页分析

我们在概述说提到请求的数据会有html格式或者json格式,两种情况下其实对应的真实请求地址是有差异的,怎么判断呢,作为初学者我的个人经验就是去试试,本章节两种尝试方案都会介绍,大家在实操中视情况而选吧!

2.1.html页面源数据

以下面这张英雄列表页面为例,按住“「F12」”,然后点一下开发者模式中左上角的那个有鼠标箭头的图标,再在左侧选取你需要的数据区域,在开发者模式区域就会出现这个数据区域的数据信息,比如这里的“详情页地址”、“头像图片地址”和“名称”,我们需要的也算这些信息,所以可以直接请求该链接即可。

2.2.json源数据

对于局内道具列表数据,我们发现上述方案无法获取,那么这种情况下我们可以选择开发者模式中的「Network——>XHR」,然后刷新页面,在name里找啊找,一般就能到了某个数据是我们需要的。

「Preview」发现里面正是我们需要的源数据,然后在「Headers」里可以找到请求到该源数据的真实链接地址,这里数据请求方式为「get」,我们下一节会介绍。

3.数据请求

我们提到这里用 requests 库进行数据请求,requests 有两种比较常用的请求方式:post和get。刚好这里我们用的到就是get一种即可,另外请求的时候可带很多参数,比如请求头、cookie等等,具体大家查概述中链接文档了解吧。

简单的例子:

import requests
#英雄列表页地址
url = 'https://pvp.qq.com/web201605/herolist.shtml'
resp = requests.get(url)
#设置解码方式(由于请求的数据中文乱码,这里进行解码)
resp.encoding=resp.apparent_encoding 

请求到的html源数据

import requests
#局内道具详情页地址
url = 'https://pvp.qq.com/web201605/js/item.json'
resp = requests.get(url)
#设置解码方式(由于请求的数据中文乱码,这里进行解码)
resp.encoding=resp.apparent_encoding 

局内道具json数据

4.数据解析

对于不同的源数据解析方式不同,html数据解析这里介绍两种比较常用的入门级方式「bs4」「xpath」,对于「json」数据其实相对来说更好处理,这里介绍两种简单的方式利用「json」「eval」

4.1.html数据解析

4.1.1.bs4

Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库,它能够通过你喜欢的转换器实现惯用的文档导航、查找、修改文档的方式。

更多操作详情大家可以去看(https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/)~

看html数据结构,我们可以找到想要的数据在「ul」节点,满足「class="herolist clearfix"「下的全部」li」节点中。对于bs4来说,可以用「find_all」方法去定位。(更多解释见代码注释哦)

# bs4 解析
from bs4 import BeautifulSoup
# 先将请求到的数据转化为BeautifulSoup对象
soup = BeautifulSoup(resp.text,'html.parser')
# 定位全部的满足 class = "herolist clearfix",由于class是关键字所以这里用class_
# 返回结果只有1个的列表,因此取索引0
ul = soup.find_all('ul', class_="herolist clearfix")[0]
# 定位 ul 下面全部的 li,li中藏着我们需要的数据信息
lis = ul.find_all('li')
# 创建一个空表用于存储数据
herolists = []
# 遍历全部的li
for li in lis:# 创建空字典,用于存储 英雄列表信息herolist = {}# get_text() 获取节点下面的文案部分herolist['英雄名称'] = li.get_text()# get() 获取 具体值,英雄详情页地址在 li节点的子节点a下面herolist['英雄详情页'] = li.find('a').get('href')herolist['英雄头像'] = li.find('a').find('img').get('src')herolists.append(herolist)

数据解析结果

4.1.2.xpath

XPath 是一门在 XML 文档中查找信息的语言,可用来在 XML 文档中对元素和属性进行遍历。更多语法操作可以查看(https://www.w3school.com.cn/xpath/xpath_syntax.asp )。

由于本质过程上和bs4差不多,只是语法函数操作不太同,这里不做详细介绍,直接看代码了解下先。

# xpath 解析
from lxml import etreehtml = etree.HTML(resp.text)
html_ul = html.xpath('//ul[@class="herolist clearfix"]')[0]
html_lis = html_ul.xpath('./li')
herolists = []for html_li in html_lis:herolist = {}herolist['英雄名称'] = html_li.xpath('./a/text()')[0]herolist['英雄详情页'] = html_li.xpath('./a/@href')[0]herolist['英雄头像'] = html_li.xpath('./a/img/@src')[0]herolists.append(herolist)

4.2.json数据解析

在请求的数据是json格式时,直接查看数据类型发现是str,如下:

我们可采用json.loads()和eval方法将其转化为列表的形式,该列表和上面html数据解析后的结果格式一样。

import jsonjs = resp.text
# json.loads() 处理
li = json.loads(js)
# 直接 eval() 处理
lis = eval(js)

json数据解析

5.数据保存

对于图片类数据,请求图片数据然后写入本地保存;对于文本数据表单,转化为dataframe类型存为excel文件(需要用到pandas库)。

5.1.存储图片类数据

我们在英雄列表中有英雄头像数据,这里演示将英雄头像数据存入本地。

# 遍历数据解析中 英雄列表
for li in herolists:# 获取英雄头像网页地址# 如'//game.gtimg.cn/images/yxzj/img201606/heroimg/506/506.jpg'head_url = li['英雄头像']# 组合 https:url = f'https:{head_url}'# 获取该英雄名称,用于赋值给图片文件名称head_name = li['英雄名称']# 请求图片数据head_data = requests.get(url)# 设置存储图片的全路径head_path = f'保存地址'# 打开空文件写入图片数据open(head_path, 'wb').write(head_data.content)

英雄头像图片数据存储

5.2.文本数据表单存储

import pandas as pd
# 列表转化为dataframe类型
df = pd.DataFrame(li)

数据预览

# 由于数据中存在一些网页符号,作为 菜鸟的我只会用replace简单替换
df['des1'] = df['des1'].str.replace('<br>',',').str.replace('<p>','').str.replace('</p>','')
df['des2'] = df['des2'].str.replace('<br>',',').str.replace('<p>','').str.replace('</p>','')
# 存为表格,页签取名为“装备数据信息list”
df.to_excel(r'地址',index=False,sheet_name='装备数据信息list')

道具文本数据表单

6.你也来玩一玩

标题中我们提到王者荣耀五周年,有102个英雄和326个皮肤。其实,在英雄列表中我们抓取的html数据中只有93个,如何获取全部的呢?大家可以参考json数据请求的方式去找一找,如何根据相关数据的特点(比如英雄头像地址里变动的其实是 英雄的id,英雄详情页也是)。

大家可以看看新英雄和新皮肤,如何爬取相关数据试试。

https://pvp.qq.com/coming/v2/

6.1.英雄新皮肤数

上线五年,一共93个英雄新出过皮肤,其中貂蝉、花木兰和孙悟空新增皮肤最多,高达5个!!

在93个英雄中,大部分只新增过1个皮肤~

6.2.新增皮肤上线时间

从上线月份来看,1月是英雄上线高峰,这个和1月大部分为春节月有关,毕竟这款产品春节也是最赚钱的。

从上线年份来看,2015年其实10月底产品才上线,所以整体新增皮肤不多,16及17年游戏高速增长期吧,团队产能并没有明显提高?所以在18年之后,团队大了,新增皮肤蹭的飞涨!

6.3.王者英雄产能

2015年10月28日王者首发时,有33个英雄,大家熟悉的亚瑟、项羽、安琪拉等都是第一批。截止到现在,5年时间内新增英雄69个。

从上线月份来看,2、8、11和1月份是新英雄出的最多的,为啥啊?

从上线年份来看,2015年上线2个月内上线7个新英雄,很快,毕竟存了很多量嘛。随后可以看到2016年新英雄产出是高峰,随后逐年降低的趋势,为啥?「毕竟英雄设计是非常非常费脑袋的啊!!」

王者荣耀五周年,爬取102个英雄+326款皮肤,分析上线时间相关推荐

  1. 王者荣耀五周年,带你入门Python爬虫基础操作(102个英雄+326款皮肤)

    简单的目录 1.概述 2.网页分析 2.1.html页面源数据 2.2.json源数据 3.数据请求 4.数据解析 4.1.html数据解析 4.1.1.bs4 4.1.2.xpath 4.2.jso ...

  2. 王者荣耀五周年,带你入门Python爬虫基础操作!

    1.概述 <王者荣耀>上线至今5个年头了,作为这些年国内最热门的手游(没有之一),除了带来游戏娱乐之外,我们在这五周年之际,试着从他们的官网找点乐趣,学习一下Python爬虫的一些简单基础 ...

  3. 200 switching to ascii mode_王者荣耀:小伙200买V8号,146款皮肤还有1神秘道具,一封邮件哭了...

    阅读本文前,请您先点击上面蓝色字体"关注",这样您就可以继续免费收到最新文章了.每天都有分享,完全是免费订阅,请放心关注.                              ...

  4. 爬虫 -- 王者荣耀爬虫,爬取每个英雄的皮肤图片

    前言 抓取的重点是找到每个英雄对应的id编号 分析 先观察单个英雄的单张皮肤图片的url(如下图马超的两张皮肤图片所示) 马超一共有三个皮肤(经典算第一张), 每张皮肤的url分别是 第一张: htt ...

  5. rog live service是什么_王者荣耀五周年好礼送不停,玩游戏还能白嫖ROG游戏手机3?...

    随着近日<王者荣耀>"同聚营地 筑梦王者"五周年活动的正式开启,相信不少玩家会有这样的感受,不知不觉王者荣耀已经走过了五个年头.虽然面世已有五载,但玩家对于这款MOBA ...

  6. 【爬虫】-爬取LOL所有英雄图片和皮肤图片(使用Python2)

    分析过程: url:https://lol.qq.com/data/info-heros.shtml 没分析请求之前准备用xpath取出每个英雄的链接然后再发送请求取出英雄皮肤图片和皮肤名,该方案可行 ...

  7. 王者服务器维修2019年四月份,2019王者荣耀4周年庆版本更新时间介绍[图]

    2019王者荣耀4周年庆什么时候更新大家知道吗?这次王者荣耀四周年庆版本更新很大,除了之前爆料的地图路线变化,还有青蛇白蛇新皮肤等等系列活动,下面给大家带来2019王者荣耀4周年庆时间一览,一起来看看 ...

  8. 数据结构思维 第十五章 爬取维基百科

    第十五章 爬取维基百科 原文:Chapter 15 Crawling Wikipedia 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 在本章中,我展示了上一个练习的解决方案, ...

  9. 2048和多地址入口_王者荣耀2020周年庆返场皮肤投票入口 周年庆皮肤返场投票地址...

    王者荣耀2020周年庆返场皮肤投票官方预告是10月16日开启的,今天就是10月16日,但是游戏里面并没有投票入口,那么周年庆返场皮肤在哪里投票?小编马上就给大家分享一下最新投票地址. 王者荣耀2020 ...

最新文章

  1. 基于时间卷积神经网络的概率预测
  2. 【ASP.NET Core】EF Core 模型与数据库的创建
  3. 现代支付行号查询系统_旅游景区智能管理系统-景区智能导航软件
  4. Python 的类的下划线命名有什么不同?
  5. Uabntu安装AWVS11以及破解
  6. 南京工程学院 DSP期末复习
  7. html5 dicom opensource,基于HTML5标准的Dicom图像显示.pdf
  8. IBM SPSS Statistics如何快速有效地录入数据
  9. 土方回填施工方案范本_联投土方回填施工方案样本
  10. 便捷式计算机无线功能按钮,便携式wifi热点怎么用 便携式WI-FI热点使用步骤【详解】...
  11. 五线舵机驱动程序_16路舵机驱动板程序使用说明
  12. Linux之RPM包的命名规则和包的依赖性
  13. boost::object_pool使用
  14. BootStrap 4种图片形式 image形式 img-rounded img-circle img-thumbnail img-responsive
  15. 通达信资金净流入公式_资金净流入选股公式源码-通达信公式 -程序化交易(CXH99.COM)...
  16. 中国做SaaS为什么这么难?
  17. 关于高数中导数极限与函数可导性的关系
  18. 中国工业级过氧化氢市场深度研究分析报告
  19. 处理器运算能力单位-TOPS
  20. 核高基引发的Linux口水战

热门文章

  1. 直升机机电管理系统软件测试方法研究
  2. Excel中超级表和普通表的转换及特性
  3. 【笔记】css修饰2
  4. yj.微信小程序 接收蓝牙设备返回的16进制数据转为中文显示问题
  5. 功能性游戏介绍 《SHENZHEN I/O》
  6. MICROSOFT EXCEL DRIVER未发现数据源名称并且未指定默认驱动程序
  7. 如何高效设计游戏——游戏兵种平衡的技巧与思路
  8. spring boot配置文件自定义加密配置
  9. 为什么需要对芯片的leakage功耗特别关注
  10. JAVA计算机毕业设计成都某4S店销售管理系统Mybatis+系统+数据库+调试部署