中国队又没能在世界杯中出线,对此我准备从球员层面探求一下原因,意图通过数据分析拯救中国足球.
使用python暴力抓取懂球帝上的球员数据,如下图:
主要包括球员基本信息,以及各项能力得分。
import requests
import time
import pymysql
from bs4 import BeautifulSoup
user_agent = 'Your user_agent'
headers = {'User-Agent':user_agent}
coon = pymysql.connect(
host='localhost',
user='root',
password='123456',
db='tset',
port=3306
)
cur = coon.cursor()
sql = """
insert into player_test (cn_name,en_name,player_img,club,pos,num,country,age,birthday,height,weight,foot,score,speed,power,defense,dribble,pass_ball,shoot)
VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)
"""
url = 'https://www.dongqiudi.com/player/50025255.html'
html = requests.get(url=url, headers=headers)
soup = BeautifulSoup(html.text, 'lxml')
img_src = soup.find_all('img')[1].attrs['src']
if img_src == 'https://static1.dongqiudi.com/web-new/web/images/icon_error.png':
pass
else:
# 个人信息
cn_name = soup.h1.text # 姓名
en_name = soup.find('span',class_='en_name').text # 英文名
player_img = soup.find('img',class_='player_img').attrs['src'] # 头像地址
detail_info = soup.find('ul',class_='detail_info').find_all('li')
club = detail_info[0].text.split(':')[1].strip() # 俱乐部
pos = detail_info[1].text.split(':')[1].strip() # 场上位置
num = detail_info[2].text.split(':')[1].replace('号', '').strip() # 号码
if num == '':
num = 0
else:
num = int(num)
country = detail_info[3].text.split(':')[1].strip() # 国家
age = detail_info[4].text.split(':')[1].replace('岁', '') # 年龄
birthday = detail_info[5].text.split(':')[1] # 出生日期
height = detail_info[6].text.split(':')[1].replace('CM', '').strip() # 身高
if height == '':
height = 0
else:
height = float(height)
weight = detail_info[7].text.split(':')[1].replace('KG', '').strip() # 体重
if weight == '':
weight = 0
else:
weight = float(height)
foot = detail_info[8].text.split(':')[1].replace('脚', '').strip() # 惯用脚
# 综合能力
score = soup.find('div', id='title').text.replace('综合能力', '').strip() # 综合得分
if score == '':
score = 0
else:
score = int(weight)
speed = soup.find('div', class_='item item0').find('span').text.strip()
if speed == '':
speed = 0
else:
speed = int(weight)
power = soup.find('div', class_='item item1').find('span').text.strip()
if power == '':
power = 0
else:
power = int(weight)
defense = soup.find('div', class_='item item2').find('span').text.strip()
if defense == '':
defense = 0
else:
defense = int(weight)
dribble = soup.find('div', class_='item item3').find('span').text.strip()
if dribble == '':
dribble = 0
else:
dribble = int(weight)
pass_ball = soup.find('div', class_='item item4').find('span').text.strip()
if pass_ball == '':
pass_ball = 0
else:
pass_ball = int(weight)
shoot = soup.find('div', class_='item item5').find('span').text.strip()
if shoot == '':
shoot = 0
else:
shoot = int(weight)
cur.execute(sql, (cn_name,en_name,player_img,club,pos,num,country,age,birthday,height,weight,foot,score,speed,power,defense,dribble,pass_ball,shoot))
coon.commit()
coon.close()
爬虫过程中,值得注意的一点是,入库的时候有很多我在爬虫结果中看不到的空格和换行符,所以,为了数据的整洁,数据入库之前都要做一次去空格的处理,当然,在数据分析时使用pandas也可以。
本次使用pandas进行数据分析,首先要连接数据库:
import pandas as pd
import os
import pymysql
from sqlalchemy import create_engine
pd.set_option('max_columns',1000)
engine = create_engine('mysql+pymysql://root:123456@localhost:3306/tset?charset=utf8')
sql = 'select * from player_info'
df = pd.read_sql(sql=sql, con=engine)
df.head()
我们首先来看一下,各个国家现代足球发展的早晚和国足在世界范围内的排名有什么关系。
为了方便,我们以球员名单中,每个国家最高出生的球员作为该国家现代足球开始的时间,
令人意想不到的是第一个足球运动员竟然是美国人,出生时间是1873年,那么我们假设他25岁成名,那么现代足球开始的时间应该是1898年。除此之外,我们还可以发现,现代足球开始时间较早的基本都是欧洲及南美国家。那么中国是什么时候开始的呢,我们看一下`
df_ranks.loc[df_ranks['country']=='中国']
中国排在第76位,假设中国第一位足球运动员也是25岁成名,那么中国现代足球开始的时间是1969年,新中国刚刚成立20年。整整落后世界排名第一的美国29年。所以说,努力要趁早啊。
我们接着再从球员数量方面来看一下:
player_nums = df_player_nums.rename(columns={'id':'player_nums'})
player_nums.head(30)
看一下各国球员数量,超过一万人的国家有巴西、法国、英格兰、阿根廷,巴西以16900人次稳居榜首,也难怪各个国家的联赛都有巴西人的身影,远的不说,就说中超联赛,各个俱乐部的大腿基本都是巴西人,上海上港的胡尔克、奥斯卡、埃尔克森,广州恒大的塔利斯卡、保利尼奥、阿兰、高拉特,天津权健的帕托…
再看看中国呢:
还不错,中国登记在册的球员有1562人,排名世界43位。那么从球员数量来说,中国现在的成绩不能令人接受啊,所以,发展青训,多多培养年轻球员才是王道,现在就像现在的国足一样,就那么几个人,踢来踢去还是那么几个人,表现怎么样都能入选国家队,怎么出成绩,要知道,皇马当家前锋‘本泽马’都入选不了法国国家队啊,归根结底还是人家球员多,可选择的也多。有人说,我泱泱大国还挑不出几个能踢球的?不是人多就行,还得看能踢球的人又多少。
下面我们来看一下,各国球员数量占总人口的比例:
我们来看,排名第一的是圣马力诺,位于欧洲南部,整个国家被意大利包围,整个国家三万多人,月474名球员,每万人就有141个人是足球运动员。
再来看一下中国,
真的是泱泱大国,13亿8千万人口,1562名球员,每百万人才有一个足球运动员。放眼整个世界范围内,仅仅高于印度和巴基斯坦,不过还好,总算没有垫底,哎,等等,我记得前几天国足好像顽强的逼平了印度…
具体的其他特征,比如说各个位置上的球员、球员身高体重、得分等等,我就不一一分析了,看一下这些数据真的很有意思,想要这份数据的同学可以给我留言。