Alvaro commited on
Commit
5b07ff1
·
1 Parent(s): f53103e
example_event.html ADDED
@@ -0,0 +1,1673 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
3
+ <!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
4
+ <!--[if IE 8]> <html class="no-js ie8 lt-ie9"> <![endif]-->
5
+ <!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
6
+ <head>
7
+ <meta charset="utf-8">
8
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
9
+ <title>
10
+ Stats | UFC
11
+ </title>
12
+ <meta name="description" content="">
13
+ <meta name="viewport" content="">
14
+ <link rel="stylesheet" href="/blocks/main.css?ver=647583">
15
+ <script src="/js/vendor/modernizr-2.6.2.min.js"></script>
16
+ <script>
17
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
18
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
19
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
20
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
21
+
22
+ ga('create', 'UA-2855164-1', 'auto');
23
+ ga('send', 'pageview');
24
+ </script>
25
+ </head>
26
+ <body class="b-page" data-link="home">
27
+ <header class="b-head">
28
+ <div class="b-head__nav-bar">
29
+ <div class="l-page__container">
30
+ <a class="b-head__logo" href="/">
31
+ <img src="http://1e49bc5171d173577ecd-1323f4090557a33db01577564f60846c.r80.cf1.rackcdn.com/ufc-stats-logo.png"
32
+ alt="">
33
+ </a>
34
+ <menu class="b-head__menu">
35
+
36
+ <li class="b-head__item b-head__item_state_current">
37
+ <a class="b-head__menu-link" href="/statistics/events/">
38
+ EVENTS & FIGHTS
39
+ </a>
40
+ </li>
41
+
42
+
43
+ <li class="b-head__item">
44
+ <a class="b-head__menu-link" href="/statistics/fighters">
45
+ FIGHTERS
46
+ </a>
47
+ </li>
48
+
49
+
50
+ <li class="b-head__item">
51
+ <a class="b-head__menu-link" href="http://statleaders.ufc.com" target="_blank">
52
+ STAT LEADERS
53
+ </a>
54
+ </li>
55
+
56
+ </menu>
57
+ </div>
58
+ </div>
59
+ <div class="b-head__sub-nav">
60
+ </div>
61
+
62
+ </header>
63
+ <section class="b-statistics__section_details">
64
+ <script type="text/javascript">
65
+ function doNav(url) {
66
+ document.location.href = url;
67
+
68
+ }
69
+ </script>
70
+ <div class="l-page__container">
71
+ <h2 class="b-content__title">
72
+
73
+ <span class="b-content__title-highlight">
74
+ UFC 317: Topuria vs. Oliveira
75
+ </span>
76
+ </h2>
77
+
78
+ <div class="b-fight-details">
79
+ <div class="b-list__info-box b-list__info-box_style_large-width">
80
+ <ul class="b-list__box-list">
81
+ <li class="b-list__box-list-item">
82
+ <i class="b-list__box-item-title">
83
+ Date:
84
+ </i>
85
+ June 28, 2025
86
+ </li>
87
+ <li class="b-list__box-list-item">
88
+ <i class="b-list__box-item-title">
89
+ Location:
90
+ </i>
91
+
92
+ Las Vegas, Nevada, USA
93
+ </li>
94
+ </ul>
95
+ </div>
96
+
97
+ <div class="b-statistics__table-preview">
98
+ <i class="b-statistics__table-preview-item">
99
+ Click on a row below to see in-depth event stats.
100
+ </i>
101
+ <i class="b-statistics__table-preview-item">
102
+ Fight, Perf, Sub, and KO of the Night Bonuses:
103
+ <img class="b-statistics__table-status" src="http://1e49bc5171d173577ecd-1323f4090557a33db01577564f60846c.r80.cf1.rackcdn.com/fight.png" alt="">
104
+ <img class="b-statistics__table-status" src="http://1e49bc5171d173577ecd-1323f4090557a33db01577564f60846c.r80.cf1.rackcdn.com/perf.png" alt="">
105
+ <img class="b-statistics__table-status" src="http://1e49bc5171d173577ecd-1323f4090557a33db01577564f60846c.r80.cf1.rackcdn.com/sub.png" alt="">
106
+ <img class="b-statistics__table-status" src="http://1e49bc5171d173577ecd-1323f4090557a33db01577564f60846c.r80.cf1.rackcdn.com/ko.png" alt="">
107
+
108
+ </i>
109
+ </div>
110
+
111
+ <table class="b-fight-details__table b-fight-details__table_style_margin-top b-fight-details__table_type_event-details js-fight-table" style="display: table;">
112
+ <thead class="b-fight-details__table-head">
113
+ <tr class="b-fight-details__table-row">
114
+ <th class="b-fight-details__table-col">
115
+ W/L
116
+ </th>
117
+ <th class="b-fight-details__table-col l-page_align_left">
118
+ Fighter
119
+ </th>
120
+ <th class="b-fight-details__table-col">
121
+ Kd
122
+ </th>
123
+ <th class="b-fight-details__table-col">
124
+ Str
125
+ </th>
126
+ <th class="b-fight-details__table-col">
127
+ Td
128
+ </th>
129
+ <th class="b-fight-details__table-col">
130
+ Sub
131
+ </th>
132
+ <th class="b-fight-details__table-col l-page_align_left">
133
+ Weight class
134
+ </th>
135
+ <th class="b-fight-details__table-col l-page_align_left">
136
+ Method
137
+ </th>
138
+ <th class="b-fight-details__table-col">
139
+ Round
140
+ </th>
141
+ <th class="b-fight-details__table-col">
142
+ Time
143
+ </th>
144
+ </tr>
145
+ </thead>
146
+ <tbody class="b-fight-details__table-body">
147
+
148
+
149
+
150
+
151
+
152
+ <tr class="b-fight-details__table-row b-fight-details__table-row__hover js-fight-details-click" onclick="doNav('http://ufcstats.com/fight-details/7a64d63e12618ba7')" data-link="http://ufcstats.com/fight-details/7a64d63e12618ba7">
153
+ <td class="b-fight-details__table-col b-fight-details__table-col_style_align-top">
154
+
155
+
156
+
157
+ <p class="b-fight-details__table-text">
158
+ <a class="b-flag b-flag_style_green" href="http://ufcstats.com/fight-details/7a64d63e12618ba7"><i class="b-flag__inner"><i class="b-flag__text">win<i class="b-flag__corner"></i><i class="b-flag__corner-substrate"></i></i></i></a>
159
+ </p>
160
+ <br>
161
+
162
+
163
+
164
+
165
+
166
+ </td>
167
+ <td style="width:100px" class="b-fight-details__table-col l-page_align_left">
168
+
169
+ <p class="b-fight-details__table-text">
170
+
171
+ <a class="b-link b-link_style_black" href="http://ufcstats.com/fighter-details/54f64b5e283b0ce7">
172
+ Ilia Topuria
173
+ </a>
174
+
175
+ </p>
176
+
177
+ <p class="b-fight-details__table-text">
178
+
179
+ <a class="b-link b-link_style_black" href="http://ufcstats.com/fighter-details/07225ba28ae309b6">
180
+ Charles Oliveira
181
+ </a>
182
+ </p>
183
+
184
+
185
+ </td>
186
+ <td class="b-fight-details__table-col">
187
+
188
+
189
+ <p class="b-fight-details__table-text">
190
+
191
+ 1
192
+ </p>
193
+
194
+ <p class="b-fight-details__table-text">
195
+
196
+ 0
197
+ </p>
198
+
199
+ </td>
200
+ <td class="b-fight-details__table-col">
201
+
202
+
203
+
204
+ <p class="b-fight-details__table-text">
205
+
206
+ 21
207
+
208
+ </p>
209
+
210
+ <p class="b-fight-details__table-text">
211
+
212
+
213
+ 9
214
+ </p>
215
+
216
+ </td>
217
+ <td class="b-fight-details__table-col">
218
+
219
+
220
+ <p class="b-fight-details__table-text">
221
+
222
+ 0
223
+ </p>
224
+
225
+ <p class="b-fight-details__table-text">
226
+
227
+ 0
228
+ </p>
229
+
230
+ </td>
231
+ <td class="b-fight-details__table-col">
232
+
233
+
234
+ <p class="b-fight-details__table-text">
235
+
236
+ 0
237
+ </p>
238
+
239
+ <p class="b-fight-details__table-text">
240
+
241
+ 0
242
+ </p>
243
+
244
+ </td>
245
+ <td class="b-fight-details__table-col l-page_align_left">
246
+ <p class="b-fight-details__table-text">
247
+ Lightweight<br>
248
+ <img src="http://1e49bc5171d173577ecd-1323f4090557a33db01577564f60846c.r80.cf1.rackcdn.com/belt.png" alt=""><img style="margin-right:2px;" src="http://1e49bc5171d173577ecd-1323f4090557a33db01577564f60846c.r80.cf1.rackcdn.com/perf.png" alt="">
249
+ </p>
250
+
251
+ </td>
252
+ <td class="b-fight-details__table-col l-page_align_left">
253
+ <p class="b-fight-details__table-text">
254
+
255
+
256
+
257
+ KO/TKO
258
+
259
+ </p>
260
+
261
+ <p class="b-fight-details__table-text">
262
+ Punch
263
+ </p>
264
+ </td>
265
+ <td class="b-fight-details__table-col">
266
+ <p class="b-fight-details__table-text">
267
+
268
+ 1
269
+ </p>
270
+ </td>
271
+ <td class="b-fight-details__table-col">
272
+ <p class="b-fight-details__table-text">
273
+ 2:27
274
+ </p>
275
+ </td>
276
+ </tr>
277
+
278
+
279
+
280
+
281
+ <tr class="b-fight-details__table-row b-fight-details__table-row__hover js-fight-details-click" onclick="doNav('http://ufcstats.com/fight-details/8308464729ea7c40')" data-link="http://ufcstats.com/fight-details/8308464729ea7c40">
282
+ <td class="b-fight-details__table-col b-fight-details__table-col_style_align-top">
283
+
284
+
285
+
286
+ <p class="b-fight-details__table-text">
287
+ <a class="b-flag b-flag_style_green" href="http://ufcstats.com/fight-details/8308464729ea7c40"><i class="b-flag__inner"><i class="b-flag__text">win<i class="b-flag__corner"></i><i class="b-flag__corner-substrate"></i></i></i></a>
288
+ </p>
289
+ <br>
290
+
291
+
292
+
293
+
294
+
295
+ </td>
296
+ <td style="width:100px" class="b-fight-details__table-col l-page_align_left">
297
+
298
+ <p class="b-fight-details__table-text">
299
+
300
+ <a class="b-link b-link_style_black" href="http://ufcstats.com/fighter-details/a0f0004aadf10b71">
301
+ Alexandre Pantoja
302
+ </a>
303
+
304
+ </p>
305
+
306
+ <p class="b-fight-details__table-text">
307
+
308
+ <a class="b-link b-link_style_black" href="http://ufcstats.com/fighter-details/853eb0dd5c0e2149">
309
+ Kai Kara-France
310
+ </a>
311
+ </p>
312
+
313
+
314
+ </td>
315
+ <td class="b-fight-details__table-col">
316
+
317
+
318
+ <p class="b-fight-details__table-text">
319
+
320
+ 0
321
+ </p>
322
+
323
+ <p class="b-fight-details__table-text">
324
+
325
+ 0
326
+ </p>
327
+
328
+ </td>
329
+ <td class="b-fight-details__table-col">
330
+
331
+
332
+
333
+ <p class="b-fight-details__table-text">
334
+
335
+ 42
336
+
337
+ </p>
338
+
339
+ <p class="b-fight-details__table-text">
340
+
341
+
342
+ 38
343
+ </p>
344
+
345
+ </td>
346
+ <td class="b-fight-details__table-col">
347
+
348
+
349
+ <p class="b-fight-details__table-text">
350
+
351
+ 3
352
+ </p>
353
+
354
+ <p class="b-fight-details__table-text">
355
+
356
+ 0
357
+ </p>
358
+
359
+ </td>
360
+ <td class="b-fight-details__table-col">
361
+
362
+
363
+ <p class="b-fight-details__table-text">
364
+
365
+ 2
366
+ </p>
367
+
368
+ <p class="b-fight-details__table-text">
369
+
370
+ 0
371
+ </p>
372
+
373
+ </td>
374
+ <td class="b-fight-details__table-col l-page_align_left">
375
+ <p class="b-fight-details__table-text">
376
+ Flyweight<br>
377
+ <img src="http://1e49bc5171d173577ecd-1323f4090557a33db01577564f60846c.r80.cf1.rackcdn.com/belt.png" alt="">
378
+ </p>
379
+
380
+ </td>
381
+ <td class="b-fight-details__table-col l-page_align_left">
382
+ <p class="b-fight-details__table-text">
383
+
384
+
385
+
386
+ SUB
387
+
388
+ </p>
389
+
390
+ <p class="b-fight-details__table-text">
391
+ Rear Naked Choke
392
+ </p>
393
+ </td>
394
+ <td class="b-fight-details__table-col">
395
+ <p class="b-fight-details__table-text">
396
+
397
+ 3
398
+ </p>
399
+ </td>
400
+ <td class="b-fight-details__table-col">
401
+ <p class="b-fight-details__table-text">
402
+ 1:55
403
+ </p>
404
+ </td>
405
+ </tr>
406
+
407
+
408
+
409
+
410
+ <tr class="b-fight-details__table-row b-fight-details__table-row__hover js-fight-details-click" onclick="doNav('http://ufcstats.com/fight-details/f722b96ae6862843')" data-link="http://ufcstats.com/fight-details/f722b96ae6862843">
411
+ <td class="b-fight-details__table-col b-fight-details__table-col_style_align-top">
412
+
413
+
414
+
415
+ <p class="b-fight-details__table-text">
416
+ <a class="b-flag b-flag_style_green" href="http://ufcstats.com/fight-details/f722b96ae6862843"><i class="b-flag__inner"><i class="b-flag__text">win<i class="b-flag__corner"></i><i class="b-flag__corner-substrate"></i></i></i></a>
417
+ </p>
418
+ <br>
419
+
420
+
421
+
422
+
423
+
424
+ </td>
425
+ <td style="width:100px" class="b-fight-details__table-col l-page_align_left">
426
+
427
+ <p class="b-fight-details__table-text">
428
+
429
+ <a class="b-link b-link_style_black" href="http://ufcstats.com/fighter-details/17e97649403ba428">
430
+ Joshua Van
431
+ </a>
432
+
433
+ </p>
434
+
435
+ <p class="b-fight-details__table-text">
436
+
437
+ <a class="b-link b-link_style_black" href="http://ufcstats.com/fighter-details/6e15f63b6c2e2c15">
438
+ Brandon Royval
439
+ </a>
440
+ </p>
441
+
442
+
443
+ </td>
444
+ <td class="b-fight-details__table-col">
445
+
446
+
447
+ <p class="b-fight-details__table-text">
448
+
449
+ 1
450
+ </p>
451
+
452
+ <p class="b-fight-details__table-text">
453
+
454
+ 0
455
+ </p>
456
+
457
+ </td>
458
+ <td class="b-fight-details__table-col">
459
+
460
+
461
+
462
+ <p class="b-fight-details__table-text">
463
+
464
+ 204
465
+
466
+ </p>
467
+
468
+ <p class="b-fight-details__table-text">
469
+
470
+
471
+ 215
472
+ </p>
473
+
474
+ </td>
475
+ <td class="b-fight-details__table-col">
476
+
477
+
478
+ <p class="b-fight-details__table-text">
479
+
480
+ 0
481
+ </p>
482
+
483
+ <p class="b-fight-details__table-text">
484
+
485
+ 0
486
+ </p>
487
+
488
+ </td>
489
+ <td class="b-fight-details__table-col">
490
+
491
+
492
+ <p class="b-fight-details__table-text">
493
+
494
+ 0
495
+ </p>
496
+
497
+ <p class="b-fight-details__table-text">
498
+
499
+ 0
500
+ </p>
501
+
502
+ </td>
503
+ <td class="b-fight-details__table-col l-page_align_left">
504
+ <p class="b-fight-details__table-text">
505
+ Flyweight<br>
506
+ <img style="margin-right:2px;" src="http://1e49bc5171d173577ecd-1323f4090557a33db01577564f60846c.r80.cf1.rackcdn.com/fight.png" alt="">
507
+ </p>
508
+
509
+ </td>
510
+ <td class="b-fight-details__table-col l-page_align_left">
511
+ <p class="b-fight-details__table-text">
512
+
513
+
514
+
515
+ U-DEC
516
+
517
+ </p>
518
+
519
+ <p class="b-fight-details__table-text">
520
+
521
+ </p>
522
+ </td>
523
+ <td class="b-fight-details__table-col">
524
+ <p class="b-fight-details__table-text">
525
+
526
+ 3
527
+ </p>
528
+ </td>
529
+ <td class="b-fight-details__table-col">
530
+ <p class="b-fight-details__table-text">
531
+ 5:00
532
+ </p>
533
+ </td>
534
+ </tr>
535
+
536
+
537
+
538
+
539
+ <tr class="b-fight-details__table-row b-fight-details__table-row__hover js-fight-details-click" onclick="doNav('http://ufcstats.com/fight-details/1ea9ad3b6e1cba79')" data-link="http://ufcstats.com/fight-details/1ea9ad3b6e1cba79">
540
+ <td class="b-fight-details__table-col b-fight-details__table-col_style_align-top">
541
+
542
+
543
+
544
+ <p class="b-fight-details__table-text">
545
+ <a class="b-flag b-flag_style_green" href="http://ufcstats.com/fight-details/1ea9ad3b6e1cba79"><i class="b-flag__inner"><i class="b-flag__text">win<i class="b-flag__corner"></i><i class="b-flag__corner-substrate"></i></i></i></a>
546
+ </p>
547
+ <br>
548
+
549
+
550
+
551
+
552
+
553
+ </td>
554
+ <td style="width:100px" class="b-fight-details__table-col l-page_align_left">
555
+
556
+ <p class="b-fight-details__table-text">
557
+
558
+ <a class="b-link b-link_style_black" href="http://ufcstats.com/fighter-details/08af939f41b5a57b">
559
+ Beneil Dariush
560
+ </a>
561
+
562
+ </p>
563
+
564
+ <p class="b-fight-details__table-text">
565
+
566
+ <a class="b-link b-link_style_black" href="http://ufcstats.com/fighter-details/b6452706b373eea1">
567
+ Renato Moicano
568
+ </a>
569
+ </p>
570
+
571
+
572
+ </td>
573
+ <td class="b-fight-details__table-col">
574
+
575
+
576
+ <p class="b-fight-details__table-text">
577
+
578
+ 0
579
+ </p>
580
+
581
+ <p class="b-fight-details__table-text">
582
+
583
+ 1
584
+ </p>
585
+
586
+ </td>
587
+ <td class="b-fight-details__table-col">
588
+
589
+
590
+
591
+ <p class="b-fight-details__table-text">
592
+
593
+ 56
594
+
595
+ </p>
596
+
597
+ <p class="b-fight-details__table-text">
598
+
599
+
600
+ 31
601
+ </p>
602
+
603
+ </td>
604
+ <td class="b-fight-details__table-col">
605
+
606
+
607
+ <p class="b-fight-details__table-text">
608
+
609
+ 5
610
+ </p>
611
+
612
+ <p class="b-fight-details__table-text">
613
+
614
+ 0
615
+ </p>
616
+
617
+ </td>
618
+ <td class="b-fight-details__table-col">
619
+
620
+
621
+ <p class="b-fight-details__table-text">
622
+
623
+ 0
624
+ </p>
625
+
626
+ <p class="b-fight-details__table-text">
627
+
628
+ 0
629
+ </p>
630
+
631
+ </td>
632
+ <td class="b-fight-details__table-col l-page_align_left">
633
+ <p class="b-fight-details__table-text">
634
+ Lightweight<br>
635
+
636
+ </p>
637
+
638
+ </td>
639
+ <td class="b-fight-details__table-col l-page_align_left">
640
+ <p class="b-fight-details__table-text">
641
+
642
+
643
+
644
+ U-DEC
645
+
646
+ </p>
647
+
648
+ <p class="b-fight-details__table-text">
649
+
650
+ </p>
651
+ </td>
652
+ <td class="b-fight-details__table-col">
653
+ <p class="b-fight-details__table-text">
654
+
655
+ 3
656
+ </p>
657
+ </td>
658
+ <td class="b-fight-details__table-col">
659
+ <p class="b-fight-details__table-text">
660
+ 5:00
661
+ </p>
662
+ </td>
663
+ </tr>
664
+
665
+
666
+
667
+
668
+ <tr class="b-fight-details__table-row b-fight-details__table-row__hover js-fight-details-click" onclick="doNav('http://ufcstats.com/fight-details/f6a3c78f15ff26c7')" data-link="http://ufcstats.com/fight-details/f6a3c78f15ff26c7">
669
+ <td class="b-fight-details__table-col b-fight-details__table-col_style_align-top">
670
+
671
+
672
+
673
+ <p class="b-fight-details__table-text">
674
+ <a class="b-flag b-flag_style_green" href="http://ufcstats.com/fight-details/f6a3c78f15ff26c7"><i class="b-flag__inner"><i class="b-flag__text">win<i class="b-flag__corner"></i><i class="b-flag__corner-substrate"></i></i></i></a>
675
+ </p>
676
+ <br>
677
+
678
+
679
+
680
+
681
+
682
+ </td>
683
+ <td style="width:100px" class="b-fight-details__table-col l-page_align_left">
684
+
685
+ <p class="b-fight-details__table-text">
686
+
687
+ <a class="b-link b-link_style_black" href="http://ufcstats.com/fighter-details/6e743a33d56bdaa4">
688
+ Payton Talbott
689
+ </a>
690
+
691
+ </p>
692
+
693
+ <p class="b-fight-details__table-text">
694
+
695
+ <a class="b-link b-link_style_black" href="http://ufcstats.com/fighter-details/9256f591b30c073e">
696
+ Felipe Lima
697
+ </a>
698
+ </p>
699
+
700
+
701
+ </td>
702
+ <td class="b-fight-details__table-col">
703
+
704
+
705
+ <p class="b-fight-details__table-text">
706
+
707
+ 0
708
+ </p>
709
+
710
+ <p class="b-fight-details__table-text">
711
+
712
+ 0
713
+ </p>
714
+
715
+ </td>
716
+ <td class="b-fight-details__table-col">
717
+
718
+
719
+
720
+ <p class="b-fight-details__table-text">
721
+
722
+ 59
723
+
724
+ </p>
725
+
726
+ <p class="b-fight-details__table-text">
727
+
728
+
729
+ 26
730
+ </p>
731
+
732
+ </td>
733
+ <td class="b-fight-details__table-col">
734
+
735
+
736
+ <p class="b-fight-details__table-text">
737
+
738
+ 0
739
+ </p>
740
+
741
+ <p class="b-fight-details__table-text">
742
+
743
+ 3
744
+ </p>
745
+
746
+ </td>
747
+ <td class="b-fight-details__table-col">
748
+
749
+
750
+ <p class="b-fight-details__table-text">
751
+
752
+ 0
753
+ </p>
754
+
755
+ <p class="b-fight-details__table-text">
756
+
757
+ 0
758
+ </p>
759
+
760
+ </td>
761
+ <td class="b-fight-details__table-col l-page_align_left">
762
+ <p class="b-fight-details__table-text">
763
+ Bantamweight<br>
764
+
765
+ </p>
766
+
767
+ </td>
768
+ <td class="b-fight-details__table-col l-page_align_left">
769
+ <p class="b-fight-details__table-text">
770
+
771
+
772
+
773
+ U-DEC
774
+
775
+ </p>
776
+
777
+ <p class="b-fight-details__table-text">
778
+
779
+ </p>
780
+ </td>
781
+ <td class="b-fight-details__table-col">
782
+ <p class="b-fight-details__table-text">
783
+
784
+ 3
785
+ </p>
786
+ </td>
787
+ <td class="b-fight-details__table-col">
788
+ <p class="b-fight-details__table-text">
789
+ 5:00
790
+ </p>
791
+ </td>
792
+ </tr>
793
+
794
+
795
+
796
+
797
+ <tr class="b-fight-details__table-row b-fight-details__table-row__hover js-fight-details-click" onclick="doNav('http://ufcstats.com/fight-details/958522de54ccc536')" data-link="http://ufcstats.com/fight-details/958522de54ccc536">
798
+ <td class="b-fight-details__table-col b-fight-details__table-col_style_align-top">
799
+
800
+
801
+
802
+ <p class="b-fight-details__table-text">
803
+ <a class="b-flag b-flag_style_green" href="http://ufcstats.com/fight-details/958522de54ccc536"><i class="b-flag__inner"><i class="b-flag__text">win<i class="b-flag__corner"></i><i class="b-flag__corner-substrate"></i></i></i></a>
804
+ </p>
805
+ <br>
806
+
807
+
808
+
809
+
810
+
811
+ </td>
812
+ <td style="width:100px" class="b-fight-details__table-col l-page_align_left">
813
+
814
+ <p class="b-fight-details__table-text">
815
+
816
+ <a class="b-link b-link_style_black" href="http://ufcstats.com/fighter-details/d1c65d2cf2925ddd">
817
+ Gregory Rodrigues
818
+ </a>
819
+
820
+ </p>
821
+
822
+ <p class="b-fight-details__table-text">
823
+
824
+ <a class="b-link b-link_style_black" href="http://ufcstats.com/fighter-details/0a1942069c9ad6b6">
825
+ Jack Hermansson
826
+ </a>
827
+ </p>
828
+
829
+
830
+ </td>
831
+ <td class="b-fight-details__table-col">
832
+
833
+
834
+ <p class="b-fight-details__table-text">
835
+
836
+ 1
837
+ </p>
838
+
839
+ <p class="b-fight-details__table-text">
840
+
841
+ 0
842
+ </p>
843
+
844
+ </td>
845
+ <td class="b-fight-details__table-col">
846
+
847
+
848
+
849
+ <p class="b-fight-details__table-text">
850
+
851
+ 18
852
+
853
+ </p>
854
+
855
+ <p class="b-fight-details__table-text">
856
+
857
+
858
+ 30
859
+ </p>
860
+
861
+ </td>
862
+ <td class="b-fight-details__table-col">
863
+
864
+
865
+ <p class="b-fight-details__table-text">
866
+
867
+ 0
868
+ </p>
869
+
870
+ <p class="b-fight-details__table-text">
871
+
872
+ 0
873
+ </p>
874
+
875
+ </td>
876
+ <td class="b-fight-details__table-col">
877
+
878
+
879
+ <p class="b-fight-details__table-text">
880
+
881
+ 0
882
+ </p>
883
+
884
+ <p class="b-fight-details__table-text">
885
+
886
+ 0
887
+ </p>
888
+
889
+ </td>
890
+ <td class="b-fight-details__table-col l-page_align_left">
891
+ <p class="b-fight-details__table-text">
892
+ Middleweight<br>
893
+ <img style="margin-right:2px;" src="http://1e49bc5171d173577ecd-1323f4090557a33db01577564f60846c.r80.cf1.rackcdn.com/perf.png" alt="">
894
+ </p>
895
+
896
+ </td>
897
+ <td class="b-fight-details__table-col l-page_align_left">
898
+ <p class="b-fight-details__table-text">
899
+
900
+
901
+
902
+ KO/TKO
903
+
904
+ </p>
905
+
906
+ <p class="b-fight-details__table-text">
907
+ Punch
908
+ </p>
909
+ </td>
910
+ <td class="b-fight-details__table-col">
911
+ <p class="b-fight-details__table-text">
912
+
913
+ 1
914
+ </p>
915
+ </td>
916
+ <td class="b-fight-details__table-col">
917
+ <p class="b-fight-details__table-text">
918
+ 4:21
919
+ </p>
920
+ </td>
921
+ </tr>
922
+
923
+
924
+
925
+
926
+ <tr class="b-fight-details__table-row b-fight-details__table-row__hover js-fight-details-click" onclick="doNav('http://ufcstats.com/fight-details/2f523b757f7f33a2')" data-link="http://ufcstats.com/fight-details/2f523b757f7f33a2">
927
+ <td class="b-fight-details__table-col b-fight-details__table-col_style_align-top">
928
+
929
+
930
+
931
+ <p class="b-fight-details__table-text">
932
+ <a class="b-flag b-flag_style_green" href="http://ufcstats.com/fight-details/2f523b757f7f33a2"><i class="b-flag__inner"><i class="b-flag__text">win<i class="b-flag__corner"></i><i class="b-flag__corner-substrate"></i></i></i></a>
933
+ </p>
934
+ <br>
935
+
936
+
937
+
938
+
939
+
940
+ </td>
941
+ <td style="width:100px" class="b-fight-details__table-col l-page_align_left">
942
+
943
+ <p class="b-fight-details__table-text">
944
+
945
+ <a class="b-link b-link_style_black" href="http://ufcstats.com/fighter-details/7d6ceff6747f2de2">
946
+ Jose Delgado
947
+ </a>
948
+
949
+ </p>
950
+
951
+ <p class="b-fight-details__table-text">
952
+
953
+ <a class="b-link b-link_style_black" href="http://ufcstats.com/fighter-details/41cc71cbf210e0fe">
954
+ Hyder Amil
955
+ </a>
956
+ </p>
957
+
958
+
959
+ </td>
960
+ <td class="b-fight-details__table-col">
961
+
962
+
963
+ <p class="b-fight-details__table-text">
964
+
965
+ 1
966
+ </p>
967
+
968
+ <p class="b-fight-details__table-text">
969
+
970
+ 0
971
+ </p>
972
+
973
+ </td>
974
+ <td class="b-fight-details__table-col">
975
+
976
+
977
+
978
+ <p class="b-fight-details__table-text">
979
+
980
+ 9
981
+
982
+ </p>
983
+
984
+ <p class="b-fight-details__table-text">
985
+
986
+
987
+ 3
988
+ </p>
989
+
990
+ </td>
991
+ <td class="b-fight-details__table-col">
992
+
993
+
994
+ <p class="b-fight-details__table-text">
995
+
996
+ 0
997
+ </p>
998
+
999
+ <p class="b-fight-details__table-text">
1000
+
1001
+ 0
1002
+ </p>
1003
+
1004
+ </td>
1005
+ <td class="b-fight-details__table-col">
1006
+
1007
+
1008
+ <p class="b-fight-details__table-text">
1009
+
1010
+ 0
1011
+ </p>
1012
+
1013
+ <p class="b-fight-details__table-text">
1014
+
1015
+ 0
1016
+ </p>
1017
+
1018
+ </td>
1019
+ <td class="b-fight-details__table-col l-page_align_left">
1020
+ <p class="b-fight-details__table-text">
1021
+ Featherweight<br>
1022
+
1023
+ </p>
1024
+
1025
+ </td>
1026
+ <td class="b-fight-details__table-col l-page_align_left">
1027
+ <p class="b-fight-details__table-text">
1028
+
1029
+
1030
+
1031
+ KO/TKO
1032
+
1033
+ </p>
1034
+
1035
+ <p class="b-fight-details__table-text">
1036
+ Knee
1037
+ </p>
1038
+ </td>
1039
+ <td class="b-fight-details__table-col">
1040
+ <p class="b-fight-details__table-text">
1041
+
1042
+ 1
1043
+ </p>
1044
+ </td>
1045
+ <td class="b-fight-details__table-col">
1046
+ <p class="b-fight-details__table-text">
1047
+ 0:26
1048
+ </p>
1049
+ </td>
1050
+ </tr>
1051
+
1052
+
1053
+
1054
+
1055
+ <tr class="b-fight-details__table-row b-fight-details__table-row__hover js-fight-details-click" onclick="doNav('http://ufcstats.com/fight-details/815ff62ca8e217be')" data-link="http://ufcstats.com/fight-details/815ff62ca8e217be">
1056
+ <td class="b-fight-details__table-col b-fight-details__table-col_style_align-top">
1057
+
1058
+
1059
+
1060
+ <p class="b-fight-details__table-text">
1061
+ <a class="b-flag b-flag_style_green" href="http://ufcstats.com/fight-details/815ff62ca8e217be"><i class="b-flag__inner"><i class="b-flag__text">win<i class="b-flag__corner"></i><i class="b-flag__corner-substrate"></i></i></i></a>
1062
+ </p>
1063
+ <br>
1064
+
1065
+
1066
+
1067
+
1068
+
1069
+ </td>
1070
+ <td style="width:100px" class="b-fight-details__table-col l-page_align_left">
1071
+
1072
+ <p class="b-fight-details__table-text">
1073
+
1074
+ <a class="b-link b-link_style_black" href="http://ufcstats.com/fighter-details/68d4a891e5cf2029">
1075
+ Tracy Cortez
1076
+ </a>
1077
+
1078
+ </p>
1079
+
1080
+ <p class="b-fight-details__table-text">
1081
+
1082
+ <a class="b-link b-link_style_black" href="http://ufcstats.com/fighter-details/36541f1e6c5d4955">
1083
+ Viviane Araujo
1084
+ </a>
1085
+ </p>
1086
+
1087
+
1088
+ </td>
1089
+ <td class="b-fight-details__table-col">
1090
+
1091
+
1092
+ <p class="b-fight-details__table-text">
1093
+
1094
+ 0
1095
+ </p>
1096
+
1097
+ <p class="b-fight-details__table-text">
1098
+
1099
+ 0
1100
+ </p>
1101
+
1102
+ </td>
1103
+ <td class="b-fight-details__table-col">
1104
+
1105
+
1106
+
1107
+ <p class="b-fight-details__table-text">
1108
+
1109
+ 65
1110
+
1111
+ </p>
1112
+
1113
+ <p class="b-fight-details__table-text">
1114
+
1115
+
1116
+ 22
1117
+ </p>
1118
+
1119
+ </td>
1120
+ <td class="b-fight-details__table-col">
1121
+
1122
+
1123
+ <p class="b-fight-details__table-text">
1124
+
1125
+ 3
1126
+ </p>
1127
+
1128
+ <p class="b-fight-details__table-text">
1129
+
1130
+ 0
1131
+ </p>
1132
+
1133
+ </td>
1134
+ <td class="b-fight-details__table-col">
1135
+
1136
+
1137
+ <p class="b-fight-details__table-text">
1138
+
1139
+ 1
1140
+ </p>
1141
+
1142
+ <p class="b-fight-details__table-text">
1143
+
1144
+ 0
1145
+ </p>
1146
+
1147
+ </td>
1148
+ <td class="b-fight-details__table-col l-page_align_left">
1149
+ <p class="b-fight-details__table-text">
1150
+ Women's Flyweight<br>
1151
+
1152
+ </p>
1153
+
1154
+ </td>
1155
+ <td class="b-fight-details__table-col l-page_align_left">
1156
+ <p class="b-fight-details__table-text">
1157
+
1158
+
1159
+
1160
+ U-DEC
1161
+
1162
+ </p>
1163
+
1164
+ <p class="b-fight-details__table-text">
1165
+
1166
+ </p>
1167
+ </td>
1168
+ <td class="b-fight-details__table-col">
1169
+ <p class="b-fight-details__table-text">
1170
+
1171
+ 3
1172
+ </p>
1173
+ </td>
1174
+ <td class="b-fight-details__table-col">
1175
+ <p class="b-fight-details__table-text">
1176
+ 5:00
1177
+ </p>
1178
+ </td>
1179
+ </tr>
1180
+
1181
+
1182
+
1183
+
1184
+ <tr class="b-fight-details__table-row b-fight-details__table-row__hover js-fight-details-click" onclick="doNav('http://ufcstats.com/fight-details/d7be78c400e7e0f9')" data-link="http://ufcstats.com/fight-details/d7be78c400e7e0f9">
1185
+ <td class="b-fight-details__table-col b-fight-details__table-col_style_align-top">
1186
+
1187
+
1188
+
1189
+ <p class="b-fight-details__table-text">
1190
+ <a class="b-flag b-flag_style_green" href="http://ufcstats.com/fight-details/d7be78c400e7e0f9"><i class="b-flag__inner"><i class="b-flag__text">win<i class="b-flag__corner"></i><i class="b-flag__corner-substrate"></i></i></i></a>
1191
+ </p>
1192
+ <br>
1193
+
1194
+
1195
+
1196
+
1197
+
1198
+ </td>
1199
+ <td style="width:100px" class="b-fight-details__table-col l-page_align_left">
1200
+
1201
+ <p class="b-fight-details__table-text">
1202
+
1203
+ <a class="b-link b-link_style_black" href="http://ufcstats.com/fighter-details/809bd1a871491508">
1204
+ Terrance McKinney
1205
+ </a>
1206
+
1207
+ </p>
1208
+
1209
+ <p class="b-fight-details__table-text">
1210
+
1211
+ <a class="b-link b-link_style_black" href="http://ufcstats.com/fighter-details/19c591115a58982c">
1212
+ Viacheslav Borshchev
1213
+ </a>
1214
+ </p>
1215
+
1216
+
1217
+ </td>
1218
+ <td class="b-fight-details__table-col">
1219
+
1220
+
1221
+ <p class="b-fight-details__table-text">
1222
+
1223
+ 0
1224
+ </p>
1225
+
1226
+ <p class="b-fight-details__table-text">
1227
+
1228
+ 0
1229
+ </p>
1230
+
1231
+ </td>
1232
+ <td class="b-fight-details__table-col">
1233
+
1234
+
1235
+
1236
+ <p class="b-fight-details__table-text">
1237
+
1238
+ 1
1239
+
1240
+ </p>
1241
+
1242
+ <p class="b-fight-details__table-text">
1243
+
1244
+
1245
+ 2
1246
+ </p>
1247
+
1248
+ </td>
1249
+ <td class="b-fight-details__table-col">
1250
+
1251
+
1252
+ <p class="b-fight-details__table-text">
1253
+
1254
+ 1
1255
+ </p>
1256
+
1257
+ <p class="b-fight-details__table-text">
1258
+
1259
+ 0
1260
+ </p>
1261
+
1262
+ </td>
1263
+ <td class="b-fight-details__table-col">
1264
+
1265
+
1266
+ <p class="b-fight-details__table-text">
1267
+
1268
+ 2
1269
+ </p>
1270
+
1271
+ <p class="b-fight-details__table-text">
1272
+
1273
+ 0
1274
+ </p>
1275
+
1276
+ </td>
1277
+ <td class="b-fight-details__table-col l-page_align_left">
1278
+ <p class="b-fight-details__table-text">
1279
+ Lightweight<br>
1280
+
1281
+ </p>
1282
+
1283
+ </td>
1284
+ <td class="b-fight-details__table-col l-page_align_left">
1285
+ <p class="b-fight-details__table-text">
1286
+
1287
+
1288
+
1289
+ SUB
1290
+
1291
+ </p>
1292
+
1293
+ <p class="b-fight-details__table-text">
1294
+ Guillotine Choke
1295
+ </p>
1296
+ </td>
1297
+ <td class="b-fight-details__table-col">
1298
+ <p class="b-fight-details__table-text">
1299
+
1300
+ 1
1301
+ </p>
1302
+ </td>
1303
+ <td class="b-fight-details__table-col">
1304
+ <p class="b-fight-details__table-text">
1305
+ 0:55
1306
+ </p>
1307
+ </td>
1308
+ </tr>
1309
+
1310
+
1311
+
1312
+
1313
+ <tr class="b-fight-details__table-row b-fight-details__table-row__hover js-fight-details-click" onclick="doNav('http://ufcstats.com/fight-details/9bff9fe298e63357')" data-link="http://ufcstats.com/fight-details/9bff9fe298e63357">
1314
+ <td class="b-fight-details__table-col b-fight-details__table-col_style_align-top">
1315
+
1316
+
1317
+
1318
+ <p class="b-fight-details__table-text">
1319
+ <a class="b-flag b-flag_style_green" href="http://ufcstats.com/fight-details/9bff9fe298e63357"><i class="b-flag__inner"><i class="b-flag__text">win<i class="b-flag__corner"></i><i class="b-flag__corner-substrate"></i></i></i></a>
1320
+ </p>
1321
+ <br>
1322
+
1323
+
1324
+
1325
+
1326
+
1327
+ </td>
1328
+ <td style="width:100px" class="b-fight-details__table-col l-page_align_left">
1329
+
1330
+ <p class="b-fight-details__table-text">
1331
+
1332
+ <a class="b-link b-link_style_black" href="http://ufcstats.com/fighter-details/85497ffd934ecf7e">
1333
+ Jacobe Smith
1334
+ </a>
1335
+
1336
+ </p>
1337
+
1338
+ <p class="b-fight-details__table-text">
1339
+
1340
+ <a class="b-link b-link_style_black" href="http://ufcstats.com/fighter-details/d8da10db80131bec">
1341
+ Niko Price
1342
+ </a>
1343
+ </p>
1344
+
1345
+
1346
+ </td>
1347
+ <td class="b-fight-details__table-col">
1348
+
1349
+
1350
+ <p class="b-fight-details__table-text">
1351
+
1352
+ 0
1353
+ </p>
1354
+
1355
+ <p class="b-fight-details__table-text">
1356
+
1357
+ 0
1358
+ </p>
1359
+
1360
+ </td>
1361
+ <td class="b-fight-details__table-col">
1362
+
1363
+
1364
+
1365
+ <p class="b-fight-details__table-text">
1366
+
1367
+ 46
1368
+
1369
+ </p>
1370
+
1371
+ <p class="b-fight-details__table-text">
1372
+
1373
+
1374
+ 34
1375
+ </p>
1376
+
1377
+ </td>
1378
+ <td class="b-fight-details__table-col">
1379
+
1380
+
1381
+ <p class="b-fight-details__table-text">
1382
+
1383
+ 2
1384
+ </p>
1385
+
1386
+ <p class="b-fight-details__table-text">
1387
+
1388
+ 0
1389
+ </p>
1390
+
1391
+ </td>
1392
+ <td class="b-fight-details__table-col">
1393
+
1394
+
1395
+ <p class="b-fight-details__table-text">
1396
+
1397
+ 1
1398
+ </p>
1399
+
1400
+ <p class="b-fight-details__table-text">
1401
+
1402
+ 0
1403
+ </p>
1404
+
1405
+ </td>
1406
+ <td class="b-fight-details__table-col l-page_align_left">
1407
+ <p class="b-fight-details__table-text">
1408
+ Welterweight<br>
1409
+
1410
+ </p>
1411
+
1412
+ </td>
1413
+ <td class="b-fight-details__table-col l-page_align_left">
1414
+ <p class="b-fight-details__table-text">
1415
+
1416
+
1417
+
1418
+ SUB
1419
+
1420
+ </p>
1421
+
1422
+ <p class="b-fight-details__table-text">
1423
+ Rear Naked Choke
1424
+ </p>
1425
+ </td>
1426
+ <td class="b-fight-details__table-col">
1427
+ <p class="b-fight-details__table-text">
1428
+
1429
+ 2
1430
+ </p>
1431
+ </td>
1432
+ <td class="b-fight-details__table-col">
1433
+ <p class="b-fight-details__table-text">
1434
+ 4:03
1435
+ </p>
1436
+ </td>
1437
+ </tr>
1438
+
1439
+
1440
+
1441
+
1442
+ <tr class="b-fight-details__table-row b-fight-details__table-row__hover js-fight-details-click" onclick="doNav('http://ufcstats.com/fight-details/043172689e415438')" data-link="http://ufcstats.com/fight-details/043172689e415438">
1443
+ <td class="b-fight-details__table-col b-fight-details__table-col_style_align-top">
1444
+
1445
+
1446
+
1447
+ <p class="b-fight-details__table-text">
1448
+ <a class="b-flag b-flag_style_green" href="http://ufcstats.com/fight-details/043172689e415438"><i class="b-flag__inner"><i class="b-flag__text">win<i class="b-flag__corner"></i><i class="b-flag__corner-substrate"></i></i></i></a>
1449
+ </p>
1450
+ <br>
1451
+
1452
+
1453
+
1454
+
1455
+
1456
+ </td>
1457
+ <td style="width:100px" class="b-fight-details__table-col l-page_align_left">
1458
+
1459
+ <p class="b-fight-details__table-text">
1460
+
1461
+ <a class="b-link b-link_style_black" href="http://ufcstats.com/fighter-details/25f9a5f3e8a52618">
1462
+ Jhonata Diniz
1463
+ </a>
1464
+
1465
+ </p>
1466
+
1467
+ <p class="b-fight-details__table-text">
1468
+
1469
+ <a class="b-link b-link_style_black" href="http://ufcstats.com/fighter-details/ab2a4b5e04dc5fe9">
1470
+ Alvin Hines
1471
+ </a>
1472
+ </p>
1473
+
1474
+
1475
+ </td>
1476
+ <td class="b-fight-details__table-col">
1477
+
1478
+
1479
+ <p class="b-fight-details__table-text">
1480
+
1481
+ 0
1482
+ </p>
1483
+
1484
+ <p class="b-fight-details__table-text">
1485
+
1486
+ 0
1487
+ </p>
1488
+
1489
+ </td>
1490
+ <td class="b-fight-details__table-col">
1491
+
1492
+
1493
+
1494
+ <p class="b-fight-details__table-text">
1495
+
1496
+ 112
1497
+
1498
+ </p>
1499
+
1500
+ <p class="b-fight-details__table-text">
1501
+
1502
+
1503
+ 82
1504
+ </p>
1505
+
1506
+ </td>
1507
+ <td class="b-fight-details__table-col">
1508
+
1509
+
1510
+ <p class="b-fight-details__table-text">
1511
+
1512
+ 0
1513
+ </p>
1514
+
1515
+ <p class="b-fight-details__table-text">
1516
+
1517
+ 1
1518
+ </p>
1519
+
1520
+ </td>
1521
+ <td class="b-fight-details__table-col">
1522
+
1523
+
1524
+ <p class="b-fight-details__table-text">
1525
+
1526
+ 0
1527
+ </p>
1528
+
1529
+ <p class="b-fight-details__table-text">
1530
+
1531
+ 0
1532
+ </p>
1533
+
1534
+ </td>
1535
+ <td class="b-fight-details__table-col l-page_align_left">
1536
+ <p class="b-fight-details__table-text">
1537
+ Heavyweight<br>
1538
+
1539
+ </p>
1540
+
1541
+ </td>
1542
+ <td class="b-fight-details__table-col l-page_align_left">
1543
+ <p class="b-fight-details__table-text">
1544
+
1545
+
1546
+
1547
+ U-DEC
1548
+
1549
+ </p>
1550
+
1551
+ <p class="b-fight-details__table-text">
1552
+
1553
+ </p>
1554
+ </td>
1555
+ <td class="b-fight-details__table-col">
1556
+ <p class="b-fight-details__table-text">
1557
+
1558
+ 3
1559
+ </p>
1560
+ </td>
1561
+ <td class="b-fight-details__table-col">
1562
+ <p class="b-fight-details__table-text">
1563
+ 5:00
1564
+ </p>
1565
+ </td>
1566
+ </tr>
1567
+ </tbody>
1568
+ </table>
1569
+ </div>
1570
+ </div>
1571
+ </section>
1572
+ <footer class="b-foot">
1573
+ <div class="b-foot__inner">
1574
+ <div class="l-page__container clearfix">
1575
+ <div class="b-foot__right">
1576
+ <div class="b-foot__list-inner">
1577
+ <h4 class="b-foot__list-title">
1578
+ Navigation
1579
+ </h4>
1580
+ <ul class="b-foot__list">
1581
+ <li class="b-foot__item">
1582
+ <a class="b-foot__link" href="/statistics/events/">
1583
+ Events &amp; Fights
1584
+ </a>
1585
+ </li>
1586
+ <li class="b-foot__item">
1587
+ <a class="b-foot__link" href="/statistics/fighters">
1588
+ Fighters
1589
+ </a>
1590
+ </li>
1591
+ <li class="b-foot__item">
1592
+ <a class="b-foot__link" href="http://statleaders.ufc.com" target="_blank">
1593
+ Stat Leaders
1594
+ </a>
1595
+ </li>
1596
+ </ul>
1597
+ </div>
1598
+ </div>
1599
+ <div class="b-foot__logo">
1600
+ <a href="/">
1601
+ <img src="http://1e49bc5171d173577ecd-1323f4090557a33db01577564f60846c.r80.cf1.rackcdn.com/ufc-stats-foot-logo.png" alt="">
1602
+ </a>
1603
+ <div class="b-foot__copy-inner">
1604
+ &copy; All Rights Reserved |
1605
+ <a class="b-foot__copy-link" href="https://ufc.com/terms" target="_blank">Terms of Use</a> |
1606
+ <a class="b-foot__copy-link" href="https://ufc.com/privacy-policy" target="_blank">Privacy Policy</a>
1607
+ </div>
1608
+ </div>
1609
+ </div>
1610
+ </div>
1611
+ </footer>
1612
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
1613
+ <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
1614
+ <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
1615
+ <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />
1616
+ <script>window.jQuery || document.write('<script src="/js/vendor/jquery-1.10.2.min.js"><\/script>')</script>
1617
+ <script type="text/javascript" src="/js/vendor/jquery.validate.min.js"></script>
1618
+ <script src="/js/plugins.js"></script>
1619
+ <script src="/js/main.js?ver=647783"></script>
1620
+ <script type="text/javascript">
1621
+ $(document).ready(function () {
1622
+ $(function () {
1623
+ $("#dialog").dialog({
1624
+
1625
+ autoOpen: false,
1626
+ modal: true,
1627
+ show: {
1628
+ effect: "blind",
1629
+ duration: 1000
1630
+ },
1631
+ hide: {
1632
+ effect: "fold",
1633
+ duration: 1000
1634
+ }
1635
+
1636
+ });
1637
+ });
1638
+ }
1639
+
1640
+ );
1641
+ $("#opener").click(function () {
1642
+ $("#dialog").dialog("open");
1643
+ });
1644
+ $("#opener").click(function () {
1645
+ var state = true;
1646
+ if (state) {
1647
+ $("#dialog").animate({
1648
+ backgroundColor: "white",
1649
+ color: "black"
1650
+
1651
+ }, 1000);
1652
+ }
1653
+ });
1654
+
1655
+ </script>
1656
+
1657
+ <script type="text/javascript">
1658
+
1659
+ /*window.onload = function (){
1660
+ // location.pathname.split( '/' )
1661
+ theUrl = window.location.host;
1662
+
1663
+
1664
+ if(theUrl === 'hosteddb.fightmetric.com'){
1665
+ window.location.replace("http://www.fightmetric.com/statistics/events/upcoming");
1666
+ }
1667
+
1668
+ //alert(theUrl);
1669
+ }*/
1670
+ //window.onpaint = handleHosted;
1671
+ </script>
1672
+ </body>
1673
+ </html>
output/fighters_data.json DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:d35f0b17445b0e887c33d4bcb30f71e8b62bd9749897117ccfbde9069935aa1b
3
- size 2039299
 
 
 
 
output/ufc_events_detailed.json DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:efffe902c81d1ab870852e9dd6d192e3b203e11b1a99a36c7ea97be451d197d6
3
- size 15088727
 
 
 
 
output/{ufc_fighters_data.csv → ufc_fighters.csv} RENAMED
File without changes
output/ufc_fights.csv CHANGED
The diff for this file is too large to render. See raw diff
 
