I opted to do this without a lot of automation, as there aren’t many pages. I found the documents here, nothing before 2010

# http://cpw.state.co.us/Documents/Hunting/BigGame/5YearSeasonStructure/Final2010-2014BGSSdatesrevised.pdf
# https://cpw.state.co.us/Documents/Hunting/BigGame/5YearSeasonStructure/Big-Game-Season-Structure-Dates-2015-2019.pdf

I’ve included those pdfs in the datasets directory

# Regular Rifle Deer and Elk Seasons: four Seasons
# 1st Season – 5 day Season, followed by a 2 day break – Separate Limited Elk – Opening on the first
# Saturday after October 9 - Antlerless licenses may be offered in DAUs over population objective;
# 2nd Season – 9 day Season, followed by a 5 day break – Deer and Elk Combined – Opening on a
# Saturday;
# 3rd Season – 9 day Season, followed by a 2 day break – Deer and Elk Combined – Opening on a
# Saturday;
# 4th Season – 5 day Season – Deer and Elk Combined – Opening on a Wednesday - Elk: this Season
# is to be used as needed to meet DAU objectives. Antlerless harvest is emphasized. Antlered
# hunting is limited by draw, no over the counter bull licenses. Deer: by DAU buck and/or doe
# hunting consistent with DAU plans.
Seasondates1 <- NULL
Seasondates <- NULL
SeasondatesADD <- NULL

2010

