Как получить данные только первого класса между двумя одинаковыми классами

На странице 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.
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
0
101
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Собственно, на сайте сначала отображаются сегодняшние матчи (вверху), а потом уже следующие дни ». Итак, если вы хотите получить сегодняшние совпадения, вы можете просто использовать 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, используя родительский метод, верно?

user5743273 03.05.2018 02:54

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