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

news/2024/11/16 23:32:52/

一、分析网站内容

由网站界面可以看出,右侧有英雄的详细信息,以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_encoding6 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 inrange(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 defmain():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 #导入requests库

2 import bs4 #导入bs4库

3 from bs4 import BeautifulSoup #导入BeautifulSoup库

4

5 def getHTMLText(url): #返回html文档信息

6 try:7 r = requests.get(url,timeout = 30)8 r.raise_for_status()9 r.encoding =r.apparent_encoding10 return r.text #返回html内容

11 except:12 return ""

13

14 def fillHeroInformation(hlist,html): #将英雄信息存入hlist列表

15 soup = BeautifulSoup(html,"html.parser")16 for tr in soup.find(name = "tbody",attrs = "tabItem champion-trend-tier-TOP").children: #遍历上单tbody标签的儿子标签

17 if isinstance(tr,bs4.element.Tag): #判断tr是否为标签类型,去除空行

18 tds = tr('td') #查找tr标签下的td标签

19 heroName = tds[3].find(attrs = "champion-index-table__name").string #英雄名

20 winRate = tds[4].string #胜率

21 pickRate = tds[5].string #选取率

22 hlist.append([heroName,winRate,pickRate]) #将英雄信息添加到hlist列表中

23

24 def printHeroInformation(hlist): #输出hlist列表信息

25 print("{:^20}\t{:^20}\t{:^20}\t{:^20}".format("英雄名","胜率","选取率","位置"))26 for i inrange(len(hlist)):27 i =hlist[i]28 print("{:^20}\t{:^20}\t{:^20}\t{:^20}".format(i[0],i[1],i[2],"上单"))29

30 defmain():31 url = "http://www.op.gg/champion/statistics"

32 hlist =[]33 html = getHTMLText(url) #获得html文档信息

34 fillHeroInformation(hlist,html) #将英雄信息写入hlist列表

35 printHeroInformation(hlist) #输出信息

36

37 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"等即可

转载请声明原作者并附上原文链接!


http://www.ppmy.cn/news/675350.html

相关文章

爬虫实战(一)—利用requests、mongo、redis代理池爬取英雄联盟opgg实时英雄数据

概述 可关注微信订阅号 loak 查看实际效果。 代码已托管github,地址为:https://github.com/luozhengszj/LOLGokSpider 包括了项目的所有代码。 此篇文章,主要记录利用Python request模块爬取LOL opgg英雄实时数据,并保存到mongodb…

适合新手练手,用Python爬取OPGG里英雄联盟英雄胜率及选取率,详细讲解加注释(建议收藏练手)

今天来个简单的小项目,适合新手拿来练手,在OPGG上爬取英雄联盟里的法师,ADC,打野,辅助所有英雄的胜率及选取率,是不是感觉很高大上,但是却很简单,只要用三十多行代码就能实现&#x…

利用matlab爬虫从OPGG上整理LOL英雄信息

问题描述 OPGG是最权威的LOL数据网站,从这个网站上我们可以得到很多有关LOL的非常有用的数据,而matlab爬虫就是一个能够从网站上搜集信息的工具。这篇文章将要讲述如何利用matlab爬虫从OPGG上整理LOL英雄信息。 结果展示 英雄的信息分为三列&#xff0…

利用matlab爬虫从OPGG上整理LOL英雄胜率

问题描述 OPGG上有各位置、各英雄的胜率和登场率的统计,这篇文章将展示如何利用matlab爬虫搜集这些信息。 结果展示 代码分析 还是上次的问题,无法利用urlread语句读取OPGG中文版的信息,所以只能将网页源代码保存到txt文件中。我们将txt文件…

C++ 预处理器

预处理器是一些指令,指示编译器在实际编译之前所需完成的预处理。 所有的预处理器指令都是以井号(#)开头,只有空格字符可以出现在预处理指令之前。预处理指令不是 C 语句,所以它们不会以分号(;&#xff09…

阿里云顺利通过云原生中间件成熟度评估

前言: 2023 年 6 月 6 日,由中国信息通信研究院(以下简称“中国信通院”)承办的“ICT中国2023 高层论坛-云原生产业发展论坛”在北京召开,会上正式发布了一系列云原生领域评估结果。阿里云计算有限公司(以…

电脑出现0xC1900101错误怎么办?

在更新或安装Windows操作系统时,有时系统会提示出现了0xC1900101错误。这个错误的出现通常是源于与驱动程序相关的错误所致。那么当电脑出现0xC1900101错误时该怎么办呢? 为什么会出现错误代码0xC1900101? 通常情况下,有以下几个…

iphone11屏比例_iPhone 11屏幕和iPhone X哪个大 iPhone 11和iPhone X屏幕大小对比

目前关于下一代新iPhone X的消息已经疯传网络,至于该机有多么惊艳众说纷纭。近日有iPhone11跑分图流出,下面一起来看看iPhone 11屏幕和iPhone X哪个大。 iPhone 11 整体介绍: 渲染图中的概念iPhone 11整体的设计风格与iPhone X相似&#xff0…