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
相关产品推荐
相关产品推荐

