此前写了一个爬虫基础案例---爬取王者荣耀英雄与技能介绍

python爬虫------王者荣耀英雄及技能爬取并保存信息到excelhttps://blog.csdn.net/knighthood2001/article/details/119514336?spm=1001.2014.3001.5501https://blog.csdn.net/knighthood2001/article/details/119514336?spm=1001.2014.3001.5501眼尖的人能发现,爬到的数据不完全(英雄缺少)

import requests
import re
import pandas as pdbase_url = 'https://pvp.qq.com/web201605/herolist.shtml'
headers = {'referer': 'https://pvp.qq.com/','user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
response = requests.get(base_url, headers=headers)
response.encoding = 'gbk'
r = response.text
# print(response.text)
# 输出的是网页的全部源代码# 由于英雄的网址为无序,故使用re
wangzhi = re.compile(r'<a href="herodetail/(\d*).shtml" target="_blank"')
hero_xuhao_list = re.findall(wangzhi, r)
# print(hero_xuhao_list)
df = []
# 标题栏
columns = ['英雄', '被动', '技能1', '技能2', '技能3', '技能4']
for id in hero_xuhao_list:detail_url = 'https://pvp.qq.com/web201605/herodetail/{}.shtml'.format(id)# print(detail_url)response1 = requests.get(detail_url, headers=headers)response1.encoding = 'gbk'# print(response1.text) # 获得具体网址的全部源代码names = re.compile('<label>(.*?)</label>')name = names.findall(response1.text)[0]# 没有这个[0],会使得excel中的数据是['云中君'],即中文名外面还有引号和[]skills = re.compile('<p class="skill-desc">(.*?)</p>', re.S)skill = skills.findall(response1.text)# print(skill)beidong = skill[0]# print(beidong)jineng1 = skill[1]jineng2 = skill[2]jineng3 = skill[3]jineng4 = skill[4]b = df.append([name, beidong, jineng1, jineng2, jineng3, jineng4])d = pd.DataFrame(df, columns=columns)# index=False表示输出不显示索引值d.to_excel("王者荣耀英雄与技能.xlsx", index=False)

这是链接里面的源代码,方便阅读。

目录

一、网页源代码和elements的区别

1.例子

2.原因

二、解决方案

1.寻找数据存储文件

2.处理json文件

三、爬取相关数据

四、全部代码展示

五、结果展示

六、总结


一、网页源代码和elements的区别

1.例子

首先打开王者荣耀全部英雄所在的网址

英雄资料列表页-英雄介绍-王者荣耀官方网站-腾讯游戏

右键,可以看到查看网页源代码检查-审查元素选项。

查看网页源代码(下图为部分截图)

 检查---elements

查看网页源代码检查-审查元素的页面,看着好像相同,但是如果仔细数的话,你会发现查看网页源代码中缺少了云缨-曜的英雄相关信息。

2.原因

查看源代码:别人服务器发送到浏览器的原封不动的代码。

检查-审查元素:看到的就是最终的html代码。即:源代码 + 网页js渲染 。

所以查看网页源代码检查-审查元素中的内容不一定是一样的。

而用requests模块爬取到的response.text其实是网页源代码中的内容,未被网页js渲染。

所以此前代码是根据网页源代码爬取的,存在数据的缺失。

二、解决方案

1.寻找数据存储文件

我们需要去寻找数据存在于哪个文件中,

经查找,我们发现王者荣耀英雄存储在herolist.json文件中。

2.处理json文件

herolist.json的网址是https://pvp.qq.com/web201605/js/herolist.json

网页中显示的是乱码格式,通过下面代码可以正常显示json中的中文

import requestsurl = 'https://pvp.qq.com/web201605/js/herolist.json'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
response = requests.get(url, headers=headers)
print(response.text)

herolist = json.loads(response.text)

通过json.loads()将其他类型的对象转为python对象,方便后续的处理。

注意load和loads的区别,loads()操作的是字符串,而load()操作的是文件流。

王者荣耀云缨-王者荣耀官网网站-腾讯游戏

王者荣耀艾琳-王者荣耀官网网站-腾讯游戏

可以发现json文件中的ename的数字就是构成具体英雄网页的数字,因此我们需要ename,

ename = []
for item in herolist:herolist_ename = item["ename"]ename.append(herolist_ename)

这段代码的作用是遍历herolist,将里面ename的值存储到ename列表中。

上面一行是herolist的内容,下面一行是ename列表的内容。

三、爬取相关数据

爬取到ename后,就可以遍历它,构造url进行爬取,爬取的步骤与之前一致。

python爬虫------王者荣耀英雄及技能爬取并保存信息到excel

base_url = "https://pvp.qq.com/web201605/herodetail/{}.shtml"
df = []
# 标题栏
columns = ['英雄', '被动', '技能1', '技能2', '技能3', '技能4']
a = 1
for i in ename:# print(i)true_url = base_url.format(i)r = requests.get(true_url, headers=headers)r.encoding = "gbk"names = re.compile('<label>(.*?)</label>')name = names.findall(r.text)[0]# 用来显示英雄个数print(str(a) + name)a += 1# 没有这个[0],会使得excel中的数据是['云中君'],即中文名外面还有引号和[]skills = re.compile('<p class="skill-desc">(.*?)</p>', re.S)skill = skills.findall(r.text)# 数据清洗beid = skill[0]beidong = beid.replace("被动:", "")jineng1 = skill[1]jineng2 = skill[2]jineng3 = skill[3]jineng4 = skill[4]b = df.append([name, beidong, jineng1, jineng2, jineng3, jineng4])d = pd.DataFrame(df, columns=columns)# index=False表示输出不显示索引值d.to_excel("王者荣耀英雄与技能.xlsx", index=False)
由于大部分英雄的被动文本中存在被动:,,而小部分没有这些内容,所以需要
beidong = beid.replace("被动:", "")这段代码进行数据整理。

四、全部代码展示

import requests
import json
import re
import pandas as pd
url = 'https://pvp.qq.com/web201605/js/herolist.json'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
response = requests.get(url, headers=headers)
# print(response.text)
herolist = json.loads(response.text)
# print(herolist)
ename = []
for item in herolist:herolist_ename = item["ename"]ename.append(herolist_ename)
# print(ename)base_url = "https://pvp.qq.com/web201605/herodetail/{}.shtml"
df = []
# 标题栏
columns = ['英雄', '被动', '技能1', '技能2', '技能3', '技能4']
a = 1
for i in ename:# print(i)true_url = base_url.format(i)r = requests.get(true_url, headers=headers)r.encoding = "gbk"names = re.compile('<label>(.*?)</label>')name = names.findall(r.text)[0]# 用来显示英雄个数print(str(a) + name)a += 1# 没有这个[0],会使得excel中的数据是['云中君'],即中文名外面还有引号和[]skills = re.compile('<p class="skill-desc">(.*?)</p>', re.S)skill = skills.findall(r.text)# 数据清洗beid = skill[0]beidong = beid.replace("被动:", "")jineng1 = skill[1]jineng2 = skill[2]jineng3 = skill[3]jineng4 = skill[4]b = df.append([name, beidong, jineng1, jineng2, jineng3, jineng4])d = pd.DataFrame(df, columns=columns)# index=False表示输出不显示索引值d.to_excel("王者荣耀英雄与技能.xlsx", index=False)

五、结果展示

六、总结

对于数据藏在json文件中时,首先要找到相应的文件。接下来进行解析等一系列操作。

我试过lxml和bs4解析,结果发现步骤非常繁琐,lxml解析出来经常为[]。

因此还是老老实实用re吧

经过爬取我才发现王者荣耀有106个英雄,平时上号时我都不在意这些

数据藏在json文件中,如何爬取---以王者荣耀官网为例相关推荐

  1. python爬取饿了么评论_爬取饿了么官网数据 scrapy

    展开全部 Scrapy框架的初步运用 上午刚配置好scrapy框架,32313133353236313431303231363533e58685e5aeb931333363393734下午我就迫不及待 ...

  2. Node 插件 爬取王者荣耀官网英雄信息,并生成数据库

    文章结构 打开官网看接口地址 打开官网 游戏资料里的英雄资料,并打开后台 接下来是英雄技能 技能结构路径方便抓取 jQ的获取元素这里不细说 重头戏 抓包到到数据库 全部代码 看数据库 总结 打开官网看 ...

  3. Python如何爬取《王者荣耀盒子》APP

    Python如何爬取<王者荣耀盒子>APP 1.安装fiddler 百度网盘下载链接:https://pan.baidu.com/s/1EjGfVrYpAaweitUxv7DS8w 提取码 ...

  4. python爬虫爬取王者荣耀官网全部英雄头像(源码分享)

    这篇文章为源码分享,爬虫的分析过程请阅读文章 <用python爬取王者荣耀官网的英雄皮肤海报(含源码)> 源码 import requests import json from bs4 i ...

  5. 简单20行代码爬取王者荣耀官网1080p壁纸

    简单20行代码爬取王者荣耀官网1080p壁纸 # -*- coding: utf-8 -*- # @Time : 2020/12/13 18:08 # @Author : ningfangcong i ...

  6. python爬虫爬取王者荣耀官网全部装备图片(源码分享)

    这篇文章为源码分享,爬虫的分析过程请阅读文章 <用python爬取王者荣耀官网的英雄皮肤海报(含源码)> 源码 import requests from bs4 import Beauti ...

  7. Python爬取网页所需内容+王者荣耀官网

    目标: 完成对王者荣耀游戏的所有英雄头像.皮肤等数据的内容爬取及图片下载,所涉及到的模块内容有requests.json.lxml.selenium.os等.王者荣耀英雄官网地址如下:https:// ...

  8. python爬虫遇到验证码的处理方法(以爬取中国执行信息公开网为例)

    朋友们大家好,python爬虫是在学习python时比较容易上手的学习方式,爬虫的思路简要以下几点: 1.获取需要爬取页面的网址,并且对网页内容进行分析.(主要就源代码讨论,如果我们需要的内容没有在源 ...

  9. 文件的基本操作--利用爬取的王者荣耀李信台词进行练习

    文章目录 文件的基本操作 文件打开和关闭 文件打开模式 读取/写入文件 StringIO和BytesIO 内存假文件 上下文管理 os模块 os模块 的目录及文件操作 os.path模块 小练习-爬取 ...

最新文章

  1. java1到100的数组_用java定义一个数组,长度为3: 1)循环输入数组元素值(元素值在1到100之间)...
  2. java中的多线程有什么意义_Java多线程与并发面试题(小结)
  3. Java数组与容器类分析资料--数组、List和Set、Map-asp.net关注
  4. weblogic集群部署与负载均衡_集群,负载均衡,分布式的讲解和多台服务器代码同步...
  5. python2打印字符串_Python 3基础教程2-打印语句和字符串
  6. 将 DataDirect ODBC 驱动程序与 Python 和 pyodbc 一起使用
  7. 中国互联网公司大盘点
  8. android模拟器安装教程视频教程,安卓模拟器安装教程 安卓模拟器怎么安装
  9. WPS文字表格自动填充序号
  10. 关于WPF你应该知道的2000件事
  11. 样本切分器—利用python按比例均匀切分样本
  12. word中那些奇怪的数学符号字体是怎么打出来的
  13. 区块链开发中使用的最流行的编程语言
  14. mongoTemplate结合Criteria实现分页、模糊、二级嵌套和时间范围查询等
  15. 苹果申请新专利,iPhone或取消刘海设计
  16. 我们为什么需要仿真服务机器人?
  17. iPhone 14 Pro/Max出大问题:从旧款机型传输数据后卡死黑屏无法开机!
  18. 蚁群算法Ant Colony Optimization-ACO
  19. P3084 [USACO13OPEN]照片Photo
  20. VisualSVN server 备份恢复

热门文章

  1. Prometheus客户端节点监控node_exporter
  2. Artemis流量控制(11)
  3. JAVA学习:将字符串转成数字
  4. 广域网接口规范(v.35)
  5. 全国计算机软考网络管理员考试大纲(2012)
  6. 编程设计一个基于条件风险最小的Bayes分类器
  7. ADC(一)—AD7683/AD7684/ADS8317
  8. 三十二楼层选几层最好_32楼层的选择几层最好 住楼房几层最好风水
  9. dba招生_DBA工商管理博士正在招生
  10. 动态规划:区间动态规划