为什么urllib2.urlopen无法打开像"http://localhost/new-post#comment-29"这样的页面?
我很好奇,为什么我运行这一行代码时会出现404错误:
urllib2.urlopen("http://localhost/new-post#comment-29")
而在任何浏览器中访问 http://localhost/new-post#comment-29 一切都正常……
urlopen方法是不是不支持带有“#”的链接呢?
有人知道吗?
1 个回答
7
在HTTP协议中,网址中从#
开始的部分(称为片段)不会通过网络发送到服务器。这部分信息只会被浏览器保留,等服务器的响应完全收到后,浏览器会用它来“视觉定位”页面上要显示的具体位置。比如,如果返回的页面是HTML格式,浏览器会解析HTML,找到第一个合适的<a>
标签来确定位置。
所以,整个过程是这样的:首先去掉片段,比如通过urlparse.urlparse
来实现;然后用剩下的部分去获取资源;接着根据服务器返回的内容类型,适当地解析这些内容;最后,根据你在第一步中保留的片段,在解析后的资源中找到对应的位置,进行相应的视觉操作。