Анализ прогнозов фэнтези-футбола NFL.com с помощью Python

Я хочу очистить данные на http://fantasy.nfl.com/research/projection в простой фрейм данных pandas, используя Python Beautiful Soup и библиотеки запросов. Я использовал следующий код:

a = "http://fantasy.nfl.com/research/projections"
req = requests.get(a)
soup = bs4.BeautifulSoup(req.text,"html.parser")

Моя цель - еженедельно собирать данные для каждой позиции. Однако данные, полученные из этого, являются итогом сезона 2018 года. Похоже, что никаких расколов нет. Как я могу разделить его так, чтобы данные, которые я очищаю, отображались, если выбран вариант «Неделя 1» (например).

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
758
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете сделать это довольно легко, проанализировав URL-адреса из раздела пагинации.

Вы можете видеть, что у них есть конечная точка statWeek=. Мы можем просто включить желаемую неделю и получить результаты с этой страницы. Вот пример сценария, который захватывает имя игрока, очки фантазии (прогнозируемые?) И номер недели для первых 25 недель и сохраняет их в фреймворке Pandas.

def get_weekly_players(res):
    res_list = list() 
    week = url.split('statWeek=')[1]
    player_rows = res.find_all('tr')
    for row in player_rows:
        name = row.find('a', 'playerCard')
        points = row.find('td', 'stat_30')
        if name and points:
            res_list.append((name.text, float(points.text), int(week)))
    return res_list       

Мы определяем функцию для извлечения желаемой информации из проанализированного HTML.

Затем мы просто перебираем номера недель и расширяем результаты кортежа до списка.

all_res = list()
for week in range(0, 25):
    url = '''http://fantasy.nfl.com/research/projections?position=O&sort=projectedPts&statCategory=projectedStats&statSeason=2018&statType=weekProjectedStats&statWeek = {}'''.format(week)
    req = requests.get(url)
    soup = BeautifulSoup(req.text,"html.parser")
    res = get_weekly_players(soup)
    all_res.extend(res)

Затем мы можем передать результаты конструктору фрейма данных Pandas, и все готово.

player_df = pd.DataFrame(all_res, columns=['player', 'points', 'week'])

Вы можете видеть, что у нас есть результаты за все 25 недель.

player_df.describe()
          points      week
count   625.00000   625.000000
mean    3.22840     12.000000
std     0.37989     7.216878
min     2.14000     0.000000
25%     3.17000     6.000000
50%     3.30000     12.000000
75%     3.40000     18.000000
max     3.66000     24.000000

Спасибо, @ Стивен! У меня есть несколько вопросов. "player_rows" не определено в функции, но я предполагаю, что это список? Правильно ли я предположил, что функция должна принимать дополнительный аргумент «суп», который затем каким-то образом разбивается на переменную «player_rows». Я не уверен, как сделать этот последний шаг?

OD1995 12.08.2018 16:48

Упс, забыл добавить туда ступеньку. Я отредактировал пост. Сообщите мне, работает ли это для вас (вы можете принять ответ).

Steven 12.08.2018 22:13

Другие вопросы по теме