当url存在时,Python requests.get显示404

时间:2014-07-23 18:34:24

标签: python session python-2.7 python-requests

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>

虽然我可以在浏览器中打开相同的网址,但可以看到内容。

可能是什么问题?

1 个答案:

答案 0 :(得分:7)

甚至没有等待你的测试,我很自信我知道你的错误是什么。

  

我把这个url手动放在函数调用中工作正常但是如果我读取该文件并直接用该url调用函数,请给我错误。我在读取文件时已经进行了3-4次检查,即使我尝试在被调用的函数内打印该url,我也在文件中完成了url。我也在函数中接收了该url。仍然不知道发生了什么事?

您最有可能使用for line in file:file.readline或其他保留换行符的功能来阅读网址。所以,你实际上最终得到的不是这个:

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()