使用Beautiful Soup获取URL
我有一个网址,它会重定向(也就是 HTTP 302)到真正的网站。我想解析这个网址。不过,我想要获取真正的网站地址(也就是实际的网址)。有没有办法在 BeautifulSoup 中做到这一点?
比如说,www.bananas.com 会重定向到 www.realfruit.com。我想要得到的就是 www.realfruit.com 这个网址,作为一个字符串。
1 个回答
4
HTML页面的URL其实是HTTP的元数据,和HTML的源代码没有直接关系。BeautifulSoup接收到的是HTML的源代码(可以是文件对象或者字符串),而不是HTTP的上下文。它根本不知道这些源代码是从哪里来的。
如果运气好,HTML源代码里可能会有一个规范URL <link>
标签,这是搜索引擎在引导用户再次访问同一页面时应该使用的URL。但这并不一定是加载页面时实际使用的URL,也就是说,BeautifulSoup接收到的可能不是这个URL!
如果你使用requests
库来加载页面,可以直接问它URL是什么。response.url
会告诉你这个响应是从哪个URL加载的。你还可以查看重定向历史,使用response.history
,里面包含了所有导致最终响应的30x响应。
urllib2
的响应有一个.geturl()
方法,可以返回最终使用的URL;Python 3的urllib.request.urlopen()
响应也是一样的。