src/analysis/elo.py ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import csv
2
+ import os
3
+ from datetime import datetime
4
+
5
+ # --- ELO Configuration ---
6
+ INITIAL_ELO = 1500
7
+ K_FACTOR = 32
8
+ # --- End Configuration ---
9
+
10
+ def calculate_expected_score(rating1, rating2):
11
+ """Calculates the expected score for player 1 against player 2."""
12
+ return 1 / (1 + 10 ** ((rating2 - rating1) / 400))
13
+
14
+ def update_elo(winner_elo, loser_elo):
15
+ """Calculates the new ELO ratings for a win/loss scenario."""
16
+ expected_win = calculate_expected_score(winner_elo, loser_elo)
17
+ change = K_FACTOR * (1 - expected_win)
18
+ return winner_elo + change, loser_elo - change
19
+
20
+ def update_elo_draw(elo1, elo2):
21
+ """Calculates the new ELO ratings for a draw."""
22
+ expected1 = calculate_expected_score(elo1, elo2)
23
+ change1 = K_FACTOR * (0.5 - expected1)
24
+
25
+ expected2 = calculate_expected_score(elo2, elo1)
26
+ change2 = K_FACTOR * (0.5 - expected2)
27
+
28
+ return elo1 + change1, elo2 + change2
29
+
30
+ def process_fights_for_elo(fights_csv_path='output/ufc_fights.csv'):
31
+ """
32
+ Processes all fights chronologically to calculate final ELO scores for all fighters.
33
+ """
34
+ if not os.path.exists(fights_csv_path):
35
+ print(f"Error: Fights data file not found at '{fights_csv_path}'.")
36
+ print("Please run the scraping pipeline first using 'src/scrape/main.py'.")
37
+ return None
38
+
39
+ with open(fights_csv_path, 'r', encoding='utf-8') as f:
40
+ fights = list(csv.DictReader(f))
41
+
42
+ # Sort fights by date to process them in chronological order
43
+ try:
44
+ fights.sort(key=lambda x: datetime.strptime(x['event_date'], '%B %d, %Y'))
45
+ except (ValueError, KeyError) as e:
46
+ print(f"Error sorting fights by date. Make sure 'event_date' exists and is in 'Month Day, Year' format. Error: {e}")
47
+ return None
48
+
49
+ elos = {}
50
+
51
+ for fight in fights:
52
+ fighter1 = fight.get('fighter_1')
53
+ fighter2 = fight.get('fighter_2')
54
+ winner = fight.get('winner')
55
+
56
+ # Initialize ELO for new fighters
57
+ if fighter1 not in elos: elos[fighter1] = INITIAL_ELO
58
+ if fighter2 not in elos: elos[fighter2] = INITIAL_ELO
59
+
60
+ elo1 = elos[fighter1]
61
+ elo2 = elos[fighter2]
62
+
63
+ if winner == fighter1:
64
+ elos[fighter1], elos[fighter2] = update_elo(elo1, elo2)
65
+ elif winner == fighter2:
66
+ elos[fighter2], elos[fighter1] = update_elo(elo2, elo1)
67
+ elif winner == "Draw":
68
+ elos[fighter1], elos[fighter2] = update_elo_draw(elo1, elo2)
69
+ # NC (No Contest) fights do not affect ELO
70
+
71
+ return elos
72
+
73
+ def add_elo_to_fighters_csv(elos, fighters_csv_path='output/ufc_fighters.csv'):
74
+ """
75
+ Adds the final ELO scores as a new column to the fighters CSV data.
76
+ """
77
+ if not elos:
78
+ print("No ELO data to process. Aborting.")
79
+ return
80
+
81
+ if not os.path.exists(fighters_csv_path):
82
+ print(f"Error: Fighters data file not found at '{fighters_csv_path}'. Cannot add ELO column.")
83
+ return
84
+
85
+ rows = []
86
+ with open(fighters_csv_path, 'r', encoding='utf-8') as f:
87
+ reader = csv.DictReader(f)
88
+ headers = reader.fieldnames
89
+ # Ensure 'elo' column is added if not present
90
+ if 'elo' not in headers:
91
+ headers.append('elo')
92
+ rows = list(reader)
93
+
94
+ for row in rows:
95
+ full_name = f"{row.get('first_name', '')} {row.get('last_name', '')}".strip()
96
+ row['elo'] = round(elos.get(full_name, INITIAL_ELO))
97
+
98
+ with open(fighters_csv_path, 'w', newline='', encoding='utf-8') as f:
99
+ writer = csv.DictWriter(f, fieldnames=headers)
100
+ writer.writeheader()
101
+ writer.writerows(rows)
102
+
103
+ print(f"Successfully updated '{fighters_csv_path}' with ELO ratings.")
104
+
105
+
106
+ def main():
107
+ print("--- Starting ELO Calculation ---")
108
+ final_elos = process_fights_for_elo()
109
+
110
+ if final_elos:
111
+ add_elo_to_fighters_csv(final_elos)
112
+
113
+ # Sort fighters by ELO and print the top 10
114
+ sorted_fighters = sorted(final_elos.items(), key=lambda item: item[1], reverse=True)
115
+
116
+ print("\n--- Top 10 Fighters by ELO Rating ---")
117
+ for i, (fighter, elo) in enumerate(sorted_fighters[:10]):
118
+ print(f"{i+1}. {fighter}: {round(elo)}")
119
+ print("------------------------------------")
120
+
121
+ if __name__ == '__main__':
122
+ # Create the directory if it doesn't exist to avoid confusion
123
+ if not os.path.exists('src/analysis'):
124
+ os.makedirs('src/analysis')
125
+ main()
src/analyze.py CHANGED
@@ -1,6 +1,10 @@
1
  import json
 
 
 
 
 
