利用Python爬取OPGG上英雄联盟英雄胜率及选取率信息

一、分析网站内容

本次爬取网站为opgg,网址为:” http://www.op.gg/champion/statistics

?

由网站界面可以看出,右侧有英雄的详细信息,以Garen为例,胜率为53.84%,选取率为16.99%,常用位置为上单

现对网页源代码进行分析(右键鼠标在菜单中即可找到查看网页源代码)。通过查找“53.84%”快速定位Garen所在位置

由代码可看出,英雄名、胜率及选取率都在td标签中,而每一个英雄信息在一个tr标签中,td父标签为tr标签,tr父标签为tbody标签。

对tbody标签进行查找

代码中共有5个tbody标签(tbody标签开头结尾均有”tbody”,故共有10个”tbody”),对字段内容分析,分别为上单、打野、中单、ADC、辅助信息

以上单这部分英雄为例,我们需要首先找到tbody标签,然后从中找到tr标签(每一条tr标签就是一个英雄的信息),再从子标签td标签中获取英雄的详细信息

二、爬取步骤

爬取网站内容->提取所需信息->输出英雄数据

getHTMLText(url)->fillHeroInformation(hlist,html)->printHeroInformation(hlist)

getHTMLText(url)函数是返回url链接中的html内容

fillHeroInformation(hlist,html)函数是将html中所需信息提取出存入hlist列表中

printHeroInformation(hlist)函数是输出hlist列表中的英雄信息

三、代码实现

1、getHTMLText(url)函数

1 def getHTMLText(url): #返回html文档信息
2     try:
3         r = requests.get(url,timeout = 30)
4         r.raise_for_status()
5         r.encoding = r.apparent_encoding
6         return r.text #返回html内容
7     except:
8         return ""

2、fillHeroInformation(hlist,html)函数

以一个tr标签为例,tr标签内有7个td标签,第4个td标签内属性值为"champion-index-table__name"的div标签内容为英雄名,第5个td标签内容为胜率,第6个td标签内容为选取率,将这些信息存入hlist列表中

1 def fillHeroInformation(hlist,html): #将英雄信息存入hlist列表
2     soup = BeautifulSoup(html,"html.parser")
3     for tr in soup.find(name = "tbody",attrs = "tabItem champion-trend-tier-TOP").children: #遍历上单tbody标签的儿子标签
4         if isinstance(tr,bs4.element.Tag): #判断tr是否为标签类型,去除空行
5             tds = tr(‘td‘) #查找tr标签下的td标签
6             heroName = tds[3].find(attrs = "champion-index-table__name").string #英雄名
7             winRate = tds[4].string #胜率
8             pickRate = tds[5].string #选取率
9             hlist.append([heroName,winRate,pickRate]) #将英雄信息添加到hlist列表中

3、printHeroInformation(hlist)函数

1 def printHeroInformation(hlist): #输出hlist列表信息
2     print("{:^20}\t{:^20}\t{:^20}\t{:^20}".format("英雄名","胜率","选取率","位置"))
3     for i in range(len(hlist)):
4         i = hlist[i]
5         print("{:^20}\t{:^20}\t{:^20}\t{:^20}".format(i[0],i[1],i[2],"上单"))

4、main()函数

网站地址赋值给url,新建一个hlist列表,调用getHTMLText(url)函数获得html文档信息,使用fillHeroInformation(hlist,html)函数将英雄信息存入hlist列表,再使用printHeroInformation(hlist)函数输出信息

1 def main():
2     url = "http://www.op.gg/champion/statistics"
3     hlist = []
4     html = getHTMLText(url) #获得html文档信息
5     fillHeroInformation(hlist,html) #将英雄信息写入hlist列表
6     printHeroInformation(hlist) #输出信息

四、结果演示

1、网站界面信息

2、爬取结果

五、完整代码

 1 import requests
 2 import re
 3 import bs4
 4 from bs4 import BeautifulSoup
 5
 6 def getHTMLText(url): #返回html文档信息
 7     try:
 8         r = requests.get(url,timeout = 30)
 9         r.raise_for_status()
