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

时间:2016-06-28 14:34:05

标签: 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('/')[:-1]))

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

但有时,网站网址为http://foo.com/bar/baz,而在HTML中,有<a href='/bar/qux'之类的内容。目标网址应为http://foo.com/bar/qux,但我的代码输出http://foo.com/bar//bar/qux

有没有人知道找出两个网址之间匹配的一般方法,以便找出相对路径的完整路径是什么?

1 个答案:

答案 0 :(得分:1)

到目前为止,我一直在做的并且对我有用的是使用当前页面网址调用urljoin()

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