码迷,mamicode.com
首页 > 编程语言 > 详细

世界杯来了!看我大Python分析一波!四强会是哪是个国家!

时间:2018-06-15 20:56:24      阅读:323      评论:0      收藏:0      [点我收藏+]

标签:visio   _id   sel   历史   text   frame   head   img   过程   

技术分享图片

 

毫无疑问,谁将捧起世界杯是我们最关心的问题,小编作为一名“资深”球迷自然得发挥下自己的专长,用python模拟2018世界杯,先给大家解解渴。

前言

世界杯即将开打,一切都是未知数,不过整个赛程已定,我们可以完全按照赛程模拟全部64场比赛比分10000次,得出A~H组各自的出线形势、每支队伍进四强的概率、以及最终的夺冠概率。

技术分享图片

 

技术分享图片

 

数据采集

寻找有利资源和所要采集的网站,准备开始数据采集。这次采集以球探网为例:

首先找到32个国家各自的网站链接;然后分别进入32个链接,采集各自的比赛记录数据;

解析网站,构造大体思路,创建网络爬虫实施采集。由于该网站是静态网站,所以就很容易的对网站的采集,在采集的过程中,我们首先找到,每个国家球队的链接,建立国家球队链接和国家球队名,然后进行采集给定国家队页面的所有历史比赛的数据。

在寻找国家链接的时候请注意链接的准确性,球探网每一个球队都有一个独立的链接,比如巴西的id是778,链接地址就为:http://zq.win007.com/cn/team/CTeamSche/778.html,如果对链接的不放心,可以先将链接复制到浏览器中,看是否能够找到网页。

技术分享图片

 

以下为数据采集详细代码:

 1 from __future__ importprint_function, division
 2 
 3 from selenium import webdriver
 4 
 5 import pandas as pd
 6 
 7 class Spider(object):
 8 
 9 def __init__(self):
 10 
 11 self.driver = webdriver.Chrome()
 12 
 13 self.driver.implicitly_wait(30)
 14 
 15 self.verificationErrors = []
 16 
 17 self.accept_next_alert = True
 18 
 19 def get_all_team_data(self):
 20 
 21 # 先通过世界杯主页获取所有32只队的ID(构成球队URL)Python学习交流群:125240963,群内每天分享干货,包括最新的python企业案例学习资料和零基础入门教程,欢迎各位小伙伴入群学习交流

 22 
 23 self.get_team_ids()
 24 
 25 # 循环采集每一支队的比赛数据
 26 
 27 data = []
 28 
 29 for i, [team_id, team_name] inenumerate(self.team_list):
 30 
 31 print(i, team_id, team_name)
 32 
 33 df =self.get_team_data(team_id, team_name)
 34 
 35 data.append(df)
 36 
 37 output = pd.concat(data)
 38 
 39 output.reset_index(drop=True,inplace=True)
 40 
 41 output.to_csv(‘data_2018WorldCup.csv‘,index=False, encoding=‘utf-8‘)
 42 
 43 self.driver.close()
 44 
 45 def get_team_ids(self):
 46 
 47 main_url =‘http://zq.win007.com/cn/CupMatch/75.html‘
 48 
 49 self.driver.get(main_url)
 50 
 51 teams=self.driver.find_elements_by_xpath("//td[@style=‘ padding: 0px; border: 0px; font-style: italic; font-variant: inherit; font-weight: inherit; font-stretch: inherit; font-size: inherit; line-height: inherit; font-family: inherit; vertical-align: baseline; word-break: break-word; color: rgb(64, 128, 128);">#fff;text-align:left;‘]")
 52 
 53 data = []
 54 
 55 for team in teams:
 56 
 57 team_id=
 58 
 59 int(team.find_element_by_xpath(".//a").get_attribute(‘href‘).split(‘/‘)[-1].split(‘.‘)[0])
 60 
 61 team_name =team.find_element_by_xpath(".//a").text
 62 
 63 print(team_id, team_name)
 64 
 65 data.append([team_id,team_name])
 66 
 67 self.team_list = data
 68 
 69 #self.team_list =pd.DataFrame(data, columns=[‘team_name‘, ‘team_id‘])
 70 
 71 #self.team_list.to_excel(‘国家队ID.xlsx‘, index=False)
 72 
 73 def get_team_data(self, team_id,team_name):
 74 
 75 """获取一个国家队的比赛数据。TODO:没有实现翻页Python学习交流群:125240963,群内每天分享干货,包括最新的python企业案例学习资料和零基础入门教程,欢迎各位小伙伴入群学习交流"""
 76 
 77 url =‘http://zq.win007.com/cn/team/CTeamSche/%d.html‘%team_id
 78 
 79 self.driver.get(url)
 80 
 81 table=self.driver.find_element_by_xpath("//div[@id=‘Tech_schedule‘and@class=‘data‘]")
 82 
 83 matches =table.find_elements_by_xpath(".//tr")
 84 
 85 print(len(matches))
 86 
 87 # 抓取比赛数据,并保存成DataFrame
 88 
 89 data = []
 90 
 91 for i, match inenumerate(matches):
 92 
 93 if i == 0:
 94 
 95 headers =match.find_elements_by_xpath(".//th")
 96 
 97 h1, h2, h3, h4, h5 =headers[0].text, headers[1].text, headers[2].text, headers[3].text,headers[4].text
 98 
 99 print(h1, h2, h3, h4, h5)
100 
101 continue
102 
103 try:
104 
105 info =match.find_elements_by_xpath(".//td")
106 
107 cup =str(info[0].text.encode(‘utf-8‘))
108 
109 match_time =str(info[1].text.encode(‘utf-8‘))
110 
111 home_team =str(info[2].text.encode(‘utf-8‘))
112 
113 fts = info[3].text
114 
115 #print(‘-‘, cup, ‘-‘)
116 
117 fs_A,fs_B=int(fts.split(‘-‘)[0]),int(fts.split(‘-‘)[1])
118 
119 away_team = str(info[4].text.encode(‘utf-8‘))
120 
121 print(cup, match_time,home_team, away_team, fs_A, fs_B)
122 
123 data.append([cup,match_time, home_team, away_team, fs_A, fs_B, team_name])
124 
125 except:
126 
127 break
128 
129 df = pd.DataFrame(data, columns=[‘赛事‘, ‘时间‘, ‘主队‘, ‘客队‘, ‘主队进球‘, ‘客队进球‘, ‘国家队名‘])
130 
131 return df
132 
133 if __name__ == "__main__":
134 
135 spider = Spider()
136 
137 # 第一步:抓2018世界杯球队的ID。第二部:循环抓取每一支队的比赛数据。
138 
139 spider.get_all_team_data()

进群:125240963  即可获取源码!

 

世界杯来了!看我大Python分析一波!四强会是哪是个国家!

标签:visio   _id   sel   历史   text   frame   head   img   过程   

原文地址:https://www.cnblogs.com/PY147/p/9188856.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!