首页 > 解决方案 > 在 python bs4.element.ResultSet 中过滤具有特定类的元素

问题描述

我们正在抓取此页面上的主表格 - https://www.metacritic.com/browse/albums/release-date/available/date?view=detailed - 我们有以下内容来抓取表格:

import requests
from bs4 import BeautifulSoup

# grab page and soup it
headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36' }
metacritic_url = 'https://www.metacritic.com/browse/albums/release-date/available/date?view=detailed'
metacritic_page = requests.get(metacritic_url, headers=headers)
metacritic_soup = BeautifulSoup(metacritic_page.text, "html.parser")

# extract scores from page
all_trs = metacritic_soup.find_all('tr')

中的所有其他tr元素all_trs都是空tr的,其类为spacer.

all_trs[0] # not empty
all_trs[1] # empty tr

类型all_trsbs4.element.ResultSet。我们如何过滤以删除确实具有类的tr元素留下所有其他元素?all_trsspacer

标签: pythonbeautifulsouppython-requests

解决方案


选择时过滤

只需选择<tr>没有class命名的spacer

metacritic_soup.select('tr:not(.spacer)')

过滤结果集

如果classnamedspacer每隔一个<tr>就做list slicing- 2 是间隔,每秒:

metacritic_soup.select('tr')[::2]

推荐阅读