學會“讀網頁”:生成式 AI 在足球賽事信息整理中的實戰

爬蟲代理
逐步教程(Step-by-Step) — 適合初學者與教學類文章

背景(為什么要這樣做)

對于足球迷、資訊編輯與數據分析師來說,最快、最準確把握一場比賽的核心信息至關重要:比分、關鍵事件(進球、點球、紅黃牌、換人、判罰爭議等)、以及球員表現。傳統基于規則的爬蟲在面對不同媒體頁面與頻繁改版時常顯笨拙:XPath/正則需要頻繁維護,動態加載內容常常漏抓。

引入生成式 AI(Large Language Models, LLM)后,我們可以把抓到的比賽報道或直播實錄交給模型,讓它“讀懂”文章并輸出結構化結果(JSON),同時生成簡明的自然語言摘要,極大提高抽取的魯棒性與可讀性。本教程以實戰角度,演示如何抓取 ESPN、虎撲、騰訊體育 三類站點關于五大聯賽(英超、西甲、德甲、意甲、法甲)的比賽報道,并用 AI 總結比分、關鍵事件與球員表現。

環境準備(快速清單)

  • Python 3.9+
  • 安裝必要依賴:
pip install requests beautifulsoup4 playwright
playwright install

(若使用外部 LLM SDK,再安裝對應庫;若只做靜態抓取可不安裝 Playwright)

  • 代理(示例:爬蟲代理)—— 生產環境請用你自己的憑證并通過環境變量或密鑰管理存儲:
    • 域名:proxy.16yun.cn(示例)
    • 端口:3100
    • 用戶名:16YUN、密碼:16IP(示例,請替換)
  • 目標站點示例:
    • ESPN 足球:https://www.espn.com/soccer/
    • 虎撲足球:https://soccer.hupu.com/
    • 騰訊體育足球頻道:https://sports.qq.com/soccer/(站點結構會變,按實際頁面定位)

高層流程(核心步驟)

  1. 采集(抓取):通過代理請求或用 Playwright 渲染頁面,獲得完整 HTML/文本。
  2. 清洗(預處理):去除腳本、廣告、無關導航文本,合并段落,獲得可讀文本片段。
  3. 分塊:將長文本按模型上下文限制切分(保留比賽關鍵段落完整性)。
  4. 調用 LLM 抽取:把文本與明確的 prompt 一起發給 LLM,要求返回結構化 JSON(例如:比賽基本信息、事件列表、球員表現)。
  5. 校驗與落地:對 LLM 返回做 schema 校驗(例如:比分格式、時間合法性),保存到數據庫或 JSON 文件;對低置信結果標注回流以便人工復核并改進 prompt。
  6. 可視化/下游:生成比分時間線、關鍵事件標簽云、球員評分面板等。

關鍵設計要點(實踐建議)

  • 多來源聚合:同一場比賽建議抓取賽后報道、賽事直播頁面與賽后評論三類頁面,合并信息能提高完整性與準確度。
  • Prompt 設計:在 prompt 中提供明確返回 schema(要求只輸出 JSON 且字段名固定),并給出示例。
  • 后驗校驗:用正則或簡單規則驗證日期/分鐘格式、進球數是否一致,防止 hallucination。
  • 費用與性能策略:先用輕量模型做命中過濾(是否為目標聯賽/是否為比賽報道),再將真正需要深度解析的文本送入大型模型,節省調用成本。
  • 合規性:遵循目標站點的 robots.txt 與版權/轉載規則;對含個人信息的內容注意合規與隱私。

示例代碼(精煉版,易讀為主)

下面給出一個精簡、可運行的示例骨架,演示從網頁抓文本并調用偽 LLM 接口獲得結構化輸出。請把偽接口替換成你實際使用的 LLM SDK 或公司內部服務;把代理憑證替換為生產憑證。