10         r.encoding = r.apparent_encoding
11         return r.text #返回html内容
12     except:
13         return ""
14
15 def fillHeroInformation(hlist,html): #将英雄信息存入hlist列表
16     soup = BeautifulSoup(html,"html.parser")
17     for tr in soup.find(name = "tbody",attrs = "tabItem champion-trend-tier-TOP").children: #遍历上单tbody标签的儿子标签
18         if isinstance(tr,bs4.element.Tag): #判断tr是否为标签类型,去除空行
19             tds = tr(‘td‘) #查找tr标签下的td标签
20             heroName = tds[3].find(attrs = "champion-index-table__name").string #英雄名
21             winRate = tds[4].string #胜率
22             pickRate = tds[5].string #选取率
23             hlist.append([heroName,winRate,pickRate]) #将英雄信息添加到hlist列表中
24
25 def printHeroInformation(hlist): #输出hlist列表信息
26     print("{:^20}\t{:^20}\t{:^20}\t{:^20}".format("英雄名","胜率","选取率","位置"))
27     for i in range(len(hlist)):
28         i = hlist[i]
29         print("{:^20}\t{:^20}\t{:^20}\t{:^20}".format(i[0],i[1],i[2],"上单"))
30
31 def main():
32     url = "http://www.op.gg/champion/statistics"
33     hlist = []
34     html = getHTMLText(url) #获得html文档信息
35     fillHeroInformation(hlist,html) #将英雄信息写入hlist列表
36     printHeroInformation(hlist) #输出信息
37
38 main()

如果需要爬取打野、中单、ADC或者辅助信息,只需要修改

fillHeroInformation(hlist,html)函数中的
for tr in soup.find(name = "tbody",attrs = "tabItem champion-trend-tier-TOP").children语句,将attrs属性值修改为
"tabItem champion-trend-tier-JUNGLE"、"tabItem champion-trend-tier-MID"、"tabItem champion-trend-tier-ADC"、"tabItem champion-trend-tier-SUPPORT"等即可

原文地址:https://www.cnblogs.com/7758520lzy/p/12499626.html

时间: 2024-08-28 01:35:28

利用Python爬取OPGG上英雄联盟英雄胜率及选取率信息的相关文章

使用python爬取MedSci上的影响因子排名靠前的文献

使用python爬取medsci上的期刊信息,通过设定条件,然后获取相应的期刊的的影响因子排名,期刊名称,英文全称和影响因子.主要过程如下: 首先,通过分析网站http://www.medsci.cn/sci的交互过程.可以使用谷歌或火狐浏览器的“审查元素-->Network”,然后就可以看到操作页面就可以看到网站的交互信息.当在网页上点击“我要查询”时,网页会发送一个POST消息给服务器,然后,服务器返回查询结果 然后,将查询到的结果使用正则表达式提取出需要的数据. 最后将提取出的数据输出到文

python爬虫教程:《利用Python爬取表情包》

python爬虫教程:<利用Python爬取表情包>,微信没有表情包?不用愁!老师带领你使用多线程爬虫一键爬取20w的表情包~ python爬虫教程:<利用Python爬取表情包>,微信没有表情包?不用愁!老师带领你使用多线程爬虫一键爬取20w的表情包~ python爬虫教程:<利用Python爬取表情包>,微信没有表情包?不用愁!老师带领你使用多线程爬虫一键爬取20w的表情包~ python爬虫教程:<利用Python爬取表情包>,微信没有表情包?不用愁!

利用Python爬取豆瓣电影

目标:使用Python爬取豆瓣电影并保存MongoDB数据库中 我们先来看一下通过浏览器的方式来筛选某些特定的电影: 我们把URL来复制出来分析分析: https://movie.douban.com/tag/#/?sort=T&range=0,10&tags=%E7%94%B5%E5%BD%B1,%E7%88%B1%E6%83%85,%E7%BE%8E%E5%9B%BD,%E9%BB%91%E5%B8%AE 有3个字段是非常重要的: 1.sort=T 2.range=0,10 3.tag