# 1st Separate Limited Elk 10/16-10/20
SeasondatesADD$Season <- 1
SeasondatesADD$Start <- unlist(strsplit("10/16-10/20",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("10/16-10/20",split = "-"))[2]
SeasondatesADD <- as.data.frame(SeasondatesADD)
Seasondates <- rbind(Seasondates,SeasondatesADD)
# 2nd Combined Deer & Elk 10/23-10/31
SeasondatesADD$Season <- 2
SeasondatesADD$Start <- unlist(strsplit("10/23-10/31",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("10/23-10/31",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)
# 3rd Combined Deer & Elk 11/6-11/14
SeasondatesADD$Season <- 3
SeasondatesADD$Start <- unlist(strsplit("11/6-11/14",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("11/6-11/14",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)
# 4th Combined Limited Deer & Elk 11/17-11/21
SeasondatesADD$Season <- 4
SeasondatesADD$Start <- unlist(strsplit("11/17-11/21",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("11/17-11/21",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)
Seasondates$Year <- 2010
Seasondates$Start <- as.POSIXct(paste(Seasondates$Year,Seasondates$Start,sep = "/"))
Seasondates$End <- as.POSIXct(paste(Seasondates$Year,Seasondates$End,sep = "/"))
Seasondates1 <- rbind(Seasondates1,Seasondates)

2011

Seasondates <- NULL
# 1st Separate Limited Elk 10/15-10/19
SeasondatesADD$Season <- 1
SeasondatesADD$Start <- unlist(strsplit("10/15-10/19",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("10/15-10/19",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)
# 2nd Combined Deer & Elk 10/22-10/30
SeasondatesADD$Season <- 2
SeasondatesADD$Start <- unlist(strsplit("10/22-10/30",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("10/22-10/30",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)
# 3rd Combined Deer & Elk 11/5-11/13
SeasondatesADD$Season <- 3
SeasondatesADD$Start <- unlist(strsplit("11/5-11/13",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("11/5-11/13",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)
# 4th Combined Limited Deer & Elk 11/16-11/20
SeasondatesADD$Season <- 4
SeasondatesADD$Start <- unlist(strsplit("11/16-11/20",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("11/16-11/20",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)

Seasondates$Year <- 2011
Seasondates$Start <- as.POSIXct(paste(Seasondates$Year,Seasondates$Start,sep = "/"))
Seasondates$End <- as.POSIXct(paste(Seasondates$Year,Seasondates$End,sep = "/"))
Seasondates1 <- rbind(Seasondates1,Seasondates)

2012

Seasondates <- NULL
# 1st Separate Limited Elk 10/13-10/17
SeasondatesADD$Season <- 1
SeasondatesADD$Start <- unlist(strsplit("10/13-10/17",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("10/13-10/17",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)
# 2nd Combined Deer & Elk 10/20-10/28
SeasondatesADD$Season <- 2
SeasondatesADD$Start <- unlist(strsplit("10/20-10/28",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("10/20-10/28",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)
# 3rd Combined Deer & Elk 11/3-11/11
SeasondatesADD$Season <- 3
SeasondatesADD$Start <- unlist(strsplit("11/3-11/11",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("11/3-11/11",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)
# 4th Combined Limited Deer & Elk 11/14-11/18
SeasondatesADD$Season <- 4
SeasondatesADD$Start <- unlist(strsplit("11/14-11/18",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("11/14-11/18",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)

Seasondates$Year <- 2012
Seasondates$Start <- as.POSIXct(paste(Seasondates$Year,Seasondates$Start,sep = "/"))
Seasondates$End <- as.POSIXct(paste(Seasondates$Year,Seasondates$End,sep = "/"))
Seasondates1 <- rbind(Seasondates1,Seasondates)

2013

Seasondates <- NULL
# 1st Separate Limited Elk 10/12-10/16
SeasondatesADD$Season <- 1
SeasondatesADD$Start <- unlist(strsplit("10/12-10/16",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("10/12-10/16",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)
# 2nd Combined Deer & Elk 10/19-10/27
SeasondatesADD$Season <- 2
SeasondatesADD$Start <- unlist(strsplit("10/19-10/27",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("10/19-10/27",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)
# 3rd Combined Deer & Elk 11/2-11/10
SeasondatesADD$Season <- 3
SeasondatesADD$Start <- unlist(strsplit("11/2-11/10",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("11/2-11/10",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)
# 4th Combined Limited Deer & Elk 11/13-11/17
SeasondatesADD$Season <- 4
SeasondatesADD$Start <- unlist(strsplit("11/13-11/17",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("11/13-11/17",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)

Seasondates$Year <- 2013
Seasondates$Start <- as.POSIXct(paste(Seasondates$Year,Seasondates$Start,sep = "/"))
Seasondates$End <- as.POSIXct(paste(Seasondates$Year,Seasondates$End,sep = "/"))
Seasondates1 <- rbind(Seasondates1,Seasondates)

2014

Seasondates <- NULL
# 1st Separate Limited Elk 10/11-10/15
SeasondatesADD$Season <- 1
SeasondatesADD$Start <- unlist(strsplit("10/11-10/15",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("10/11-10/15",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)
# 2nd Combined Deer & Elk 10/18-10/26
SeasondatesADD$Season <- 2
SeasondatesADD$Start <- unlist(strsplit("10/18-10/26",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("10/18-10/26",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)
# 3rd Combined Deer & Elk 11/1-11/9
SeasondatesADD$Season <- 3
SeasondatesADD$Start <- unlist(strsplit("11/1-11/9",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("11/1-11/9",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)
# 4th Combined Limited Deer & Elk 11/12-11/16
SeasondatesADD$Season <- 4
SeasondatesADD$Start <- unlist(strsplit("11/12-11/16",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("11/12-11/16",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)

Seasondates$Year <- 2014
Seasondates$Start <- as.POSIXct(paste(Seasondates$Year,Seasondates$Start,sep = "/"))
Seasondates$End <- as.POSIXct(paste(Seasondates$Year,Seasondates$End,sep = "/"))
Seasondates1 <- rbind(Seasondates1,Seasondates)

################################################################################################

# Regular Rifle Deer and Elk Seasons: four Seasons
# 1st Season – 5 day Season, followed by a 2 day break – Separate Limited Elk – Opening
# on the first Saturday after October 9 - Antlerless licenses may be offered in DAUs over
# population objective;
# 2nd Season – 9 day Season, followed by a 5 day break – Deer and Elk Combined –
# Opening on a Saturday;
# 3rd Season – 9 day Season, followed by a 2 day break – Deer and Elk Combined –
# Opening on a Saturday;
# 4th Season – 5 day Season – Deer and Elk Combined – Opening on a Wednesday.

2015

Seasondates <- NULL
# 1st Separate Limited Elk 10/10-10/14
SeasondatesADD$Season <- 1
SeasondatesADD$Start <- unlist(strsplit("10/10-10/14",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("10/10-10/14",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)
# 2nd Combined Deer & Elk 10/17-10/25
SeasondatesADD$Season <- 2
SeasondatesADD$Start <- unlist(strsplit("10/17-10/25",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("10/17-10/25",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)
# 3rd Combined Deer & Elk 10/31-11/8
SeasondatesADD$Season <- 3
SeasondatesADD$Start <- unlist(strsplit("10/31-11/8",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("10/31-11/8",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)
# 4th Combined Limited Deer & Elk 11/11-11/15
SeasondatesADD$Season <- 4
SeasondatesADD$Start <- unlist(strsplit("11/11-11/15",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("11/11-11/15",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)

Seasondates$Year <- 2015
Seasondates$Start <- as.POSIXct(paste(Seasondates$Year,Seasondates$Start,sep = "/"))
Seasondates$End <- as.POSIXct(paste(Seasondates$Year,Seasondates$End,sep = "/"))
Seasondates1 <- rbind(Seasondates1,Seasondates)

2016

Seasondates <- NULL
# 1st Separate Limited Elk 10/15-10/19
SeasondatesADD$Season <- 1
SeasondatesADD$Start <- unlist(strsplit("10/15-10/19",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("10/15-10/19",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)
# 2nd Combined Deer & Elk 10/22-10/30
SeasondatesADD$Season <- 2
SeasondatesADD$Start <- unlist(strsplit("10/22-10/30",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("10/22-10/30",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)
# 3rd Combined Deer & Elk 11/5-11/13
SeasondatesADD$Season <- 3
SeasondatesADD$Start <- unlist(strsplit("11/5-11/13",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("11/5-11/13",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)
# 4th Combined Limited Deer & Elk 11/16-11/20
SeasondatesADD$Season <- 4
SeasondatesADD$Start <- unlist(strsplit("11/16-11/20",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("11/16-11/20",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)

Seasondates$Year <- 2016
Seasondates$Start <- as.POSIXct(paste(Seasondates$Year,Seasondates$Start,sep = "/"))
Seasondates$End <- as.POSIXct(paste(Seasondates$Year,Seasondates$End,sep = "/"))
Seasondates1 <- rbind(Seasondates1,Seasondates)

2017

Seasondates <- NULL
# 1st Separate Limited Elk 10/14-10/18
SeasondatesADD$Season <- 1
SeasondatesADD$Start <- unlist(strsplit("10/14-10/18",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("10/14-10/18",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)
# 2nd Combined Deer & Elk 10/21-10/29
SeasondatesADD$Season <- 2
SeasondatesADD$Start <- unlist(strsplit("10/21-10/29",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("10/21-10/29",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)
# 3rd Combined Deer & Elk 11/4-11/12
SeasondatesADD$Season <- 3
SeasondatesADD$Start <- unlist(strsplit("11/4-11/12",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("11/4-11/12",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)
# 4th Combined Limited Deer & Elk 11/15-11/19
SeasondatesADD$Season <- 4
SeasondatesADD$Start <- unlist(strsplit("11/15-11/19",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("11/15-11/19",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)

Seasondates$Year <- 2017
Seasondates$Start <- as.POSIXct(paste(Seasondates$Year,Seasondates$Start,sep = "/"))
Seasondates$End <- as.POSIXct(paste(Seasondates$Year,Seasondates$End,sep = "/"))
Seasondates1 <- rbind(Seasondates1,Seasondates)

2018

Seasondates <- NULL
# 1st Separate Limited Elk 10/13-10/17
SeasondatesADD$Season <- 1
SeasondatesADD$Start <- unlist(strsplit("10/13-10/17",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("10/13-10/17",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)
# 2nd Combined Deer & Elk 10/20-10/28
SeasondatesADD$Season <- 2
SeasondatesADD$Start <- unlist(strsplit("10/20-10/28",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("10/20-10/28",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)
# 3rd Combined Deer & Elk 11/3-11/11
SeasondatesADD$Season <- 3
SeasondatesADD$Start <- unlist(strsplit("11/3-11/11",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("11/3-11/11",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)
# 4th Combined Limited Deer & Elk 11/14-11/18
SeasondatesADD$Season <- 4
SeasondatesADD$Start <- unlist(strsplit("11/14-11/18",split = "-"))[1]
SeasondatesADD$End <- unlist(strsplit("11/14-11/18",split = "-"))[2]
Seasondates <- rbind(Seasondates,SeasondatesADD)

Seasondates$Year <- 2018
Seasondates$Start <- as.POSIXct(paste(Seasondates$Year,Seasondates$Start,sep = "/"))
Seasondates$End <- as.POSIXct(paste(Seasondates$Year,Seasondates$End,sep = "/"))
Seasondates1 <- rbind(Seasondates1,Seasondates)

Seasondates1$Duration <- round((Seasondates1$End - Seasondates1$Start) + 1) # Add season duration in days
Seasondates1
##    Season      Start        End Year Duration
## 1       1 2010-10-16 2010-10-20 2010   5 days
## 2       2 2010-10-23 2010-10-31 2010   9 days
## 3       3 2010-11-06 2010-11-14 2010   9 days
## 4       4 2010-11-17 2010-11-21 2010   5 days
## 5       1 2011-10-15 2011-10-19 2011   5 days
## 6       2 2011-10-22 2011-10-30 2011   9 days
## 7       3 2011-11-05 2011-11-13 2011   9 days
## 8       4 2011-11-16 2011-11-20 2011   5 days
## 9       1 2012-10-13 2012-10-17 2012   5 days
## 10      2 2012-10-20 2012-10-28 2012   9 days
## 11      3 2012-11-03 2012-11-11 2012   9 days
## 12      4 2012-11-14 2012-11-18 2012   5 days
## 13      1 2013-10-12 2013-10-16 2013   5 days
## 14      2 2013-10-19 2013-10-27 2013   9 days
## 15      3 2013-11-02 2013-11-10 2013   9 days
## 16      4 2013-11-13 2013-11-17 2013   5 days
## 17      1 2014-10-11 2014-10-15 2014   5 days
## 18      2 2014-10-18 2014-10-26 2014   9 days
## 19      3 2014-11-01 2014-11-09 2014   9 days
## 20      4 2014-11-12 2014-11-16 2014   5 days
## 21      1 2015-10-10 2015-10-14 2015   5 days
## 22      2 2015-10-17 2015-10-25 2015   9 days
## 23      3 2015-10-31 2015-11-08 2015   9 days
## 24      4 2015-11-11 2015-11-15 2015   5 days
## 25      1 2016-10-15 2016-10-19 2016   5 days
## 26      2 2016-10-22 2016-10-30 2016   9 days
## 27      3 2016-11-05 2016-11-13 2016   9 days
## 28      4 2016-11-16 2016-11-20 2016   5 days
## 29      1 2017-10-14 2017-10-18 2017   5 days
## 30      2 2017-10-21 2017-10-29 2017   9 days
## 31      3 2017-11-04 2017-11-12 2017   9 days
## 32      4 2017-11-15 2017-11-19 2017   5 days
## 33      1 2018-10-13 2018-10-17 2018   5 days
## 34      2 2018-10-20 2018-10-28 2018   9 days
## 35      3 2018-11-03 2018-11-11 2018   9 days
## 36      4 2018-11-14 2018-11-18 2018   5 days