Webクローラーを実装していますが、HTMLでリンクを解析しようとしています。私は完全なウェブサイトのパスに従うことができますが、いくつかの相対的なパスはちょっと変です。BeautifulSoupを使用して相対的なWebサイトパスから完全なWebサイトパスを取得する方法
私は、完全なパスをたどるすなわち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には、<a href='/bar/qux'
のようなものがあります。ターゲットURLはhttp://foo.com/bar/qux
である必要がありますが、私のコードはhttp://foo.com/bar//bar/qux
です。
絶対パスが相対パスであることを知るために、2つのURLの間で一致する部分を特定する一般的な方法を知っている人はいますか?
私がまさに必要です。ありがとうございました! – Brian
別の(関連する)問題があります。時々、私がクロールしているとき、私が行くURLは 'http:// foo.com/bar'のようなものになり、' http:// foo.com/bar/'にリダイレクトされます。リダイレクトのため、不正な相対パスが検索されます。私はそれをどのように修正できるか知っていますか? もう一度ありがとうございます! – Brian
@Brian迅速かつ不潔な修正は、 'url.rstrip("/")'を使用することですが、他のユースケースを破らないようにしてください。ありがとう。 – alecxe