python3 urlopen在浏览器中打开时引发404错误

python3 urlopen在浏览器中打开时引发404错误,python,urllib,Python,Urllib,我正在使用python 3.4.6中的urllib.request打开https://www.ethz.ch/(实际的url较长,但问题是相同的),它在Firefox中可以正常打开,但在python中会抛出404错误 这是密码 from urllib.request import urlopen connection = urlopen('https://www.ethz.ch/') 它给出了以下错误消息 Traceback (most recent call last): File ".

我正在使用python 3.4.6中的
urllib.request
打开
https://www.ethz.ch/
(实际的url较长,但问题是相同的),它在Firefox中可以正常打开,但在python中会抛出404错误

这是密码

from urllib.request import urlopen
connection = urlopen('https://www.ethz.ch/')
它给出了以下错误消息

Traceback (most recent call last):
  File "./generate_group_meetings_ical.py", line 9, in <module>
    connection = urlopen('https://www.ethz.ch/')
  File "/usr/lib64/python3.4/urllib/request.py", line 161, in urlopen
    return opener.open(url, data, timeout)
  File "/usr/lib64/python3.4/urllib/request.py", line 470, in open
    response = meth(req, response)
  File "/usr/lib64/python3.4/urllib/request.py", line 580, in http_response
    'http', request, response, code, msg, hdrs)
  File "/usr/lib64/python3.4/urllib/request.py", line 508, in error
    return self._call_chain(*args)
  File "/usr/lib64/python3.4/urllib/request.py", line 442, in _call_chain
    result = func(*args)
  File "/usr/lib64/python3.4/urllib/request.py", line 588, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 404: Not found UA
回溯(最近一次呼叫最后一次):
文件“/generate_group_meetings_icial.py”,第9行,在
连接=urlopen('https://www.ethz.ch/')
urlopen中的文件“/usr/lib64/python3.4/urllib/request.py”,第161行
返回opener.open(url、数据、超时)
文件“/usr/lib64/python3.4/urllib/request.py”,第470行,打开
响应=方法(请求,响应)
http_响应中的文件“/usr/lib64/python3.4/urllib/request.py”,第580行
“http”、请求、响应、代码、消息、hdrs)
文件“/usr/lib64/python3.4/urllib/request.py”,第508行出错
返回自我。调用链(*args)
文件“/usr/lib64/python3.4/urllib/request.py”,第442行,在调用链中
结果=func(*args)
文件“/usr/lib64/python3.4/urllib/request.py”,第588行,默认为http\u error\u
raise HTTPError(请求完整的url、代码、消息、hdrs、fp)
urllib.error.HTTPError:HTTP错误404:未找到
不过,以前的代码工作得很好。另一条信息是,我不是机器上的root用户,python3已从3.4.5升级到3.4.6。因此,问题要么来自web服务器端,要么来自python端。我既不是python,也不是web专家,所以我自己也搞不懂


希望任何人都能帮助我。

@Pheidippides检查您的整个url是否有拼写错误,它对我有用:

Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
$>from urllib.request import urlopen
$>connection = urlopen('https://www.ethz.ch/')
$>connection.read()

感谢Francisco的评论,我可以使用以下代码使其工作

from urllib.request import Request, urlopen
req = Request('https://www.ethz.ch/', headers={'User-Agent': 'Mozilla/5.0'})
connection = urlopen(req)

我还使用Python2.7.13和urllib2检查了原始版本,它运行正常。显然,Python3.5是可行的(答案来自Laxmikant),它最初是在3.4.5下工作的。因此,在从3.4.5升级到3.4.6的过程中出现了导致错误的情况。

听起来像是用户代理问题,请尝试将用户代理字符串设置为其他字符串,以查看是否是问题所在。非常感谢Francisco,它解决了问题。我发布了一个描述它的答案。在同一所大学LolThank@Laxmikant为练习表构建刮板时遇到了同样的问题,我完全按照您输入的命令运行,但至少我现在知道它可以与python 3.5一起使用