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

如何从HTML元素提取href?Telegram bot开发HLTV赛事链接抓取问题

错误点说明

你原有代码的逻辑存在两处核心问题:

  • soup.find("div", class_="upcomingMatchesSection")返回的是单个父容器节点,直接遍历该节点拿到的是它的所有子元素(包含无用的文本节点、分隔标签),而非你需要的独立赛事卡片
  • 赛事详情的跳转链接没有存放在容器节点的属性中,是嵌套在每个upcomingMatch类div内部的a标签的href属性里,原有取值逻辑完全错位

修正后可运行代码

elif message.text == "Matches":
    url_news = "https://www.hltv.org/matches"
    # 配置请求头避免被HLTV的反爬拦截
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
    }
    response = requests.get(url_news, headers=headers)
    soup = BeautifulSoup(response.content, "html.parser")
    match_info = []
    # 直接定位所有赛事卡片节点
    match_items = soup.find_all("div", class_="upcomingMatch")
    for item in match_items:
        # 提取卡片内的跳转a标签
        link_tag = item.find("a")
        if not link_tag or not link_tag.get("href"):
            continue
        # 拼接完整访问链接(HLTV默认返回相对路径)
        full_match_link = f"https://www.hltv.org{link_tag['href']}"
        # 可根据需要单独提取赛事名、对阵双方、时间字段,避免整段text冗余
        match_title = item.get_text(strip=True)
        match_info.append({
            "link": full_match_link,
            "title": match_title
        })

额外注意事项

  • HLTV反爬机制严格,请求间隔建议控制在3秒以上,避免IP被封禁
  • 若需要精准提取赛事信息,可单独定位matchTeam、matchTime、eventName类节点提取对应文本,比直接获取整个卡片的文本更整洁
  • 提取属性前务必做非空判断,避免遇到结构异常的节点时报错终止程序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:39:02