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

如何从游戏王卡片搜索页面提取cid值并构建详情URL?

解决游戏王卡片CID提取问题

问题根源

你当前代码尝试直接通过card_links[0]['cid']获取CID,但实际上目标元素的CID并非直接作为cid属性存在,而是存储在**data-cid属性**或者嵌套元素的onclick事件参数中(取决于页面实际结构)。

修正方案

方案1:提取data-cid属性

如果打印card_links[0]时看到类似<div class="t_row c_normal" data-cid="12345">的结构,修改CID提取代码:

# 替换原cid提取行
cid = card_links[0]['data-cid']

方案2:从onclick事件中提取CID

如果CID是在嵌套的a标签的onclick事件里(比如onclick="cardView('12345')"),用以下代码提取:

# 找到div内的a标签
card_a_tag = card_links[0].find('a')
# 解析onclick字符串获取CID
onclick_content = card_a_tag['onclick']
# 拆分字符串提取引号内的CID值
cid = onclick_content.split("'")[1]

额外修正:卡片名称提取错误

原代码中soup.find('card_name', class_='card_status_title')是错误的,card_name不是HTML标签,实际页面中卡片名称通常在div标签里,修正为:

card_name = soup.find('div', class_='card_status_title').text.strip()

完整修正后的代码

import requests
from bs4 import BeautifulSoup

def search_card1(p_message):
    url = f"https://www.db.yugioh-card.com/yugiohdb/card_search.action?ope=1&amp;sess=1&amp;rp=10&amp;mode=&amp;sort=1&amp;keyword={p_message}&amp;stype=1&amp;ctype=&amp;othercon=2&amp;starfr=&amp;starto=&amp;pscalefr=&amp;pscaleto=&amp;linkmarkerfr=&amp;linkmarkerto=&amp;link_m=2&amp;atkfr=&amp;atkto=&amp;deffr=&amp;defto="
    response = requests.get(url)
    soup = BeautifulSoup(response.content, 'html.parser')
    
    card_links = soup.find_all('div', class_='t_row c_normal')
    if not card_links:
        return "No results found."
    
    # 这里用方案1的data-cid提取,根据实际情况切换方案2
    cid = card_links[0]['data-cid']
    card_url = f'https://www.db.yugioh-card.com/yugiohdb/card_search.action?ope=2&amp;cid={cid}'
    response = requests.get(card_url)
    
    soup = BeautifulSoup(response.content, 'html.parser')
    # 修正卡片名称提取
    card_name = soup.find('div', class_='card_status_title').text.strip()
    # 卡片"age"实际是卡片编号或其他信息,可根据页面结构调整索引
    card_info = soup.find('div', class_='box_card_info').find_all('span')[1].text.strip()
    
    return f"Card Name: {card_name}\nInfo: {card_info}"

p_message = 'Dark+Magician'
card_data = search_card1(p_message)
print(card_data)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:07:17