2
 
3
- ufc_events = json.load(open('ufc_events_detailed.json'))
4
 
5
  unique_fighters = set()
6
 
@@ -9,7 +13,13 @@ for event in ufc_events:
9
  unique_fighters.add(fight['fighter_1'])
10
  unique_fighters.add(fight['fighter_2'])
11
 
12
- print(len(unique_fighters))
 
 
 
 
13
 
 
 
14
 
15
 
 
1
  import json
2
+ import pandas as pd
3
+
4
+ ufc_events = json.load(open('output/ufc_fights.json'))
5
+ ufc_events_csv = pd.read_csv('output/ufc_fights.csv')
6
+ ufc_fighters_csv = pd.read_csv('output/ufc_fighters.csv')
7
 
 
8
 
9
  unique_fighters = set()
10
 
 
13
  unique_fighters.add(fight['fighter_1'])
14
  unique_fighters.add(fight['fighter_2'])
15
 
16
+ unique_fighters_csv=set()
17
+ for fight in ufc_events_csv['fighter_1']:
18
+ unique_fighters_csv.add(fight)
19
+ for fight in ufc_events_csv['fighter_2']:
20
+ unique_fighters_csv.add(fight)
21
 
22
+ print(len(unique_fighters))
23
+ print(len(unique_fighters_csv))
24
 
