1
我正在实现一个网络爬虫,我试图解析HTML中的链接。我可以遵循完整的网站路径,但一些相对路径有点奇怪。如何使用BeautifulSoup从相关网站路径获取完整的网站路径
我可以按照完整路径,即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
。
有没有人知道一个通用的方法来弄清楚两个URL之间的哪些部分匹配,以便找出完整路径将来自相对路径?
这正是我需要的。谢谢! – Brian
我有另一个(相关)问题。有时候,当我爬行的时候,我去的URL会是'http:// foo.com/bar',然后重定向到'http:// foo.com/bar /'。由于重定向,它会查找不正确的相对路径。你知道我该如何解决这个问题吗? 再次感谢您! – Brian
@布赖恩快速和肮脏的修复将使用'url.rstrip(“/”)',但请确保它不会破坏其他用例。谢谢。 – alecxe