使用Python从HTML提取玩家ID遇问题求助
解决特殊格式href的玩家ID提取问题
嘿,我之前也碰到过类似的情况!从你说的每行都返回{}来看,肯定是你的元素选择器没命中目标——毕竟这个网站的href格式比较特殊,常规的匹配逻辑可能没覆盖到。
先结合你给出的部分HTML片段(<tr data-row="248">那行),目标IDlynnla02应该是嵌在对应行的<a>标签href里对吧?我给你几个靠谱的解决思路,用Python的BeautifulSoup举例(毕竟这是最常用的HTML提取工具):
1. 用正则匹配含目标ID的href
直接通过正则锁定包含lynnla02的<a>标签,再从href里抠出ID:
from bs4 import BeautifulSoup import re # 把你的网页源代码赋值给html变量 soup = BeautifulSoup(html, 'html.parser') # 匹配href中包含lynnla02的<a>标签 target_link = soup.find('a', href=re.compile(r'lynnla02')) if target_link: # 从href里提取ID,比如href是"/players/lynnla02"的话,split后取最后一段 player_id = target_link['href'].split('/')[-1] print({"player_id": player_id}) else: print("没找到目标ID哦")
2. 遍历所有链接筛选
如果不确定标签位置,直接遍历页面所有<a>标签,检查href里是否包含目标ID:
for a_tag in soup.find_all('a'): href = a_tag.get('href', '') if 'lynnla02' in href: player_id = href.split('/')[-1] print({"player_id": player_id}) break # 找到第一个就停,省得遍历全部
3. 先定位表格行再找链接
既然你给出了<tr data-row="248">,可以先精准定位到这一行,再找里面的链接:
target_row = soup.find('tr', attrs={'data-row': '248'}) if target_row: target_link = target_row.find('a') if target_link and 'lynnla02' in target_link['href']: player_id = target_link['href'].split('/')[-1] print({"player_id": player_id})
核心逻辑就是:不要硬写固定的href格式,而是通过目标ID来反向匹配,这样不管href是相对路径还是带其他前缀,都能命中。你之前返回空字典,就是因为选择器没找到对应的元素,导致提取的内容为空~
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

