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

网页特殊格式数据解析:Scrapy抓取足球联赛特殊编码数据问询

特殊赛事数据解析方案(Scrapy环境)

这是体育类站点常用的自定义分隔符序列化数据,未经过加密,仅用特殊符号做字段分隔:~为数据块分隔符,¬为键值对分隔符,÷为键和值的分隔符,无需使用动态渲染工具即可直接解析。

具体解析步骤
  • 第一步:在Scrapy的响应回调中,通过XPath //pre/code/text() 直接提取原始字符串,自动过滤掉外层HTML标签
  • 第二步:按~拆分原始字符串得到独立数据块,数据块分为两类:前缀为ZA的联赛分类块、前缀为AA的具体赛事块
  • 第三步:遍历每个数据块,用¬拆分得到单组键值对,再用÷拆分每个键值对的键和值,组装为字典格式
  • 第四步:维护当前联赛变量,碰到ZA分类块时更新当前联赛信息,后续AA赛事块直接关联当前联赛信息即可
示例解析代码
import time

def parse_sport_data(raw_str):
    # 清洗首尾空白字符
    raw_str = raw_str.strip()
    # 拆分数据块
    blocks = raw_str.split('~')
    result = []
    # 存储当前所属联赛信息
    current_league = {}
    for block in blocks:
        if not block:
            continue
        # 拆分单块内的所有键值对
        kv_pairs = block.strip('¬').split('¬')
        block_dict = {}
        for kv in kv_pairs:
            if '÷' not in kv:
                continue
            # 仅分割一次,避免值中包含分隔符导致解析错误
            k, v = kv.split('÷', 1)
            block_dict[k] = v
        # 处理联赛分类块
        if 'ZA' in block_dict:
            current_league = {
                'league_full_name': block_dict.get('ZA', ''),
                'country': block_dict.get('ZY', ''),
                'league_page_path': block_dict.get('ZL', '')
            }
        # 处理赛事详情块
        elif 'AA' in block_dict:
            match_info = current_league.copy()
            match_info.update({
                'match_id': block_dict.get('AA', ''),
                'match_start_time': time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(int(block_dict.get('AD', 0)))),
                'round': block_dict.get('ER', ''),
                'home_team_name': block_dict.get('AE', ''),
                'away_team_name': block_dict.get('AF', ''),
                'home_full_score': int(block_dict.get('AG', 0)),
                'away_full_score': int(block_dict.get('AH', 0)),
                'home_half_score': int(block_dict.get('BA', 0)),
                'away_half_score': int(block_dict.get('BB', 0))
            })
            result.append(match_info)
    return result

你可以根据自身需求,提取块字典中其他需要的字段,比如球队ID、队徽地址、赛事状态等。

注意事项
  • 键值对拆分时限制拆分次数为1,可兼容部分值中包含分隔符的特殊场景
  • 原始数据中的时间为10位秒级时间戳,可根据需求转换为UTC时间或其他时区时间
  • 新增自定义提取字段时建议设置默认值,避免部分缺失字段抛出KeyError

内容的提问来源于stack exchange,提问作者Syed Abbad Ul Haq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 21:15:04