На странице https://www.hltv.org/matches совпадения разделены по датам, но классы совпадают. Я имею в виду,
Это сегодняшний матч-класс
<div class = "match-day"><div class = "standard-headline">2018-05-01</div>
Это завтрашний матч-класс.
<div class = "match-day"><div class = "standard-headline">2018-05-02</div>
Что я пытаюсь сделать, так это получить ссылки под классом «стандартный заголовок», но только на сегодняшние совпадения. Мол, получить единственный первый.
Вот мой код.
import urllib.request
from bs4 import BeautifulSoup
headers = {} # Headers gives information about you like your operation system, your browser etc.
headers['User-Agent'] = 'Mozilla/5.0' # I defined a user agent because HLTV perceive my connection as bot.
hltv = urllib.request.Request('https://www.hltv.org/matches', headers=headers) # Basically connecting to website
session = urllib.request.urlopen(hltv)
sauce = session.read() # Getting the source of website
soup = BeautifulSoup(sauce, 'lxml')
matchlinks = []
# Getting the match pages' links.
for links in soup.find_all('div', class_='upcoming-matches'): # Looking for "upcoming-matches" class in source.
for links in soup.find_all('a'): # Finding "a" tag under "upcoming-matches" class.
clearlink = links.get('href') # Getting the value of variable.
if clearlink.startswith('/matches/'): # Checking for if our link starts with "/matches/"
matchlinks.append('https://hltv.org' + clearlink) # Adding into list.
Собственно, на сайте сначала отображаются сегодняшние матчи (вверху), а потом уже следующие дни ». Итак, если вы хотите получить сегодняшние совпадения, вы можете просто использовать find()
, который возвращает найденное совпадение первый.
Использование этого даст вам то, что вы хотите:
today = soup.find('div', class_='match-day')
Но если вы хотите явно указать дату, вы можете найти тег, содержащий сегодняшнюю дату, используя text='2018-05-02'
в качестве параметра для метода find()
. Но обратите внимание, что в исходном коде страницы используется тег <span class = "standard-headline">2018-05-02</span>
, а не тег <div>
. После получения этого тега используйте .parent
, чтобы получить тег <div class = "match-day">
.
today = soup.find('span', text='2018-05-02').parent
Опять же, если вы хотите сделать решение более универсальным, вы можете использовать datetime.date.today()
вместо жестко заданной даты.
today = soup.find('span', text=datetime.date.today()).parent
Для этого вам нужно будет импортировать модуль datetime
.
Безумие видеть, что иногда решение бывает таким простым, но вы не можете его найти или увидеть, пока вы слишком заняты им. Спасибо. Кстати, поправьте меня, если я ошибаюсь, но вы сначала находите диапазон, чем получаете div, используя родительский метод, верно?