Python 如何使用BeautifulSoup从相对网站路径获取完整的网站路径

Python 如何使用BeautifulSoup从相对网站路径获取完整的网站路径,python,html,beautifulsoup,python-requests,Python,Html,Beautifulsoup,Python Requests,我正在实现一个网络爬虫,我正在尝试解析HTML中的链接。我可以遵循完整的网站路径,但有些相对路径会变得有点奇怪 我可以走完整的路径,即http://foo.com/bar/baz并且我能够通过使用以下功能找到遵循相对路径的方法,即/qux: def baseUrl(url): u = urlparse.urlparse(url) return "{}://{}{}/".format(u.scheme, u.netloc, '/'.join(u.path.split('/')[:-

我正在实现一个网络爬虫,我正在尝试解析HTML中的链接。我可以遵循完整的网站路径,但有些相对路径会变得有点奇怪

我可以走完整的路径,即
http://foo.com/bar/baz
并且我能够通过使用以下功能找到遵循相对路径的方法,即
/qux

def baseUrl(url):
    u = urlparse.urlparse(url)
    return "{}://{}{}/".format(u.scheme, u.netloc, '/'.join(u.path.split('/')[:-1]))

def fullUrl(url, parent):
    u = urlparse.urlparse(url)
    if u.scheme:
        return url.split("/#")[0]
    else:
        return "{}{}".format(baseUrl(parent), url).split("/#")[0]

但有时,网站url是
http://foo.com/bar/baz
,在HTML中,我经常做的事情是使用当前页面URL调用:

>>> from urlparse import urljoin
>>> urljoin("http://foo.com/bar/baz", "/bar/qux")
'http://foo.com/bar/qux'

这正是我需要的。非常感谢。我还有一个(相关的)问题。有时,当我在爬行时,我所访问的URL可能类似于
http://foo.com/bar
并重定向到
http://foo.com/bar/
。由于重定向,它将查找不正确的相对路径。你知道我怎样才能解决这个问题吗?再次感谢你@Brian快速而肮脏的修复方法是使用
url.rstrip(“/”)
,不过要确保它不会破坏其他用例。谢谢。@Alexe,我的问题恰恰相反。我爬网到的url是
http://foo.com/bar
,并(在浏览器中)重定向到
http://foo.com/bar/
(因为它是一个目录)。因此,当我试图爬到
/baz
时,它转到了
http://foo.com/baz
而不是
http://foo.com/bar/baz
@Brian hm,但是如果您有
/baz
相对URL,那么实际上连接为您提供
http://foo.com/baz
,不是吗?两者都
urljoin(“http://foo.com/bar/“,”/baz“
urljoin(“http://foo.com/bar“,”/baz“
将产生
http://foo.com/baz
。对不起,如果我误解了这个问题。