# file: football_ai_pipeline.py
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import json, time, os# ---設置代理(億牛云示例 www.16yun.cn) ---
PROXY_HOST = os.getenv("PROXY_HOST", "proxy.16yun.cn")
PROXY_PORT = os.getenv("PROXY_PORT", "3100")
PROXY_USER = os.getenv("PROXY_USER", "16YUN")
PROXY_PASS = os.getenv("PROXY_PASS", "16IP")
proxy_url = f"http://{PROXY_USER}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}"
proxies = {"http": proxy_url, "https": proxy_url}HEADERS = {"User-Agent": ("Mozilla/5.0 (Windows NT 10.0; Win64; x64) ""AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120 Safari/537.36")
}def fetch_html(url, use_proxy=True, timeout=15):kwargs = {"headers": HEADERS, "timeout": timeout}if use_proxy:kwargs["proxies"] = proxiesresp = requests.get(url, **kwargs)resp.raise_for_status()return resp.textdef extract_text(html):soup = BeautifulSoup(html, "lxml")for tag in soup(["script", "style", "noscript", "header", "footer", "aside"]):tag.decompose()texts = [s.strip() for s in soup.stripped_strings]return "\n".join(texts)def call_llm_for_match(text_snippet):"""將文本片段送給 LLM 并返回結構化字典。在此用示例返回占位數據;生產環境替換為真實 API 調用并處理返回結果。"""# 示例返回結構(實際按你的 schema 定制)return {"league": "英超","home_team": "曼聯","away_team": "利物浦","score": "2-1","events": [{"minute": 14, "type": "goal", "team": "曼聯", "player": "拉什福德"},{"minute": 46, "type": "goal", "team": "利物浦", "player": "薩拉赫"},{"minute": 78, "type": "goal", "team": "曼聯", "player": "B費"}],"player_summary": "拉什福德狀態出色,門將幾次關鍵撲救,替補球員改變了戰局。"}def process_match_url(url):html = fetch_html(url)text = extract_text(html)# 若文本過長,可切分并合并 LLM 輸出snippet = text[:5000]  # 示例截斷,按模型上下文調整result = call_llm_for_match(snippet)# 后驗簡單校驗(示例)if "score" in result:pass  # 在此做正則或數值校驗return resultif __name__ == "__main__":urls = ["https://www.espn.com/soccer/report?gameId=xxxx",  # 替換為實際賽報鏈接"https://soccer.hupu.com/games/xxxx","https://sports.qq.com/a/xxxx.htm"]results = []for u in urls:try:r = process_match_url(u)results.append(r)except Exception as e:print("抓取/解析失敗:", u, e)time.sleep(1.5)with open("matches_aggregated.json", "w", encoding="utf-8") as f:json.dump(results, f, ensure_ascii=False, indent=2)

常見問題與排查建議

  • 頁面是空白或只剩殼:多數是前端渲染,改用 Playwright/Selenium 或分析 XHR 請求直接調用后端接口。
  • 抓到的“報道”是簡短新聞稿,細節不足:同時抓取直播實錄(live blog)或賽后深度評述頁,合并信息。
  • LLM 輸出里出現“虛構”事件:增加 prompt 約束(要求基于給定文本輸出),并對關鍵字段做規則校驗;對低置信度結果人工復核。
  • 被目標站點限制訪問:降低請求速率、使用合規的代理池、并遵守站點授權與版權政策。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/98033.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/98033.shtml
英文地址,請注明出處:http://en.pswp.cn/web/98033.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

BM3D 圖像降噪快速算法的 MATLAB 實現

BM3D 圖像降噪快速算法的 MATLAB 實現1. 快速 BM3D 算法流程(概述)步驟操作加速技巧① 分組塊匹配 堆疊FFT 互相關② 協同濾波3D 變換 硬閾值FFT 沿第三維③ 聚合加權平均稀疏矩陣累加 2. 核心函數(單文件版) 保存為 bm3d_fast.…

Go的schedt調度(runtime/proc.go)

1. 創建go的入口函數// Create a new g running fn. // Put it on the queue of gs waiting to run. // The compiler turns a go statement into a call to this. func newproc(fn *funcval) {gp : getg()pc : sys.GetCallerPC()systemstack(func() {newg : newproc1(fn, gp, …

Ubuntu 服務器配置轉發網絡訪問

配置文檔:Ubuntu 服務器轉發網絡訪問 一、網絡拓撲以以下網絡拓撲為示例Ubuntu 服務器(兩個網卡) eth1 10.66.71.222 (接入內網)eno1 192.168.2.100 (直連相機) 相機ip 192.168.2.1 Windows 客…

為什么企業需要高防IP

1. 抵御日益猖獗的DDoS攻擊 現代DDoS攻擊規模已突破Tbps級別 傳統防火墻無法應對大規模流量攻擊 高防IP采用分布式清洗中心,可輕松抵御300Gbps以上的攻擊流量 2. 保障業務連續性 網絡中斷1小時可能造成數百萬損失 高防IP確保服務99.99%可用性 智能切換機制實…

CSS基礎 - 選擇器備忘錄 --筆記5

目錄基礎選擇器組合器偽類選擇器屬性選擇器選擇器可以選中頁面上的特定元素并為其指定樣式。 CSS有多種選擇器。 基礎選擇器 標簽選擇器 – tagname:匹配目標元素的標簽名。優先級是0,0,1。如:p、h1、div類選擇器 – .class:匹配class屬性中…

自動駕駛中的傳感器技術46——Radar(7)

衛星雷達(又稱為分布式雷達)主要講當前雷達的雷達信號處理計算以及雷達目標相關的一些感知算法都遷移到中央域控進行,雷達端基本只負責數據采集,這樣做的影響如下: 雷達端成本與功耗降低; 雷達端采樣得到的…

【論文閱讀】Diff-Privacy: Diffusion-based Face Privacy Protection