25
 
src/scrape/config.py ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+
3
+ # --- Directory Paths ---
4
+ OUTPUT_DIR = 'output'
5
+
6
+ # --- File Paths ---
7
+ # JSON files (temporary)
8
+ EVENTS_JSON_PATH = os.path.join(OUTPUT_DIR, 'ufc_fights.json')
9
+ FIGHTERS_JSON_PATH = os.path.join(OUTPUT_DIR, 'ufc_fighters.json')
10
+
11
+ # CSV files (final output)
12
+ FIGHTS_CSV_PATH = os.path.join(OUTPUT_DIR, 'ufc_fights.csv')
13
+ FIGHTERS_CSV_PATH = os.path.join(OUTPUT_DIR, 'ufc_fighters.csv')
src/scrape/main.py CHANGED
@@ -3,41 +3,53 @@ import json
3
  from scrape_fights import scrape_all_events
4
  from scrape_fighters import scrape_all_fighters
5
  from to_csv import json_to_csv, fighters_json_to_csv
 
 
6
 
7
  def main():
8
  """
9
  Main pipeline to scrape UFC data and convert it to CSV.
10
  """
11
  # Ensure the output directory exists
12
- output_dir = 'output'
13
- if not os.path.exists(output_dir):
14
- os.makedirs(output_dir)
15
- print(f"Created directory: {output_dir}")
16
-
17
- # --- File Paths ---
18
- events_json_path = os.path.join(output_dir, 'ufc_events_detailed.json')
19
- fighters_json_path = os.path.join(output_dir, 'fighters_data.json')
20
- fights_csv_path = os.path.join(output_dir, 'ufc_fights.csv')
21
- fighters_csv_path = os.path.join(output_dir, 'ufc_fighters_data.csv')
22
 
