urllib2.urlopen为浏览器打开的网址引发404异常

时间:2010-08-28 00:54:14

标签: python http exception debugging urllib2

以下网址(以及其他类似网址)可以在浏览器中打开,但会导致urllib2.urlopen抛出404异常:http://store.ovi.com/#/applications?categoryId=20&fragment=1&page=1

geturl()返回相同的url(无重定向)。标题是从firebug复制和粘贴的。我尝试将标题作为字典传递给Request,但得到了相同的结果。 wget在控制台中打开url,但不打开脚本。

代码:

source_url ='http://store.ovi.com/#/applications?categoryId=20&fragment=1&page=2'
试试:

    socket.setdefaulttimeout(10)
    hdrs = [('Host','store.ovi.com'),('User-Agent','Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US;rv:1.9.0.13) Gecko/2009073021 Firefox/3.0.13 AppEngine-Google;(+http://code.google.com/appengine)'),('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'),('Accept-Language','en-us,en;q=0.5'),('Accept-Encoding','gzip,deflate'),('Accept-Charset','ISO-8859-1,utf-8;q=0.7,*;q=0.7'),('Keep-Alive','115'),('Connection','keep-alive'),('Cookie','JNPRSESSID=4u4devdrt7eb6e0qem3gin47i2; s_cc=true; undefined_s=First%20Visit; s_nr=1282817443274; s_sq=%5B%5BB%5D%5D; view=Grid; menu=menuOpen; OVI_DEVICE=b5130'),('Cache-Control','max-age=0')]
ree = urllib2.Request(source_url)
    ree.addheaders = hdrs
    opener = urllib2.build_opener()
    htmlSource = opener.open(ree).read()

除了urllib2.HTTPError,e:

    print e.code  
    print e.msg
    print e.headers

错误输出:
404个
没找到
日期:2010年8月28日星期六00:36:57 GMT
服务器:Apache / 2.2.3(Red Hat)
X-Powered-By:PHP / 5.2.2
到期日:1981年11月19日星期四08:52:00格林尼治标准时间 缓存控制:无存储,无缓存,必须重新验证,后检查= 0,预检查= 0 Pragma:no-cache
保持活跃:超时= 7,最大= 333
连接:保持活力
转移编码:分块
内容类型:text / html; charset = UTF-8

如果有的话,我做错了什么?这是一个错误吗?如果是这样,有没有解决方法?谢谢!

1 个答案:

答案 0 :(得分:3)

给出如下的网址:

http://store.ovi.com/#/applications?categoryId=20&fragment=1&page=2

浏览器提取的位只是:

http://store.ovi.com/

右边的所有内容都是“片段标识符”,根本不会传递给服务器(显然,如果你尝试,它会变得混乱)。相反,为/ URL返回的HTML将包含一大堆JavaScript,它在客户端读取#...数据,并使用一堆XMLHttpRequest来填充页面内容。< / p> 像这样实现的Webapps是一个很大的痛苦,因为你不能只是采取主页的HTML内容。相反,您必须分析脚本以找出从中获取实际数据的位置,或者您必须连接一个真实的浏览器才能执行所有脚本并查看您剩下的文档对象。它们通常也不利于可访问性和SEO。

幸运的是,这个网站似乎在片段中放入了一些也是有效路径的东西。所以看起来你可以从URL获取动态页面数据:

http://store.ovi.com/applications?categoryId=20&fragment=1&page=1