我正在尝试从Eurostat网站下载XML文件,但我在使用Python中的urllib时遇到了麻烦。不知何故,当我使用我的常规Chrome浏览器时,它能够发出HTTP请求,网站将生成一个XML文件,但是当我尝试在python中执行相同的操作时,我收到服务器错误。这是我正在使用的代码:
import urllib
from xml.etree import ElementTree as ET
response = urllib.urlopen("http://ec.europa.eu/eurostat/SDMX/diss-web/rest/data/lfsq_egais/Q.T.Y_GE15.EMP..NL")
result = response.read()
print result
我也尝试过使用urllib.urlretrieve而且也没用。有什么理由可能会发生这种情况?我得到的HTML如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Draft//EN">
<HTML>
<HEAD>
<TITLE>Error 500--Internal Server Error</TITLE>
<META NAME="GENERATOR" CONTENT="WebLogic Server">
</HEAD>
<BODY bgcolor="white">
<FONT FACE=Helvetica><BR CLEAR=all>
<TABLE border=0 cellspacing=5><TR><TD><BR CLEAR=all>
<FONT FACE="Helvetica" COLOR="black" SIZE="3"><H2>Error 500--Internal Server Error</H2>
</FONT></TD></TR>
</TABLE>
<TABLE border=0 width=100% cellpadding=10><TR><TD VALIGN=top WIDTH=100% BGCOLOR=white><FONT FACE="Courier New"><FONT FACE="Helvetica" SIZE="3"><H3>From RFC 2068 <i>Hypertext Transfer Protocol -- HTTP/1.1</i>:</H3>
</FONT><FONT FACE="Helvetica" SIZE="3"><H4>10.5.1 500 Internal Server Error</H4>
</FONT><P><FONT FACE="Courier New">The server encountered an unexpected condition which prevented it from fulfilling the request.</FONT></P>
</FONT></TD></TR>
</TABLE>
</BODY>
</HTML>
答案 0 :(得分:1)
这个问题现在已经有几个月了,但迟到总比没有好:
您正在谈论的Eurostat REST API应该使用XML内容进行响应,urllib默认情况下不会期望/允许这样做。解决方案是在请求中添加标头Accept: application/xml
。
这将在Python 2.7中完成(顺便使用urllib2
):
import urllib2
req = urllib2.Request("http://ec.europa.eu/eurostat/SDMX/diss-web/rest/data/"
"lfsq_egais/Q.T.Y_GE15.EMP..NL")
req.add_header("Accept", "application/xml")
response = urllib2.urlopen(req)
print response.read()
有关详细信息和示例,请参阅urllib2 docs。