一、分析网站内容

本次爬取网站为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_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}{:^20}{:^20}{:^20}".format("英雄名","胜率","选取率","位置"))3     for i in range(len(hlist)):4         i = hlist[i]5         print("{:^20}{:^20}{:^20}{:^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_encoding11         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}{:^20}{:^20}{:^20}".format("英雄名","胜率","选取率","位置"))27     for i in range(len(hlist)):28         i = hlist[i]29         print("{:^20}{:^20}{:^20}{:^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 cha

bs4爬取的时候有两个标签相同_利用Python爬取OPGG上英雄联盟英雄胜率及选取率信息!...相关推荐

  1. python爬取王者皮肤别人可以看见效果吗_利用python爬取王者荣耀英雄皮肤图片

    前两天看到同学用python爬下来LOL的皮肤图片,感觉挺有趣的,我也想试试,于是决定来爬一爬王者荣耀的英雄和皮肤图片. 然后,简单的分析一下结构,看看是否有反爬机制. 之后,在上网查阅资料后,发现所 ...

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

    一.分析网站内容 由网站界面可以看出,右侧有英雄的详细信息,以Garen为例,胜率为53.84%,选取率为16.99%,常用位置为上单 现对网页源代码进行分析(右键鼠标在菜单中即可找到查看网页源代码) ...

  3. python 翻译库本地库_利用python爬取并翻译GEO数据库

    原标题:利用python爬取并翻译GEO数据库 GEO数据库是NCBI创建并维护的基因表达数据库,始于2000年,收录了世界各国研究机构提交的高通量基因表达数据,现芯片集数据量高达12万以上.想要从这 ...

  4. python爬取股票信息_利用Python爬取网易上证所有股票数据(代码

    利用Python爬取网易上证所有股票数据(代码 发布时间:2018-04-14 17:30, 浏览次数:1261 , 标签: Python import urllib.request import r ...

  5. python爬取电脑本地数据_利用python爬取丁香医生上新型肺炎数据,并下载到本地,附带经纬度信息...

    原标题:利用python爬取丁香医生上新型肺炎数据,并下载到本地,附带经纬度信息 新型肺炎肆虐全国,可以预知,最近一两年地理学中会有一部分论文研究新型肺炎的空间分布及与其他指标的关联分析.获取其患病人 ...

  6. 利用python爬取58同城简历数据_利用python爬取58同城简历数据-Go语言中文社区

    利用python爬取58同城简历数据 最近接到一个工作,需要获取58同城上面的简历信息(http://gz.58.com/qzyewu/).最开始想到是用python里面的scrapy框架制作爬虫.但 ...

  7. python 认证机构_利用Python爬了SIG官网BQB认证公司清单,我有一些重大发现..

    关注"无线技术联盟"提供有价值的物联网市场信息和最新的技术分析 利用Python爬取了蓝牙联盟上近一年BQB认证公司的清单,把爬到的有价值的东西写出来分享给大家. 1 蓝牙认证 产 ...

  8. python 搜索引擎_利用Python抓取搜索引擎结果

    前一段时间一直在研究如何用python抓取搜索引擎结果,在实现的过程中遇到了很多的问题,我把我遇到的问题都记录下来,希望以后遇到同样问题的童鞋不要再走弯路. 1. 搜索引擎的选取 选择一个好的搜索引擎 ...

  9. python自动排课表_利用python爬取广西科技大学教务管理信息系统班级课表

    操作环境 python 3.6.1 pycharm 5.0.3 WampServer 3.0.6 windows 8(64位) 特点 1.中途退出程序或者断网之后重连再次运行不会抓取到重复的课程表 2 ...

最新文章

  1. oracle重启一个节点集群,帮忙分析一例数据库两节点集群每隔几个月节点重启
  2. 该不该放弃嵌入式,单片机这条路?
  3. 第7篇-JAVA面向对象Ⅲ
  4. php 清除之前echo_PHP入门读书笔记(三): 常量和变量
  5. HttpServletRequestWrapper的使用
  6. 【转:理论知识】SAP在建工程转固定资产
  7. SAP ABAP如何隐藏你写的程序代码
  8. windows系统切换目录方法
  9. 下载丨6月数据库技术通讯:不规范SQL引发大量TX锁
  10. 网络协议分析(Network Protocol Analysis)之点到链路控制协议LCP
  11. Eclipse探秘-第一章-Eclipse启动(1)
  12. 百度网盘错误消息状态码大全
  13. CI框架之连接数据库
  14. 链路冗余的解决和故障的备用方案
  15. 怎么用c语言编程一个小病毒,募才网教你用C语言写个小病毒~
  16. 毒鸡汤|心情不好的时候,看一看。你会发现心情会很不好。
  17. 二分法求解方程的根java_【数值分析】利用二分法和牛顿公式求解方程的根
  18. 【固态硬盘】入门讲解
  19. 矩形中分出正方形,递归优化
  20. 乡郎桑黄:什么是桑黄?桑树的价值有哪些?

热门文章

  1. 在ASP.NET中如何运行后台任务
  2. 用Node操作Firebird。
  3. 最简单企业证书部署应用!In-House改进版!免HTTPS!
  4. 删除Win7通知区域的无效图标
  5. 我的Linux生涯之Mysql:Day01[Mysql基本使用]例
  6. Linux文件中开始处的feff,行末的^M
  7. 10深入Redis Cluster
  8. bfv同态加密_五分钟了解同态加密及三种常见方案
  9. OpenCV中IplImage与Qt中的QImage转化
  10. warning: C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失