没有内涵段子可以刷了,利用Python爬取段友之家贴吧图片和小视频(含源码)

由于最新的视频整顿风波,内涵段子APP被迫关闭,广大段友无家可归,但是最近发现了一个"段友"的app,版本更新也挺快,正在号召广大段友回家,如下图,有兴趣的可以下载看看(ps:我不是打广告的,没收广告费的) 同时,之前同事也发了一个贴吧的段子聚居地,客官稍等,马上奉上连接:段友之家?https://tieba.baidu.com/f?ie=... 然后呢,看到上面,确实好多段友在上面,于是乎,我就想爬取他们的图片和小视频,就有了这篇文章的主题: 其实吧,用Python爬取网站数据是最基

最后轻松一夏,周末利用python爬取“陈翔六点半”搞笑视频!

觉得程序员再忙也需要给自己安排一点娱乐时间,对自己好点,自己对自己不好,谁会? 自己娱乐一般会有:跑步.看电影.小视频,而小视频是最家常的娱乐方式,看得最多的小视频是「 陈翔六点半 」,咦! 拍得搞笑,演技也一流,也不乏有内涵!非常推荐大家看看. 时间太贵,我耗不起 正题 先上Python爬取小视频的效果图,duang.duang.duang.想下载什么就是什么,哈哈. 打开浏览器(电脑版,方便调试)输入微博 url 点击输入框,输入「陈翔六点半」,回车搜索 但是发现在这个页面就只用几个视频.滑

用Python爬取网页上的小说,让你从此告别书荒!

人生苦短,我用Python.有道爱看小说的小伙伴们,在看小说的期间总会遇到那么一段书荒期,在这段期间想看书却找不到,要么就是要VIP,要么就是下载不了.所以学会爬取网站上的小说是很有必要的,今天就以爬取笔趣阁小说为例,进行网页上小说的爬取.首先当我们打开笔趣阁的网页时,我们会看到很多的小说列表,如下图所示: ? 就拿爬取图上所示的小说来说,我们要进行以下的几个步骤: 爬取小说首先要构建请求表头: ? 然后我们的获取下载链接: ? 接下来我们进行文章内容的爬取: ? 最后我们将爬取来的小说写入到文

python爬取opgg的LOL英雄数据

完整源码链接: https://pan.baidu.com/s/1CWLXwlJGcq01jww8HXu3zg   (加入了部分图形界面) 由于爬取结果都是英语的版本,所以需要翻译. 另外的两个txt文件是翻译,已经完成了大部分基础的翻译,如想需要添加可以按格式填写 运行效果: 代码思路和步骤: 首先第一步,是获得所有英雄的名字和对应的url: 先观察网页的html,就能发现 <div>的data-champion-key属性中的就是英雄的名字,然后<a>的href属性就是英雄对应

利用python爬取58同城简历数据

最近接到一个工作,需要获取58同城上面的简历信息(http://gz.58.com/qzyewu/).最开始想到是用python里面的scrapy框架制作爬虫.但是在制作的时候,发现内容不能被存储在本地变量 response 中.当我通过shell载入网页后,虽然内容能被储存在response中,用xpath对我需要的数据进行获取时,返回的都是空值.考虑到数据都在源码中,于是我使用python里的beautifulSoup通过下载源码的方式去获取数据,然后插入到数据库. 需要的python包ur

利用python爬取贝壳网租房信息

最近准备换房子,在网站上寻找各种房源信息,看得眼花缭乱,于是想着能否将基本信息汇总起来便于查找,便用python将基本信息爬下来放到excel,这样一来就容易搜索了. 1. 利用lxml中的xpath提取信息 xpath是一门在 xml文档中查找信息的语言,xpath可用来在 xml 文档中对元素和属性进行遍历.对比正则表达式 re两者可以完成同样的工作,实现的功能也差不多,但xpath明显比re具有优势.具有如下优点:(1)可在xml中查找信息 :(2)支持html的查找:(3)通过元素和属性