23
  # --- Step 1: Scrape Events and Fights ---
24
  print("\n--- Starting Events and Fights Scraping ---")
25
- all_events_data = scrape_all_events()
26
- with open(events_json_path, 'w') as f:
27
- json.dump(all_events_data, f, indent=4)
28
- print(f"Scraping for events complete. Data saved to {events_json_path}")
29
 
30
  # --- Step 2: Scrape Fighters ---
31
  print("\n--- Starting Fighters Scraping ---")
32
- all_fighters_data = scrape_all_fighters()
33
- with open(fighters_json_path, 'w') as f:
34
- json.dump(all_fighters_data, f, indent=4)
35
- print(f"Scraping for fighters complete. Data saved to {fighters_json_path}")
36
 
37
  # --- Step 3: Convert JSON to CSV ---
38
  print("\n--- Converting all JSON files to CSV ---")
39
- json_to_csv(events_json_path, fights_csv_path)
40
- fighters_json_to_csv(fighters_json_path, fighters_csv_path)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41
  print("\n--- Pipeline Finished ---")
42
 
43
  if __name__ == '__main__':
 
3
  from scrape_fights import scrape_all_events
4
  from scrape_fighters import scrape_all_fighters
5
  from to_csv import json_to_csv, fighters_json_to_csv
