Я написал приведенный ниже код, пытаясь практиковаться в просмотре веб-страниц с помощью Python, Pandas и т. Д. В целом у меня есть четыре шага, которые я пытаюсь выполнить для достижения желаемого результата:
- Получить список имен для добавления в базовый URL
- Создать список специфичных для игрока URL
- Используйте URL-адреса игроков для очистки таблиц
- добавить имя игрока в таблицу, которую я вычеркнул, чтобы отследить, какой игрок принадлежит к какой статистике - поэтому в каждом ряду таблицы добавьте столбец с именем игрока, который использовался для очистки таблицы
Мне удалось заставить # 1 и 2 работать. Компоненты # 3, кажется, работают, но я полагаю, что у меня что-то не так с моей попыткой: за исключением того, что если я запускаю только строку кода, чтобы очистить определенный playerUrl, таблицы DF заполняются, как и ожидалось. У первого игрока нет данных, поэтому я считаю, что мне не удается поймать ошибку.
Для # 4 я действительно не смог найти решение. Как добавить имя в список, поскольку оно повторяется в цикле for?
Любая помощь приветствуется.
import requests
import pandas as pd
from bs4 import BeautifulSoup
### get the player data to create player specific urls
res = requests.get("https://www.mlssoccer.com/players?page=0")
soup = BeautifulSoup(res.content,'html.parser')
data = soup.find('div', class_ = 'item-list' )
names=[]
for player in data:
name = data.find_all('div', class_ = 'name')
for obj in name:
names.append(obj.find('a').text.lower().lstrip().rstrip().replace(' ','-'))
### create a list of player specific urls
url = 'https://www.mlssoccer.com/players/'
playerUrl = []
x = 0
for name in (names):
playerList = names
newUrl = url + str(playerList[x])
print("Gathering url..."+newUrl)
playerUrl.append(newUrl)
x +=1
### now take the list of urls and gather stats tables
tbls = []
i = 0
for url in (playerUrl):
try: ### added the try, except, pass because some players have no stats table
tables = pd.read_html(playerUrl[i], header = 0)[2]
tbls.append(tables)
i +=1
except Exception:
continue