2011-03-03 5 views
1

私は、URLを受け取り、深さ優先の検索をいくつかの限られた深さまで行った後、「webcrawler」をPythonで作成しています。私が抱えている問題は、URLの相対パスを解釈することです。URL内の相対パスを解釈する

ページのhttp://learnyouahaskell.com/introduction/には「開始」リンクがあります。 <a href="starting-out" class="nxtlink">Starting Out</a>のように見えます。このリンクが "http://learnyouahaskell.com/introduction/starting-out"または "http://learnyouahaskell.com/starting-out"を参照しているかどうかをどのように判断できますか? 2番目は私のブラウザによると正しいです。

ページのhttp://math.colgate.edu/~mionescu/math399s11/には、 "http://math.colgate.edu/~mionescu/math399s11/Finalprojects.pdf"に解決されるリンク<a href="Finalprojects.pdf">here</a>があります。

誰かがこの不一致を私に説明できますか?クローラでこれらのパスをどのように解決するのかを決定するにはどうすればよいですか?

答えて

3

この「明白な」矛盾の理由は、learnyouahaskellサイトがソースに<base href="">タグを使用していることです。これは、すべてのドメインレスhrefにベースを出発点として使用するよう指示します。

ベースタグがないと、予想通り(あなたが投稿した最初のリンク)表示され、math.colgate.eduリンクのように動作します。

+0

私はそれが完璧な意味を理解します。リンクの解決方法を変更できる他のHTMLタグは存在しますか? – jjoelson

+0

HTMLには直接ではありませんが、JavaScriptを使用してイベントをピックアップしたり、サーバー301/302のリダイレクトを行ったりしています。実際のファイルの場所は、すべてがURIパラメータとして現れるfuseboxなどのフレームワークでは、しばしば難読化されています。 – iivel

関連する問題