Python爬取NBA虎扑球员数据
时间:2022-07-25
本文章向大家介绍Python爬取NBA虎扑球员数据,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
虎扑是一个认真而有趣的社区,每天有众多JRs在虎扑分享自己对篮球、足球、游戏电竞、运动装备、影视、汽车、数码、情感等一切人和事的见解,热闹、真实、有温度。
受害者地址
https://nba.hupu.com/stats/players
本文知识点:
- 系统分析网页性质
- 结构化的数据解析
- csv数据保存
环境介绍:
- python 3.6
- pycharm
- requests
- csv
爬虫案例的一般步骤
- 1.确定url地址(网页分析) 完成一半
- 2.发送网络请求 requests(jshtmlcss)
- 3.数据解析(筛选数据)
- 4.保存数据(本地文件数据库)
部分代码
导入工具
import requests # 第三方工具
import parsel # 数据解析工具 (css正则表达式xpath)
import csv
确定url地址(网页分析) 完成一半 (静态网页动态网页)
url = 'https://nba.hupu.com/stats/players/pts/{}'.format(page)
发送网络请求 requests(jshtmlcss)
response = requests.get(url=url)
html_data = response.text
数据解析(筛选数据)
selector = parsel.Selector(html_data)
trs = selector.xpath('//tbody/tr[not(@class="color_font1 bg_a")]')
for tr in trs:
rank = tr.xpath('./td[1]/text()').get() # 排名
player = tr.xpath('./td[2]/a/text()').get() # 球员
team = tr.xpath('./td[3]/a/text()').get() # 球队
score = tr.xpath('./td[4]/text()').get() # 得分
hit_shot = tr.xpath('./td[5]/text()').get() # 命中-出手
hit_rate = tr.xpath('./td[6]/text()').get() # 命中率
hit_three = tr.xpath('./td[7]/text()').get() # 命中-三分
three_rate = tr.xpath('./td[8]/text()').get() # 三分命中率
hit_penalty = tr.xpath('./td[9]/text()').get() # 命中-罚球
penalty_rate = tr.xpath('./td[10]/text()').get() # 罚球命中率
session = tr.xpath('./td[11]/text()').get() # 场次
playing_time = tr.xpath('./td[12]/text()').get() # 上场时间
print(rank, player, team, score, hit_shot, hit_rate, hit_three,
three_rate, hit_penalty, penalty_rate, session, playing_time)
data_dict = {
'排名': rank, '球员': player, '球队': team, '得分': score,
'命中-出手': hit_shot, '命中率': hit_rate, '命中-三分': hit_three, '三分命中率': three_rate,
'命中-罚球': hit_penalty, '罚球命中率': penalty_rate, '场次': session, '上场时间': playing_time}
csv_write.writerow(data_dict)
# 想要完整源码的同学可以关注我的公众号:松鼠爱吃饼干
# 回复“虎扑NBA”即可免费获取
运行代码,效果如下
- 轻松初探 Python 篇(四)—list tuple range 知识汇总
- CSS深入理解学习笔记之overflow
- Python爬虫实践——简单爬取我的博客
- Python爬虫入门(二)
- 在ASP.NET MVC5应用程序中快速接入QQ和新浪微博OAuth起步创建应用程序使用NUGET更新OWIN中间件启动SSL支持申请腾讯QQ的Oauth申请新浪微博的Oauth快速接入资源地址&源码
- 有趣的算法(六) ——Find-Union算法
- 有趣的算法(七) ——快速排序改进算法
- 编写你人生中第一个机器学习代码吧!
- 使用Octave来学习Machine Learning(二)
- RESTful API的十个最佳实践1. 使用名词而不是动词 2. Get方法和查询参数不应该改变资源状态3. 使用名词的复数形式 4. 为关系使用子资源 5. 使用HTTP头决定序列化格式 6. 使
- MYSQL数据库设计的一些小技巧[转载]
- 在ASP.NET 5应用程序中的跨域请求功能详解什么是“同域”添加CORS包在应用程序中配置CORSCORS策略选项跨域请求中的凭据设置先行请求的过期时间CORS是怎么样工作的先行请求
- 有趣的算法(八) ——红黑树插入算法
- 使用Donut Caching和Donut Hole Caching在ASP.NET MVC应用中缓存页面何时使用Donut CachingDonut Caching 的Nuget 包Donut Ho
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 加速Spark编译
- 自定义方便kubectl中pods的管理
- R语言入门之切尾均值(trimmed mean)与绝对中位差(median absolute deviation,mad)
- 盘一盘 Python 特别篇 20 - SciPy 稀疏矩阵
- Spark 3.0.0-SNAPSHOT Access Kerberized HDFS
- Spark Nightly Builds
- R语言入门之基本统计量
- K8S 生态周报| Istio 已修复导致 Pod 崩溃的 bug
- Spark Kubernetes 的源码分析系列 - submit
- 如何交互可视化 Roam Research 局部笔记网络?
- Spark Kubernetes 的源码分析系列 - features
- Spark Kubernetes 的源码分析系列 - scheduler
- 简易Ramdisk 镜像制作(基于Centos7+)
- 在 K8S 部署一个 Spark History Server - 篇1
- R语言入门之非参数假设检验