Я подозреваю, что js отображает правильное время, потому что если вы отключите js в своем brwser, вы получите те же результаты, что и в вашем скрипте python.
Обычно при разборе динамического содержимого решением является selenium
или аналогичные клиенты, но в этом случае в атрибутах вашего тега есть метка времени unix (data-unix), которую мы можем использовать для получения правильного времени.
import datetime
import requests
from bs4 import BeautifulSoup
r = requests.get('http://hltv.org/matches')
sauce = r.text
soup = BeautifulSoup(sauce, 'lxml')
matchlinks_um = []
for links in soup.find(class_="standard-headline", text=(datetime.date.today())).find_parent().find_all(
class_="upcoming-match"):
matchlinks_um.append('https://hltv.org' + links.get('href'))
for link in matchlinks_um:
r = requests.get(link)
soup = BeautifulSoup(r.text, 'lxml')
a = soup.find('div', class_='time')['data-unix']
t = datetime.datetime.fromtimestamp(int(a[:10])).time()
print(t)
Обратите внимание, что t
является datetime.time
объектом, но вы можете легко преобразовать его в строку, если хотите.
Также при разборе html лучше использовать .text
, поскольку он содержит декодированный контент.
Но даже если у тега нет атрибута «data-unix», мы все равно можем получить правильное время, добавив один час к значению текста тега с помощью timedelta
. Например:
s = '15:30'
dt = datetime.datetime.strptime(s, '%H:%M') + datetime.timedelta(hours=1)
t = dt.time()
print(t)
#16:30:00
s
- это строка со значением «15: 30» (формат H: M), аналогичная тем, которые мы получаем с веб-сайта. Когда мы передаем эту строку в strptime
, мы получаем объект datetime
, так что теперь мы можем добавить один час с timedelta
.
dt
- это объект datetime
со значением 1900-01-01 16:30:00
(15:30 + 1 час). Вызывая метод .time
, мы получаем объект datetime.time
.
t
является datetime.time
объектом со значением 16:30:00
. Вы можете получить час с помощью t.hour
(целое число), или сделать больше вычислений, или преобразовать его в строку или оставить как есть.
Суть в том, что t
составляет s
+ 1 час.
Что касается атрибута data-unix, я не знаю, является ли он стандартным атрибутом (впервые вижу его), поэтому не думаю, что вы найдете его на других сайтах.