Python requests.get 显示 404 而 url 确实存在
Posted
技术标签:
【中文标题】Python requests.get 显示 404 而 url 确实存在【英文标题】:Python requests.get showing 404 while url does exists 【发布时间】:2014-09-15 02:19:30 【问题描述】:http://www.leboncoin.fr/montres_bijoux/671762293.htm
我正在尝试打开这个网址
import requests
s = requests.Session()
s.headers['User-Agent'] = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (Khtml, like Gecko) Ubuntu Chromium/34.0.1847.116 Chrome/34.0.1847.116 Safari/537.36'
s.headers['Host'] = 'www.leboncoin.fr'
url = 'http://www.leboncoin.fr/montres_bijoux/671762293.htm'
r = s.get(url)
print r.text
当我运行这个脚本时,它会在我的终端中显示这个错误,
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /montres_bijoux/671762293.htm was not found on this server.</p>
</body></html>
虽然我可以在浏览器中打开相同的 url 并查看内容。
可能是什么问题??
【问题讨论】:
你能说明你在哪里设置url
的值吗?您要确保它是完整的 URL(例如 domain.com/asdasd),而不仅仅是路径部分。
@okoboko :实际上这段代码在函数中,它接受一个参数,即 url。
实际上我在 ipython shell 中做了同样的事情,它也对我有用,但是当我在文件中执行相同的代码时它显示上述错误?
“在文件中执行相同的代码”是什么意思?您如何以及在哪里运行它?
我创建了一个新文件test.py
并在其中放入相同的代码,然后以python test.py
执行该文件
【参考方案1】:
甚至无需等待您的测试,我就非常有信心知道您的错误是什么。
我手动将此 url 放入函数调用中,它工作正常,但如果我读取该文件并使用该 url 直接调用函数,给我错误。我在读取文件时进行了 3-4 次检查,即使我尝试在被调用函数中打印该 url 并且我也在函数中接收该 url,url 也完美地来自文件。仍然不知道发生了什么?
您很可能正在使用 for line in file:
或 file.readline
或其他保留换行符的函数读取 URL。所以,你最终得到的不是这个:
url = 'http://www.leboncoin.fr/montres_bijoux/671762293.htm'
……但是这个:
url = 'http://www.leboncoin.fr/montres_bijoux/671762293.htm\n'
后者将被requests
转义为不存在的资源的完美 URL,因此出现 404 错误。
最好的检查方法是print repr(url)
而不是print(url)
。这还将发现其他可能的问题,例如嵌入的不可打印字符。它不会找到所有内容,例如看起来像 .
但实际上不是的 Unicode 字符,但这是一个很好的第一次测试。 (如果没有找到它,对于第二次测试,将输出、引号和所有内容复制并粘贴到您的测试脚本中。)
如果是这个问题,解决方法很简单:
url = url.rstrip()
【讨论】:
以上是关于Python requests.get 显示 404 而 url 确实存在的主要内容,如果未能解决你的问题,请参考以下文章
Python接口测试-使用requests模块发送GET请求
尝试在 Python 中为 API 'requests.get' 的许多错误
python - requests.get (Connection aborted.', OSError("(60, 'ETIMEDOUT')