но, к сожалению, он работает только для опции последнего сезона (2018/2019)
Сайт использует JavaScript для загрузки старой таблицы (1992-2017), поэтому при использовании Pythonчтобы получить доступ к последней таблице.Если вы хотите очистить фильтр таблиц по годам / сессиям, я предоставлю вам версию жесткого кода (потому что я не нашел правило номера года).Но вы хотите завершить это более элегантно, селен или запросы_html может подойти для вас.
Примечание: Я имитирую данные, полученные с помощью JavaScript, с сервера, поэтому содержимое ответа имеет тип json.И он может получить только таблицу премьер-лиги другого года. Фильтр по соревнованию / matchweek / home_or_away недоступен в моем примере.Если вы хотите добавить эту опцию в скрипт, вам следует проанализировать правило параметра url (используйте способ, описанный @pguardiario, или использовать некоторые инструменты, такие как fiddler).
import requests
from pprint import pprint
years = {str(1991+i):str(i) for i in range(1,23)}
years.update({
"2018":"210",
"2017":"79",
"2016":"54",
"2015":"42",
"2014":"27"
})
specific = years.get("2017")
param = {
"altIds":"true",
"compSeasons":specific,
"detail":2,
"FOOTBALL_COMPETITION":1
}
headers = {
"Origin": "https://www.premierleague.com",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
"Referer": "https://www.premierleague.com/tables?co=1&se={}&ha=-1".format(specific),
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
}
page = requests.get('https://footballapi.pulselive.com/football/standings',
params=param,
headers=headers
)
print(page.url)
pprint(page.json())
Как получить разные таблицыс одной страницы
Я чувствую, что название вашего вопроса отличается от вашего описания.Если это правда, другая проблема заключается в том, что вы объединяете все таблицы в одну.И вам следует позаботиться о //
Что означает .// в XPath? .
Примечание: Если вы хотите получить старые данные Премьер-лигиТаблица, используйте мой код в 1-й части. Поскольку эти данные могут быть получены только таким образом.
from lxml import html
import requests
from pprint import pprint
years = {str(1991+i):str(i) for i in range(1,23)}
years.update({
"2018":"210",
"2017":"79",
"2016":"54",
"2015":"42",
"2014":"27"
})
param = {
"co":"1",
"se":years.get("2017"),
"ha":"-1"
}
page = requests.get('https://www.premierleague.com/tables', params=param)
tree = html.fromstring( page.content )
tables = tree.xpath('//tbody[contains(@class,"tableBodyContainer")]')
each_table_team_rows = [table.xpath('tr[@data-filtered-table-row-name]') for table in tables]
team_names = [[i.attrib['data-filtered-table-row-name'] for i in team_rows] for team_rows in each_table_team_rows]
pprint(team_names)