Как получить данные только первого класса между двумя одинаковыми классами - PullRequest
0 голосов
/ 01 мая 2018

На странице 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.

1 Ответ

0 голосов
/ 02 мая 2018

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

...