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

use*_*188 4 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
Run Code Online (Sandbox Code Playgroud)

当我运行此脚本时,它在我的终端中显示此错误,

<!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>
Run Code Online (Sandbox Code Playgroud)

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

可能是什么问题??

aba*_*ert 8

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

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

最有可能你正在阅读的东西,如网址for line in file:file.readline或保留换行符一些其他的功能.所以,你实际上最终得到的不是这个:

url = 'http://www.leboncoin.fr/montres_bijoux/671762293.htm'
Run Code Online (Sandbox Code Playgroud)

… 但是这个:

url = 'http://www.leboncoin.fr/montres_bijoux/671762293.htm\n'
Run Code Online (Sandbox Code Playgroud)

后者将被转义requests为对于不存在的资源而言非常好的URL,因此404错误.

检查这个的最好方法是print repr(url)代替print(url).这也将发现其他可能的问题,如嵌入式非打印字符.它不会找到所有内容,比如看起来像.但实际上没有的Unicode字符,但这是一个很好的第一次测试.(如果没有找到它,则进行第二次测试,将输出,引号和所有内容复制并粘贴到测试脚本中.)

如果这是问题,修复很简单:

url = url.rstrip()
Run Code Online (Sandbox Code Playgroud)