如何只获得头等舱'两个相同类之间的数据

时间:2018-05-01 16:39:05

标签: python python-3.x beautifulsoup urllib

https://www.hltv.org/matches页面上,匹配除以日期,但类别相同。我的意思是,

这是今天的比赛等级

<div class="match-day"><div class="standard-headline">2018-05-01</div>

这是tommorow的比赛课。

<div class="match-day"><div class="standard-headline">2018-05-02</div>

我想做的是,我想获得标准标题下的链接&#34;上课,但只有今天的比赛。就像,获得唯一的第一个。

这是我的代码。

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 :(得分:1)

实际上,该网站首先显示今天的比赛(在顶部),然后是接下来的几天#39;因此,如果您想获得今天的比赛,只需使用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模块。