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

使用Requests爬取koleo.pl列车时刻表结果不符,求排查代码问题

排查koleo.pl列车时刻表爬取结果不符的问题

先看你代码里最明显的问题:

  • URL格式错误:你请求的URL里日期部分有个多余的空格——19-03- 2019,这会导致服务器无法识别正确的日期参数,返回的自然不是你要的19-03-2019 10:00的时刻表页面。先把这个空格去掉,修正后的URL应该是:
    https://koleo.pl/rozklad-pkp/krakow-glowny/radom/19-03-2019_10:00/all/EIP-IC--EIC-EIP-IC-KM-REG
    

接下来,建议你先验证请求是否成功:在获取response后,先打印response.status_code,如果返回的不是200,说明请求本身就有问题(比如URL错误、被服务器拦截)。如果是200,再继续排查内容。

如果修正URL后还是得不到预期内容,那大概率是动态内容加载的问题:koleo.pl可能用JavaScript动态渲染列车时刻表数据,而requests只能获取页面的静态HTML源码,无法执行JS。这种情况下,你需要用浏览器自动化工具(比如Selenium或Playwright)来模拟真实浏览器加载页面,等JS渲染完成后再抓取内容。

给你一个修正URL后的基础测试代码:

import requests
from bs4 import BeautifulSoup

s = requests.Session()
s.headers.update({
    "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'
})
# 修正后的URL,去掉日期里的空格
url = 'https://koleo.pl/rozklad-pkp/krakow-glowny/radom/19-03-2019_10:00/all/EIP-IC--EIC-EIP-IC-KM-REG'
response = s.get(url)

# 先检查请求状态
print("Response Status Code:", response.status_code)

if response.status_code == 200:
    soup = BeautifulSoup(response.text, 'lxml')
    # 可以尝试定位时刻表相关的元素,比如找包含列车信息的表格或div
    train_table = soup.find('table', class_='timetable__table')  # 站点实际使用的类名
    if train_table:
        print(train_table.prettify())
    else:
        print("未找到时刻表元素,可能是动态加载的")
else:
    print(f"请求失败,状态码:{response.status_code}")

如果测试后发现确实是动态加载,那可以改用Selenium,示例代码大概是这样:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup

options = Options()
options.add_argument('--headless=new')  # 无头模式,不显示浏览器窗口
options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36')

driver = webdriver.Chrome(options=options)
driver.get('https://koleo.pl/rozklad-pkp/krakow-glowny/radom/19-03-2019_10:00/all/EIP-IC--EIC-EIP-IC-KM-REG')

# 等待页面加载完成(可以用显式等待,比如等待某个元素出现)
driver.implicitly_wait(10)

soup = BeautifulSoup(driver.page_source, 'lxml')
# 现在就可以正常解析动态渲染后的内容了
print(soup.prettify())

driver.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:31:49