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

使用Requests访问特定网页出现500服务器错误,但Selenium可正常访问的问题求助

Requests访问特定网页出现500服务器错误,但Selenium可正常访问的问题求助

我有一个使用requests模块检查网页新闻更新的脚本,一周前还能正常工作,但现在遇到了一个奇怪的错误。我可以用requests访问基础网址(www.example.com),但访问www.example.com/news/123456时会出现500错误,错误内容如下:

Internal Server Error
Sorry, There were some technical issues while processing your request.

不过用selenium访问就没有这个问题,有没有人知道为什么只有requests会出现这个错误?

以下是我的代码:

import requests
from bs4 import BeautifulSoup  # 注:原代码中使用了BeautifulSoup但未导入,此处补充以保证代码可运行

url = 'www.example.com/news/123456/'
# Headers that I got from the (working) selenium request
headers = {'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/90.0.4430.212 Safari/537.36'}
response = requests.get(url, headers=headers)

webpage_content = response.text
soup = BeautifulSoup(webpage_content, 'html.parser')
raw_lines = soup.find_all()

lines = '\n'.join([line.get_text() for line in raw_lines])
lines = lines.splitlines()

for line in lines:
    print(line)

我的排查建议:

这情况我之前也碰到过好几次,大概率是你的requests请求缺少了某些Selenium会自动带上的关键细节,给你几个具体的排查方向:

  • 先补全完整的URL:你当前的url没有带上http://或https://前缀,虽然requests偶尔能自动补全,但不少服务器对这种不规范的URL处理会出错。先把URL改成http://www.example.com/news/123456/或者https://开头的完整地址试试,这是最容易忽略但见效快的点。

  • 补充更多关键请求头:除了user-agent,Selenium发送请求时还会自动带上一堆浏览器默认的请求头,比如Accept、Accept-Language、Referer这些,有些服务器会校验这些字段来识别“真实浏览器”。你可以打开浏览器开发者工具(F12),找到Selenium请求的完整头信息,把这些字段都复制到headers字典里,比如:

    headers = {
        'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/90.0.4430.212 Safari/537.36',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
        'Accept-Language': 'en-US,en;q=0.5',
        'Referer': 'http://www.example.com/',
        'DNT': '1',
        'Connection': 'keep-alive',
        'Upgrade-Insecure-Requests': '1'
    }
    
  • 检查Cookie的影响:Selenium在访问网站时,可能已经保存了会话Cookie(比如登录状态、会话标识、验证令牌),而你的requests请求是全新的会话,没有带上这些Cookie,导致服务器拒绝处理。你可以从Selenium的浏览器实例中导出Cookie,转换成requests可用的格式添加到请求中:

    # 示例:从Selenium获取Cookie并转换
    # cookies_list = driver.get_cookies()
    # cookies = {cookie['name']: cookie['value'] for cookie in cookies_list}
    # 然后在请求中带上cookies参数
    response = requests.get(url, headers=headers, cookies=cookies)
    
  • 反爬机制的检测:有些网站会检测请求是否来自真实的JavaScript渲染环境——Selenium会模拟浏览器渲染页面,而requests只是静态获取HTML,服务器可能会通过返回动态内容(需要JS渲染)或直接返回错误来拦截静态请求。这种情况下,你可以试试用requests-html(支持JS渲染的requests扩展),或者继续用Selenium获取页面内容后,再传给BeautifulSoup解析。

建议你先从补全URL和补充请求头开始尝试,这两个是最常见的触发原因,解决起来也最快~

备注:内容来源于stack exchange,提问作者Kovy Jacob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 15:53:03