6
+ from preprocess import preprocess_fighters_csv
7
+ import config
8
 
9
  def main():
10
  """
11
  Main pipeline to scrape UFC data and convert it to CSV.
12
  """
13
  # Ensure the output directory exists
14
+ if not os.path.exists(config.OUTPUT_DIR):
15
+ os.makedirs(config.OUTPUT_DIR)
16
+ print(f"Created directory: {config.OUTPUT_DIR}")
 
 
 
 
 
 
 
17
 
18
  # --- Step 1: Scrape Events and Fights ---
19
  print("\n--- Starting Events and Fights Scraping ---")
20
+ # all_events_data = scrape_all_events()
21
+ # with open(config.EVENTS_JSON_PATH, 'w') as f:
22
+ # json.dump(all_events_data, f, indent=4)
23
+ print(f"Scraping for events complete. Data saved to {config.EVENTS_JSON_PATH}")
24
 
25
  # --- Step 2: Scrape Fighters ---
26
  print("\n--- Starting Fighters Scraping ---")
27
+ # all_fighters_data = scrape_all_fighters()
28
+ # with open(config.FIGHTERS_JSON_PATH, 'w') as f:
29
+ # json.dump(all_fighters_data, f, indent=4)
30
+ print(f"Scraping for fighters complete. Data saved to {config.FIGHTERS_JSON_PATH}")
31
 
