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>
虽然我可以在浏览器中打开相同的网址,但可以看到内容。
可能是什么问题?
答案 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()