You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Web Scraping:如何提取并分类同一class的<td>元素对应数据?

解决方法

核心思路是遍历每个表格行(<tr>),通过同行的标题单元格(带review-rating-header类的<td>)来区分数据归属——每个<tr>正好对应一组标题和值,以此精准把每个review-value分到对应列表里。

完整代码示例

import requests
from bs4 import BeautifulSoup

# 初始化目标列表
aircraft_list = []
traveller_type_list = []
seat_type_list = []
route_list = []
date_flown_list = []

page = requests.get(url)
soup = BeautifulSoup(page.text, 'html.parser')
article = soup.find('article')
# 修正class名的空格问题,原输入的'review-  ratings'为无效格式,正确class是'review-ratings'
review_tables = article.find_all('table', class_='review-ratings')

# 遍历每个评论表格
for table in review_tables:
    # 获取当前表格内的所有行
    rows = table.find_all('tr')
    for row in rows:
        # 提取当前行的标题单元格和值单元格
        header_td = row.find('td', class_='review-rating-header')
        value_td = row.find('td', class_='review-value')
        if not header_td or not value_td:
            continue  # 跳过结构异常的无效行
        
        header_text = header_td.text.strip()
        value_text = value_td.text.strip()
        
        # 根据标题文本匹配对应列表
        if header_text == 'Aircraft':
            aircraft_list.append(value_text)
        elif header_text == 'Type Of Traveller':
            traveller_type_list.append(value_text)
        elif header_text == 'Seat Type':
            seat_type_list.append(value_text)
        elif header_text == 'Route':
            route_list.append(value_text)
        elif header_text == 'Date Flown':
            date_flown_list.append(value_text)

# 验证输出
print("Aircraft:", aircraft_list)
print("Type Of Traveller:", traveller_type_list)
print("Seat Type:", seat_type_list)
print("Route:", route_list)
print("Date Flown:", date_flown_list)

更稳健的判断方式(基于标题的二级class)

如果担心标题文本出现大小写、翻译或格式变化,可以用标题单元格的专属标识class(比如aircraft、type_of_traveller)来判断,替换上述代码中的匹配部分即可:

# 提取标题单元格的专属标识class
header_classes = header_td.get('class')
identifier_class = [cls for cls in header_classes if cls != 'review-rating-header'][0]

# 根据标识class匹配对应列表
if identifier_class == 'aircraft':
    aircraft_list.append(value_text)
elif identifier_class == 'type_of_traveller':
    traveller_type_list.append(value_text)
elif identifier_class == 'cabin_flown':
    seat_type_list.append(value_text)
elif identifier_class == 'route':
    route_list.append(value_text)
elif identifier_class == 'date_flown':
    date_flown_list.append(value_text)

关键注意点

  • 原代码中class_ = 'review- ratings'存在多余空格,会导致无法匹配表格,需修正为review-ratings。
  • 按行遍历匹配的方式不受表格行顺序影响,即使页面结构调整行的排列,依然能准确分类数据。
  • 加入无效行判断,避免页面结构异常时出现索引或属性报错。

内容的提问来源于stack exchange,提问作者Arek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 13:10:25