首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Python requests + BeautifulSoup 網頁資料擷取實戰:ITTF 選手排名連結批量抓取

     編輯:更多程式設計知識

Python 網頁爬蟲基礎工具組:requests 處理 HTTP 請求,BeautifulSoup 解析 HTML。本文實作從 ITTF 國際桌總網站批量抓取選手詳細頁面連結的完整流程。

目標資料

ITTF 世界排名頁面中所有選手的詳細資料超連結。

核心程式碼


import requests
from bs4 import BeautifulSoup

url = ('https://www.ittf.com/ittf_ranking/WR_Table_3_A2.asp'
       '?Age_category_1=&Age_category_2=&Age_category_3='
       '&Age_category_4=&Age_category_5=&Category=100W'
       '&Cont=&Country=&Gender=W&Month1=4&Year1=2015'
       '&s_Player_Name=&Formv_WR_Table_3_Page=%d')

rank_link_pre = 'https://www.ittf.com/ittf_ranking/'
links = []

for page in range(1, 6):  # 假設 5 頁
    resp = requests.get(url % page)
    resp.encoding = 'utf-8'  # 明確指定編碼
    soup = BeautifulSoup(resp.text, 'html.parser')

    atags = soup.find_all('a')
    for atag in atags:
        href = atag.get('href')
        if href and "WR_Table_3_A2_Details.asp" in href:
            link = rank_link_pre + href
            links.append(link)
            print 'fetch link:', link

# 儲存至檔案
with open('links.txt', 'w') as f:
    for link in links:
        f.write(link + '\n')

關鍵技術點

工具用法
requests.get()自動處理重導向、編碼偵測、連線池
resp.text自動解碼後的字串(內建 chardet)
BeautifulSoup(resp.text, 'html.parser')標準庫解析器,無需外部依賴
soup.find_all('a')找出所有錨點標籤
atag.get('href')安全取得屬性,不存在回傳 None
字串篩選"WR_Table_3_A2_Details.asp" in href

進階擴充方向

  • 分頁自動偵測:解析「下一頁」連結或總頁數
  • 反爬蟲應對:headers={'User-Agent':...}、time.sleep()、Proxy 輪換
  • 動態網頁:selenium / playwright 驅動真實瀏覽器
  • 結構化資料:提取姓名、國家、積分、排名等欄位存入 CSV/資料庫
  • 非同步加速:aiohttp + asyncio 並發請求

法律與道德提醒

  • 遵守 robots.txt 與網站服務條款
  • 控制請求頻率,避免對目標伺服器造成壓力
  • 僅抓取公開資料,不繞過認證授權
  • 資料使用符合智慧財產權法規
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved