使用Python/BeautifulSoup爬取SNCF网站遇403响应问题求助
爬取SNCF官网遇到403禁止访问问题
我正在学习Python网页爬取,尝试编写脚本访问法国铁路公司SNCF的官网,提交表单后获取指定日期、路线的最低票价,但第一步就遇到阻碍。
我的代码如下:
from bs4 import BeautifulSoup from requests_html import HTMLSession from urllib.parse import urljoin session = HTMLSession() #url = "http://sncf-connect.com" url = "https://www.sncf-connect.com/app/home/search" res = session.get(url)
请求返回 <Response [403]>,res.html.html 的返回内容为:
<html><head><title>sncf-connect.com</title><style>#cmsg{animation: A 1.5s;}@keyframes A{0%{opacity:0;}99%{opacity:0;}100%{opacity:1;}}</style></head><body style="margin:0"><p id="cmsg">Please enable JS and disable any ad blocker</p><script data-cfasync="false">var dd={'cid':'AHrlqAAAAAMAM3xGlPY0p-gAW6XdHw==','hsh':'746B7C2640FFCBD6D2BEC599D9FB5F','t':'fe','s':36834,'e':'bdb536cbcc367046d999ed157f25dabb9c0736edcf90e782144a0c6d36e69e3d','host':'geo.captcha-delivery.com'}</script><script data-cfasync="false" src="https://ct.captcha-delivery.com/c.js"></script></body></html>
我查阅了StackOverflow等在线资料,发现类似问题的常见解决方法是设置User-Agent,但在Chrome开发者工具中找不到该信息,希望能得到相关帮助或建议。
解决建议
- 获取Chrome的User-Agent:打开Chrome按F12调出开发者工具,切换到「Network」标签页,刷新页面后点击任意一个请求,在右侧「Request Headers」中找到
User-Agent字段,复制其完整内容。 - 修改代码添加请求头:在
session.get()中加入headers参数,示例如下:headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' } res = session.get(url, headers=headers) - 处理JS渲染与验证码:返回内容显示网站要求启用JS并检测到验证码服务,
requests_html支持JS渲染,可尝试在请求后添加res.html.render()等待页面加载,但仍可能触发验证码验证。 - 先访问首页建立会话:建议先访问SNCF官网首页
https://www.sncf-connect.com,获取网站设置的Cookie后,再发起搜索页面请求,保持会话连贯性。
内容的提问来源于stack exchange,提问作者AnAsal
相关产品推荐
相关产品推荐

