【问题标题】:Python request.get() returns 404 page not foundPython request.get() 返回 404 page not found
【发布时间】:2025-12-13 00:05:01
【问题描述】:

我一直有一些有趣的行为,希望能解释一下为什么会发生这种情况。

我正在使用以下内容来抓取一个页面,然后对其进行解析:

r  = requests.get(html)

现在,当我在 Windows 计算机上使用 python 在网页 A 上运行它时,它会按预期返回页面。

但是,当我在我的 Synology Diskstation(我相信基于 Linux)上运行相同的命令时,它返回一个 404 页面未找到页面而不是输入的 url 页面。

当我尝试不同的 URL 时,它会在两个系统上返回正确的页面。

关于如何或为什么会发生这种情况的任何解释?

编辑:我也在家里的 MacBook 上试过,效果很好。但由于某种原因,它仍然无法在 Diskstation 上运行:S

编辑:

来自两台机器的标题

Mac(在哪里工作):

{'Content-Length': '17924', 'X-Content-Type-Options': 'nosniff', 'Content-Encoding': 'gzip', 'Set-Cookie': 'PHPSESSID=q86c56e1e4t1d8jsu0penc488oraladt; path=/', 'Vary': 'Host,Accept-Encoding', 'Keep-Alive': 'timeout=10, max=100', 'Server': 'Apache', 'Connection': 'Keep-Alive', 'Date': 'Tue, 24 Jan 2017 04:31:08 GMT', 'Content-Type': 'text/html'}

Diskstation(不在的地方):

{'X-Content-Type-Options': 'nosniff', 'Transfer-Encoding': 'chunked', 'Vary': 'Host', 'Keep-Alive': 'timeout=10, max=100', 'Server': 'Apache', 'Connection': 'Keep-Alive', 'Date': 'Tue, 24 Jan 2017 04:30:25 GMT', 'Content-Type': 'text/html'}

【问题讨论】:

  • 您要获取的实际 URL 是什么?
  • 两个平台上的 Python 版本是否相同?
  • @Hromgo 是的!刚刚加倍检查,两者都是 2.7.12
  • @jwodder 我不想提它,但我确实找到了另一个发生这种情况的网站:store.concept1.ca/Trunk-Liner-SB-Lower-71-79-133863505B-WW
  • 查看两个请求,看看标头是否不同。

标签: python web-scraping python-requests webpage


【解决方案1】:

很可能是您遇到了 robots.txt 问题,或者两个系统之间发送的标头信息不同。一个基本的跟踪应该指向正确的方向。

【讨论】:

  • 您能提供更多信息吗?我将如何进行跟踪?我对 python 和 webscraping 都很陌生,所以我还在学习很多东西。
  • requests 忽略 robots.txt(robots.txt 是 100% 自愿的),但是是的,检查发送和接收的标头:响应标头很简单:r.headers。您还可以检查重定向。此信息将存储在r.history。可能发生了错误的重定向。
  • 谢谢@Peter。我按照你提到的做了,看起来 r.history 给了我 [] (如果我没记错的话,哪个是重定向?我已经用两台不同机器的标题更新了原始文件。非常感谢帮助
  • 对,302 是重定向。 Mac 和 Diskstation 是否都显示重定向(相同的重定向?)。您的磁盘站发送的用户代理可能会导致服务器将您重定向到错误的位置(可能?)。您可以设置您的用户代理字符串(在您的请求中)以匹配您的 mac 发送的内容。
  • @Peter 不,重定向只显示在 Diskstation 上。我会尝试设置用户代理并试一试
最近更新 更多