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

Python爬虫遍历URL时通配符无法匹配中间可变文本求助

爬虫URL遍历问题解决思路
  • 首先修正核心认知误区:HTTP协议和浏览器本身不支持URL路径中使用*作为通配符,你原有代码中直接拼接带*的URL无法正常访问到目标页面,这是问题的根本原因。

可行解决思路

方案1:提前补齐URL参数直接拼接

如果可以收集到每场赛事的主队名、客队名、轮次、赛季信息,直接按照站点URL规则拼接完整地址即可。你给出的示例URL固定规则如下:
http://www.sportal.de/fussball/bundesliga/spielernoten-{主队拼音名}-{客队拼音名}-{轮次数字}-spieltag-{赛季区间}-{赛事ID}
你只需要提前把所有赛事对应的上述参数整理成结构化列表,循环用f-string拼接即可,不需要使用通配符。

方案2:先爬赛事列表页捞取全量URL

如果无法提前拿到中间的赛事参数,优先爬对应赛季的赛事汇总列表页,提取所有赛事详情页的URL后再遍历,完全避免自行拼接URL的问题,修改后的代码示例如下:

from time import sleep
from datetime import datetime
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import pandas as pd

errors = []
season = []
option = Options()
option.headless = False
# 浏览器初始化放到循环外,大幅提升爬取效率
driver = webdriver.Firefox(options=option)

# 第一步:访问对应赛季的德甲赛事列表页,替换为你要爬的赛季列表页地址即可
list_url = "http://www.sportal.de/fussball/bundesliga/spielplan/2020-2021/"
driver.get(list_url)
sleep(3)

# 提取所有赛事评分页的链接,筛选规则匹配目标页面特征
match_links = []
elements = driver.find_elements(By.XPATH, '//a[contains(@href, "spielernoten-")]')
for ele in elements:
    href = ele.get_attribute('href')
    if href and href not in match_links:
        # 提前去重避免重复请求
        match_links.append(href)

# 第二步:遍历所有捞取到的有效赛事链接
for url in match_links:
    try:
        driver.get(url)
        # 此处补充你原本的页面数据爬取逻辑
        sleep(2)
    except Exception as e:
        errors.append({"url": url, "error": str(e)})

driver.quit()

额外优化建议

  • 合理调整请求延时,避免触发站点反爬规则
  • 爬取过程中可以分批存储已经拿到的数据,避免程序异常退出导致数据丢失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:48:04