Python 如何使用BeautifulSoup从相对网站路径获取完整的网站路径
我正在实现一个网络爬虫,我正在尝试解析HTML中的链接。我可以遵循完整的网站路径,但有些相对路径会变得有点奇怪 我可以走完整的路径,即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('/')[:-
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
。对不起,如果我误解了这个问题。