如何从游戏王卡片搜索页面提取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&sess=1&rp=10&mode=&sort=1&keyword={p_message}&stype=1&ctype=&othercon=2&starfr=&starto=&pscalefr=&pscaleto=&linkmarkerfr=&linkmarkerto=&link_m=2&atkfr=&atkto=&deffr=&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&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
相关产品推荐
相关产品推荐