32
  # --- Step 3: Convert JSON to CSV ---
33
  print("\n--- Converting all JSON files to CSV ---")
34
+ json_to_csv(config.EVENTS_JSON_PATH, config.FIGHTS_CSV_PATH)
35
+ fighters_json_to_csv(config.FIGHTERS_JSON_PATH, config.FIGHTERS_CSV_PATH)
36
+
37
+ # --- Step 4: Preprocess CSV data ---
38
+ print("\n--- Preprocessing fighter data (converting height to cm) ---")
39
+ preprocess_fighters_csv(config.FIGHTERS_CSV_PATH)
40
+
41
+ # --- Step 5: Clean up temporary JSON files ---
42
+ print("\n--- Deleting temporary JSON files ---")
43
+ try:
44
+ if os.path.exists(config.EVENTS_JSON_PATH):
45
+ os.remove(config.EVENTS_JSON_PATH)
46
+ print(f"Deleted: {config.EVENTS_JSON_PATH}")
47
+ if os.path.exists(config.FIGHTERS_JSON_PATH):
48
+ os.remove(config.FIGHTERS_JSON_PATH)
49
+ print(f"Deleted: {config.FIGHTERS_JSON_PATH}")
50
+ except OSError as e:
51
+ print(f"Error deleting JSON files: {e}")
52
+
53
  print("\n--- Pipeline Finished ---")
54
 
55
  if __name__ == '__main__':
src/{preprocess.py → scrape/preprocess.py} RENAMED
@@ -1,5 +1,6 @@
1
  import csv
2
  import os
 
3
 
4
  def convert_height_to_cm(height_str):
5
  """
@@ -23,7 +24,7 @@ def convert_height_to_cm(height_str):
23
  # Return original value if parsing fails
24
  return height_str
25
 
26
- def preprocess_fighters_csv(file_path='output/ufc_fighters_data.csv'):
27
  """
28
  Reads the fighters CSV, converts height to cm, renames the column,
29
  and saves the changes back to the same file.
@@ -71,4 +72,4 @@ def preprocess_fighters_csv(file_path='output/ufc_fighters_data.csv'):
71
  print(f"An error occurred: {e}")
72
 
73
  if __name__ == '__main__':
74
- preprocess_fighters_csv()
 
1
  import csv
2
  import os
3
+ import config
4
 
5
  def convert_height_to_cm(height_str):
6
  """
 
24
  # Return original value if parsing fails
25
  return height_str
26
 
27
+ def preprocess_fighters_csv(file_path=config.FIGHTERS_CSV_PATH):
28
  """
29
  Reads the fighters CSV, converts height to cm, renames the column,
30
  and saves the changes back to the same file.
 
72
  print(f"An error occurred: {e}")
73
 
74
  if __name__ == '__main__':
75
+ preprocess_fighters_csv()
src/scrape/scrape_fighters.py CHANGED
@@ -4,6 +4,8 @@ import json
4
  import time
5
  import string
6
  import concurrent.futures
 
 
7
 
8
  # --- Configuration ---
9
  # The number of parallel threads to use for scraping fighter details.
@@ -126,25 +128,19 @@ def scrape_all_fighters():
126
  print(f"Progress: {i + 1}/{total_fighters} fighters scraped.")
127
 
128
  if (i + 1) > 0 and (i + 1) % 50 == 0:
129
- print(f"--- Saving progress: {i + 1} fighters saved. ---")
130
- # Sort before saving to maintain a consistent order in the file
131
  fighters_with_details.sort(key=lambda x: (x['last_name'], x['first_name']))
132
- with open('output/fighters_data.json', 'w') as f:
133
  json.dump(fighters_with_details, f, indent=4)
134
 
135
- # Final sort for the complete dataset
136
  fighters_with_details.sort(key=lambda x: (x['last_name'], x['first_name']))
137
  return fighters_with_details
138
 
