2014-04-23 36 views
-1

我有一个URL重定向(即HTTP 302)到实际的网站。然后我解析。不过,我想获取网站的实际网址(即真实网址)。 BeautifulSoup有没有这样做的方法。使用Beautiful Soup获取URL

即www.bananas.com - 重定向 - > www.realfruit.com。它是我想要以字符串形式获得的www.realfruit.com网址。

+2

BeautifulSoup根本不处理HTTP *。你现在用什么来加载页面? 'urllib2','urllib.request',外部但很好的'requests'库? –

+0

当然,我只是想看看是否有人使用美丽的汤,而不是写入任何东西进一步'请求':-) – felix001

+0

一个'request'响应有一个['history'属性](http://docs.python- requests.org/en/latest/api/#requests.Response.history),向您显示所有重定向以及['url'属性](http://docs.python-requests.org/en/latest/ api /#requests.Response.url)反映了用于检索最终响应的实际URL。 –

回答

1

HTML页面的URL是HTTP元数据,而不是任何与HTML源代码有关的东西。 BeautifulSoup是HTML源代码(以文件对象或字符串的形式),而不是的HTTP上下文。它不知道什么关于来源的来源。

充其量,如果您幸运的话,那么HTML源代码将包含一个canonical URL <link> tag,这是搜索引擎在尝试将人们再次引导到同一页面时应使用的网址。但是这并不一定是在将页面交给BeautifulSoup之前加载页面的实际URL!

如果您使用requests来加载您的网页,那么只需询问即可得到的网址。 response.url告诉你从哪个URL加载响应。您可以通过response.history访问重定向历史记录,其中包含导致最终响应的任何30x响应。

urllib2响应有一个.geturl() method,它返回使用的最终URL;对于Python 3的urllib.request.urlopen() responses同上。

相关问题