美丽的汤:如果特定的孩子有某个类,则只有目标元素

时间:2016-02-14 00:25:59

标签: python beautifulsoup

我正在为练习做一些蟒蛇/美丽的汤练习,而且我遇到了一个我正在努力解决的问题:我想迭代一系列标签,但如果内容包含具有特定类的子标记,则仅抓取内容。

我正在解析一个包含体育比分的页面,找到所有<section class="game">个标签并在其中抓取表格。问题是,我只希望定位<section>内置<div>内置class="game-status final "的代码。 (&#34; final&#34;之后的空间是故意的;它是如何在页面上的。)

以下是HTML的示例:

<section class="game">
    <h3>Team No. 1 vs Team No. 2</h3>
    <div class="game-contents">
        <div class="game-status final ">Final</div>
        <div class="game-championship"></div>
        <div class="linescore">
            <table class="linescore">
                <!-- TABLE CONTENTS -->
            </table>
        </div>
        <div class="links final "></div>
    </div>
</section>

在游戏进入决赛之前,div下的第一个div.game-contents<div class="game-status">,所以这就是为什么我要检查此标记以确定游戏是否是最终的 - 因此应该被刮掉了。

这是我用来抓取这些表格的代码:

games = soup.find_all('section', class_='game')

list_of_games = []
for game in games:
    list_of_rows = []
    rows = game.find_all('tr')[1:]
    for row in rows:
        list_of_cells = []
        cells = row.find_all('td')
        for cell in cells:
            if 'school' in cell.attrs['class']:
                team = cell.find('a').text
                list_of_cells.append(team)
            elif 'final' in cell.attrs['class']:
                score = cell.text
                list_of_cells.append(score)
        list_of_rows.append(list_of_cells)
    list_of_games.append(list_of_rows)

显然,我需要引入新的逻辑来确定<section>是否具有正确的属性,然后我才能抓住它,但我在最佳方法上留下了空白。< / p>

非常感谢任何帮助或指导!

1 个答案:

答案 0 :(得分:2)

使用div类找到final,如果是None,请跳过此行:

games = soup.find_all('section', class_='game')

list_of_games = []
for game in games:
    if game.find("div", class_="final") is None:
        continue
    # rest of the code