基于擴散模型的人臉隱私保護方法——DiffPrivacy,解決了兩類人臉隱私任務:匿名化(anonymization)和視覺身份信息隱藏(visual identity information hiding)。1. 研究背景隨著人工智能和大數據技術的普及&am…

React 原理篇 - 深入理解虛擬 DOM

一、什么是虛擬 DOM? 在前端開發中,“虛擬 DOM” 是一個高頻出現的術語,尤其在 React 生態中被廣泛討論。但很多開發者對它的理解往往停留在 “JS 對象” 這個表層認知上。 實際上,虛擬 DOM 是一種編程概念—— 在這個概念里&…

對匯編的初理解

此處是一個簡單的函數,里面將調用了一個函數add()函數這里是函數的原型這里是調用lcd函數產生的匯編語言,翻譯過來就是r11,r0cnt(r4cnt,前文有提及),然后調用add函數,此處BL是指會回到指令的下一…

《Python 自動化實戰:從零構建一個文件同步工具》

《Python 自動化實戰:從零構建一個文件同步工具》 一、開篇引入:為什么我們需要文件同步? 你是否有過這樣的困擾: 公司電腦和家里電腦上都有工作項目,每次更新都要手動復制? U 盤頻繁傳輸文件,不僅麻煩還容易出錯? 項目文件夾動輒幾 G,每次同步都耗時長、效率低? 在…

工業相機與鏡頭的靶面尺寸詳解:選型避坑指南

在機器視覺系統中,相機與鏡頭的靶面尺寸匹配是一個非常關鍵卻又經常被忽略的細節。選錯了,不但影響圖像質量,還可能導致畫面“黑角”、視野不符、鏡頭浪費等問題。 今天我們就用通俗易懂的方式,聊一聊相機與鏡頭靶面尺寸的那些事兒…

使用 Go 和 go-commons 實現內存指標采集并對接 Prometheus

文章目錄一、準備工作二、編寫內存采集代碼三、運行 Exporter四、接入 Prometheus五、可擴展思路總結在運維和監控領域,資源指標采集 是必不可少的一環。CPU、內存、磁盤、網絡這些系統資源,需要實時采集并上報到監控系統中。 本文以 內存指標采集 為例&…

webrtc弱網-IntervalBudget類源碼分析與算法原理

一、核心功能 IntervalBudget 類用于基于時間窗口的帶寬預算管理。它根據設定的目標比特率(kbps)和一個固定時間窗口(500ms),計算在該時間窗口內可用的字節數(即“預算”),并支持預…

深度學習基本模塊:RNN 循環神經網絡

循環神經網絡(RNN)是一種專門用于處理序列數據的神經網絡架構。與處理空間數據的卷積神經網絡(Conv2D)不同,RNN通過引入循環連接使網絡具有"記憶"能力,能夠利用之前的信息來影響當前的輸出&#…

React18學習筆記(二) React的狀態管理工具--Redux,案例--移動端外賣平臺

文章目錄一.Redux的基礎用法1.示例:普通網頁中的Redux計步器2.Redux管理數據的流程3.配套工具和環境準備3.1.配套工具3.2.環境準備4.示例:React項目中的Redux計步器思路步驟step1:創建子模塊step2:導入子模塊step3:注入store實例step4:React組件內使用store中的數據step5:在組件…

34.Socket編程(UDP)(上)

點分十進制字符串IP 轉 32位網絡序列IP 分析:1)IP轉成4字節 2)4字節轉成網絡序列 思路: "192.168.1.1" 進行字符串劃分,以 "." 為分割符,分割出"192",&qu…

Redis的持久化工具包—RDB AOF

文章目錄 前言 一、RDB 持久化(快照持久化) 1. 定義 2. RDB 觸發機制 (1)手動觸發 (2)自動觸發 3. RDB 持久化流程 4. RDB 核心配置 5. RDB 優缺點 二、AOF 持久化(日志持久化) 1. 定…

【Web安全】XXL-JOB框架SRC高頻漏洞分析總結

文章目錄前言一、核心漏洞分類與技術細節二、漏洞關聯利用與攻擊路徑三、版本演進與修復策略四、安全運維建議五、典型漏洞復現環境搭建六、總結前言 XXL-JOB是國內主流的開源分布式任務調度框架,由徐雪里開發維護,以輕量易用、高可用、適配分布式場景等…

Capacitor 打包后接口訪問不到的排查經歷

我最近在用 Quasar Capacitor 6 做一個 Android App,前端用的是 Vue3 Quasar,打包交給 Capacitor 去跑在手機的 WebView 里,后端是 FastAPI 提供接口。開發模式下一切順利,瀏覽器里訪問接口沒有任何問題,我甚至覺得打…

【正點原子】Linux應用編程入門~概念及環境介紹

應用編程概念 應用編程(也可稱為系統編程)與驅動編程、裸機編程有何不同?系統調用;何為庫函數;應用程序的 main()函數;應用程序開發環境的介紹;系統調用 定義系統調用(system call&a…