139
  if __name__ == "__main__":
140
  all_fighters_data = scrape_all_fighters()
141
-
142
- # Create output directory if it doesn't exist
143
- import os
144
- if not os.path.exists('output'):
145
- os.makedirs('output')
146
 
147
- with open('output/fighters_data.json', 'w') as f:
148
  json.dump(all_fighters_data, f, indent=4)
149
 
150
- print(f"\nScraping complete. Final data for {len(all_fighters_data)} fighters saved to output/fighters_data.json")
 
4
  import time
5
  import string
6
  import concurrent.futures
7
+ import os
8
+ import config
9
 
10
  # --- Configuration ---
11
  # The number of parallel threads to use for scraping fighter details.
 
128
  print(f"Progress: {i + 1}/{total_fighters} fighters scraped.")
129
 
130
  if (i + 1) > 0 and (i + 1) % 50 == 0:
 
 
131
  fighters_with_details.sort(key=lambda x: (x['last_name'], x['first_name']))
132
+ with open(config.FIGHTERS_JSON_PATH, 'w') as f:
133
  json.dump(fighters_with_details, f, indent=4)
134
 
 
135
  fighters_with_details.sort(key=lambda x: (x['last_name'], x['first_name']))
136
  return fighters_with_details
137
 
138
  if __name__ == "__main__":
139
  all_fighters_data = scrape_all_fighters()
140
+ if not os.path.exists(config.OUTPUT_DIR):
141
+ os.makedirs(config.OUTPUT_DIR)
 
 
 
142
 
143
+ with open(config.FIGHTERS_JSON_PATH, 'w') as f:
144
  json.dump(all_fighters_data, f, indent=4)
145
 
146
+ print(f"\nScraping complete. Final data for {len(all_fighters_data)} fighters saved to {config.FIGHTERS_JSON_PATH}")
src/scrape/scrape_fights.py CHANGED
@@ -3,6 +3,7 @@ from bs4 import BeautifulSoup
3
  import json
4
  import time
5
  import concurrent.futures
 
6
 
7
  # --- Configuration ---
8
  # The number of parallel threads to use for scraping fight details.
@@ -114,17 +115,45 @@ def scrape_event_details(event_url):
114
  rows = fight_table.find('tbody').find_all('tr', class_='b-fight-details__table-row')
115
  for row in rows:
116
  cols = row.find_all('td', class_='b-fight-details__table-col')
 
 
 
 
 
 
 
117
 
118
- fight_url = row['data-link']
 
 
 
 
 
 
 
 
 
119
 
 
 
 
 
 
 
 
 
 
 
 
120
  fight = {
121
- 'fighter_1': cols[1].find_all('p')[0].text.strip(),
122
- 'fighter_2': cols[1].find_all('p')[1].text.strip(),
 
123
  'weight_class': cols[6].text.strip(),
124
  'method': ' '.join(cols[7].stripped_strings),
125
  'round': cols[8].text.strip(),
126
  'time': cols[9].text.strip(),
127
- 'url': fight_url # Temporarily store the URL for the worker
128
  }
129
  fights_to_process.append(fight)
130
 
@@ -171,11 +200,11 @@ def scrape_all_events():
171
  if event_data:
172
  events.append(event_data)
173
 
174
- print(f"Progress: {i}/{total_events} events scraped.")
175
 
176
  if (i + 1) % 10 == 0:
177
  print(f"--- Saving progress: {i + 1} of {total_events} events saved. ---")
178
- with open('ufc_events_detailed.json', 'w') as f:
179
  json.dump(events, f, indent=4)
180
  except Exception as e:
181
  print(f"Could not process event {event_url}. Error: {e}")
@@ -184,6 +213,6 @@ def scrape_all_events():
184
 
185
  if __name__ == "__main__":
186
  all_events_data = scrape_all_events()
187
- with open('ufc_events_detailed.json', 'w') as f:
188
  json.dump(all_events_data, f, indent=4)
189
- print("\nScraping complete. Final data saved to ufc_events_detailed.json")
 
3
  import json
4
  import time
5
  import concurrent.futures
6
+ from config import EVENTS_JSON_PATH
7
 
8
  # --- Configuration ---
9
  # The number of parallel threads to use for scraping fight details.
 
115
  rows = fight_table.find('tbody').find_all('tr', class_='b-fight-details__table-row')
116
  for row in rows:
117
  cols = row.find_all('td', class_='b-fight-details__table-col')
118
+
119
+ fighter1 = cols[1].find_all('p')[0].text.strip()
120
+ fighter2 = cols[1].find_all('p')[1].text.strip()
121
+
122
+ # Determine the winner from the W/L column based on the example provided.
123
+ winner = None
124
+ result_ps = cols[0].find_all('p')
125
 
126
+ # This logic handles the structure seen in the example file.
127
+ if len(result_ps) == 1:
128
+ result_text = result_ps[0].text.strip().lower()
129
+ if 'win' in result_text:
130
+ # When one 'win' is present, it corresponds to the first fighter listed.
131
+ winner = fighter1
132
+ elif 'draw' in result_text:
133
+ winner = "Draw"
134
+ elif 'nc' in result_text:
135
+ winner = "NC"
136
 
137
+ # This is a defensive case in case the structure has two <p> tags.
138
+ elif len(result_ps) == 2:
139
+ if 'win' in result_ps[0].text.strip().lower():
140
+ winner = fighter1
141
+ elif 'win' in result_ps[1].text.strip().lower():
142
+ winner = fighter2
143
+ elif 'draw' in result_ps[0].text.strip().lower():
144
+ winner = "Draw"
145
+ elif 'nc' in result_ps[0].text.strip().lower():
146
+ winner = "NC"
147
+
148
  fight = {
149
+ 'fighter_1': fighter1,
150
+ 'fighter_2': fighter2,
151
+ 'winner': winner,
152
  'weight_class': cols[6].text.strip(),
153
  'method': ' '.join(cols[7].stripped_strings),
154
  'round': cols[8].text.strip(),
155
  'time': cols[9].text.strip(),
156
+ 'url': row['data-link']
157
  }
158
  fights_to_process.append(fight)
159
 
 
200
  if event_data:
201
  events.append(event_data)
202
 
203
+ print(f"Progress: {i+1}/{total_events} events scraped.")
204
 
205
  if (i + 1) % 10 == 0:
206
  print(f"--- Saving progress: {i + 1} of {total_events} events saved. ---")
207
+ with open(EVENTS_JSON_PATH, 'w') as f:
208
  json.dump(events, f, indent=4)
209
  except Exception as e:
210
  print(f"Could not process event {event_url}. Error: {e}")
 
213
 
214
  if __name__ == "__main__":
215
  all_events_data = scrape_all_events()
216
+ with open(EVENTS_JSON_PATH, 'w') as f:
217
  json.dump(all_events_data, f, indent=4)
218
+ print(f"\nScraping complete. Final data saved to {EVENTS_JSON_PATH}")
src/scrape/to_csv.py CHANGED
@@ -1,5 +1,6 @@
1
  import json
2
  import csv
 
3
 
4
  def json_to_csv(json_file_path, csv_file_path):
5
  try:
@@ -14,7 +15,7 @@ def json_to_csv(json_file_path, csv_file_path):
14
 
15
  # Define the headers for the CSV file
16
  headers = [
17
- 'event_name', 'event_date', 'event_location', 'fighter_1', 'fighter_2',
18
  'weight_class', 'method', 'round', 'time',
19
  'f1_kd', 'f1_sig_str', 'f1_sig_str_percent', 'f1_total_str', 'f1_td',
20
  'f1_td_percent', 'f1_sub_att', 'f1_rev', 'f1_ctrl',
@@ -44,6 +45,7 @@ def json_to_csv(json_file_path, csv_file_path):
44
  event.get('location', ''),
45
  fight.get('fighter_1', ''),
46
  fight.get('fighter_2', ''),
 
47
  fight.get('weight_class', ''),
48
  fight.get('method', ''),
49
  fight.get('round', ''),
@@ -138,5 +140,5 @@ def fighters_json_to_csv(json_file_path, csv_file_path):
138
  print(f"Successfully converted {json_file_path} to {csv_file_path}")
139
 
140
  if __name__ == '__main__':
141
- json_to_csv('output/ufc_events_detailed.json', 'output/ufc_fights.csv')
142
- fighters_json_to_csv('output/fighters_data.json', 'output/ufc_fighters_data.csv')
 
1
  import json
2
  import csv
3
+ import config
4
 
5
  def json_to_csv(json_file_path, csv_file_path):
6
  try:
 
15
 
16
  # Define the headers for the CSV file
17
  headers = [
18
+ 'event_name', 'event_date', 'event_location', 'fighter_1', 'fighter_2', 'winner',
19
  'weight_class', 'method', 'round', 'time',
20
  'f1_kd', 'f1_sig_str', 'f1_sig_str_percent', 'f1_total_str', 'f1_td',
21
  'f1_td_percent', 'f1_sub_att', 'f1_rev', 'f1_ctrl',
 
45
  event.get('location', ''),
46
  fight.get('fighter_1', ''),
47
  fight.get('fighter_2', ''),
48
+ fight.get('winner', ''),
49
  fight.get('weight_class', ''),
50
  fight.get('method', ''),
51
  fight.get('round', ''),
 
140
  print(f"Successfully converted {json_file_path} to {csv_file_path}")
141
 
142
  if __name__ == '__main__':
143
+ json_to_csv(config.EVENTS_JSON_PATH, config.FIGHTS_CSV_PATH)
144
+ fighters_json_to_csv(config.FIGHTERS_JSON_PATH, config.FIGHTERS_CSV_PATH)