为什么urllib2.urlopen无法打开像"http://localhost/new-post#comment-29"这样的页面?

2 投票
1 回答
1165 浏览
提问于 2025-04-16 04:36

我很好奇,为什么我运行这一行代码时会出现404错误:

urllib2.urlopen("http://localhost/new-post#comment-29")

而在任何浏览器中访问 http://localhost/new-post#comment-29 一切都正常……

urlopen方法是不是不支持带有“#”的链接呢?

有人知道吗?

1 个回答

7

在HTTP协议中,网址中从#开始的部分(称为片段)不会通过网络发送到服务器。这部分信息只会被浏览器保留,等服务器的响应完全收到后,浏览器会用它来“视觉定位”页面上要显示的具体位置。比如,如果返回的页面是HTML格式,浏览器会解析HTML,找到第一个合适的<a>标签来确定位置。

所以,整个过程是这样的:首先去掉片段,比如通过urlparse.urlparse来实现;然后用剩下的部分去获取资源;接着根据服务器返回的内容类型,适当地解析这些内容;最后,根据你在第一步中保留的片段,在解析后的资源中找到对应的位置,进行相应的视觉操作。

撰写回答