Scrapy遍历表格:请求新增球员罚单类型与时间提取代码
修改后的Scrapy代码(支持提取球员罚单类型与时间)
针对你提供的代码,我们可以调整球员数据的存储结构,同时新增罚单信息的提取逻辑,具体修改如下:
team1_data = {} for table in cols[0].css(".acta-table"): # 提取表格标题 table_heading = table.css("thead th::text").get() table_data = {} # 当前表格的数据容器 if table_heading == "Equip Tècnic": # 技术团队数据处理(保持原有逻辑) table_data = [] for row in table.css("tbody tr"): table_data.append(row.css("td.tc::text").get()) else: # 球员数据处理:新增罚单提取逻辑 for row in table.css("tbody tr"): player_number = row.css("span.num-samarreta-acta2::text").get() player_name = row.css("td a::text").get() # 初始化球员字典,包含姓名和罚单列表 player_info = { "name": player_name, "bookings": [] } # 提取罚单信息:遍历当前行的所有罚单元素 for booking in row.css("td.acta-tarjetes span"): # 罚单类型:通过class判断(比如黄牌是acta-groc,红牌是acta-vermell) booking_class = booking.attrib.get("class", "") if "acta-groc" in booking_class: booking_type = "黄牌" elif "acta-vermell" in booking_class: booking_type = "红牌" else: booking_type = "其他罚单" # 罚单时间:获取相邻的文本节点 booking_time = booking.xpath("following-sibling::text()[1]").get(default="").strip() # 将罚单信息添加到球员的罚单列表 if booking_type and booking_time: player_info["bookings"].append({ "type": booking_type, "time": booking_time }) # 将球员信息存入表格数据 if player_number: table_data[player_number] = player_info # 将当前表格数据存入球队总数据 team1_data[table_heading] = table_data
关键修改说明:
- 数据结构调整:将原有的
{球员号码: 姓名}改为{球员号码: {"name": 姓名, "bookings": []}},确保能存储多组罚单信息 - 罚单类型识别:通过罚单元素的CSS class判断类型(可根据目标页面实际class调整,比如
acta-groc对应黄牌,acta-vermell对应红牌) - 罚单时间提取:使用XPath的
following-sibling获取罚单元素旁的时间文本,确保关联准确 - 容错处理:添加
default=""和strip()处理空值或多余空格,避免数据混乱
内容的提问来源于stack exchange,提问作者Fan Santboia
相关产品推荐
相关产品推荐

