2011-09-18 4 views
2

I am actually using PHP but such crawling can be done by any programming languages. It will be a bit difficult to cater a lot of situations. Please help me look through the problem, and please give me some suggestion on whether I am going to the right direction.ページをクロールすると、完全なURLを<a href> or <frame src> attributes

What I know is the current url address from which I can get a list of links from <a href=" or from <frame src=".

What I am doing is: from current url address, I can firstly get root url, for example, from http://www.abc.com/defから取得する方法は、最初にhttp://www.abc.comを得ることができます。これは状況<a href="/fff.html"に対応するために、最初にルートURLを知る必要があります。

第2に、現在のURLからurlディレクトリを取得する必要がありますが、これは少し難しく、完全に行う方法はまだ分かりません。たとえば、http://www.abc.com/def/xyz.htmから、URLディレクトリはhttp://www.abc.com/defです。これは状況<a href="../../xyz.html">に対応するためです。

私が直面している問題は、現在のURLディレクトリを取得する方法です。たとえば、現在のURLがhttp://www.abc.com/defの場合、defがディレクトリまたはファイルであることを実際にどのように知ることができますか? defがファイルの場合、urlディレクトリはhttp://www.abc.comになります。しかし、defがディレクトリの場合、urlディレクトリはhttp://www.abc.com/defになります。

最後に「/」があると言うと、それはディレクトリです。しかし、私の見地からは、Webページをクロールしているときに、WebページのビルダーがディレクトリURLの最後に "/"を追加することは本当に保証できません。たとえば、defがディレクトリの場合、http://www.abc.com/defはおそらくhttp://www.abc.com/def/index.htmlの略です。

http://www.abc.com/defがディレクトリかスクリプトファイルかを知るのは難しいので、<a href="xyz.html">のような相対的なhrefから完全なURLを作るのは難しいです。

私は問題を複雑にしていますか?これには何か解決策はありますか?

例:href = "#はアンカーを意味し、現在のURLの末尾に追加するだけですが、現在のURLの状況に合っていますか? ?現在のURLは(DEFディレクトリです)http://www.abc.com/defここで、http://www.abc.com/def#xyzhttp://www.abc.com/def/index.html#xyz

に変換され、HREF = "javascriptを:またはのhref =" のVBScript:。など、私はちょうどそれを無視します

そして、 href = "xyz。???"で、???が画像ファイル、exeファイル、またはhtmlでないものは無視します。

ありがとうございます。

質問が少し乱雑になるかもしれませんが、私はそれをはっきりと説明したいと思います。

+1

+1質問はうまく形成され、明確にされています!また、「」も忘れないでください。 – chown

+0

これは任意のプログラミング言語に適用できるという理由だけで、プログラミング言語タグを追加する必要はありません。つまり、_any_を追加しないでください。私はあなたの選択が恣意的であるので 'python'を削除しましたが、あなたが実際に働いていると言っているのでPHPを残しました。 – agf

+0

こんにちは、申し訳ありません、人気の言語タグを追加しました。この問題を理解できる人が増えています。 – user534498

答えて

3

ドメイン名の後ろにあるものは、ドメインを構成する人が望むものにマッピングできます。

.htmlで終わるURLが、ファイルシステム上の実際のファイルをどこかで参照しているか、有効なHTMLなどを返すという保証はありません。

def/をディレクトリまたはファイル名の一部としてカウントすることを任意に決めることができます。任意の選択肢が正しいので、ボートを浮かべてください。

+0

こんにちは、ありがとう、これは本当に私がおそらくhttp://www.abc.com/xyz.jpgでも同じものを扱うことを思い出させます。私はファイルのヘッダ部分を読み込み、それが有効なhtmlかどうかを確かめます。そうであれば、それがディレクトリかファイルかを調べるためにいくつかのテストをする必要があります。 – user534498

+0

画像、実行ファイルなどが何であるかを確認するには、[content-type header](https://secure.wikimedia.org/wikipedia/en/wiki/MIME#Content-Type)を使用します。 – agf

2

http://www.abc.com/defがディレクトリの場合、クライアントの混乱を避けるため、Webサーバーは通常http://www.abc.com/def/にリダイレクトされます。リダイレクトに気づくだけで、urlparse.urljoin()または適切な関数<の言語の選択>を使用して、ブラウザのように2つのコンポーネントを融合させるだけです。

+0

こんにちは、ありがとう、現在私は現在のリンクの内容を取得するためにfile_get_contentsを使用して、私はまでタイトルとメタデータを素早くクロールするためにfopenとreadを使用します。 PHPを使ってリダイレクトを知る方法はありますか?私はこの解決策を試し、後で戻ってくるだろう。 – user534498

関連する問題