ホームページ >バックエンド開発 >PHPチュートリアル >PHP を使用してページ内の URL の定期的なクロールを実装する方法
もちろん、PHP 正規表現を使用してページ内のすべてのリンクを取得するのが最も便利な方法です。正規表現を記述するには、まずパターンを要約する必要があります。では、ページ上のリンクにはいくつの形式があるでしょうか。以下を見てみましょう。
はじめに
リンクはハイパーリンクであり、ある要素 (テキスト、画像、ビデオなど) から別の要素 (テキスト、画像、ビデオなど) へのリンクです。通常、Web ページには 3 種類のリンクがあります。1 つはページへの完全なパスである絶対 URL ハイパーリンクで、もう 1 つは同じ Web サイト上の他のページにリンクする相対 URL ハイパーリンクです。ページ内のハイパーリンク。通常、同じページ内の他の場所にリンクします。
リンクの種類を理解すると、取得する主なリンクが絶対 URL ハイパーリンクと相対 URL ハイパーリンクであることがわかります。正しい正規表現を作成するには、探しているオブジェクトのパターンを理解する必要があります。
インターネット上の一意のリソースを識別する、URL (Uniform Resource Locator) とも呼ばれる絶対リンクから始めましょう。 URL の構造には、プロトコル、サーバー名、パス、ファイル名の 3 つの部分が含まれています。
プロトコルは、開くファイルの処理方法をブラウザに指示する識別子です。最も一般的なものは http プロトコルです。この記事では HTTP プロトコルのみを考慮します。他の https、ftp、mailto、telnet プロトコルなどについても、必要に応じて追加できます。
サーバー名は、このサーバーにアクセスする方法をブラウザーに伝える方法であり、通常はドメイン名または IP アドレス、場合によってはポート番号 (デフォルトは 80) です。 FTP プロトコルにはユーザー名とパスワードも含めることができますが、この記事では考慮しません。
パスとファイル名は通常 / で区切られ、ファイルへのパスとファイル自体の名前を示します。特定のファイル名がない場合は、このフォルダー内のデフォルトのファイルがアクセスされます (サーバー側で設定可能)。
クロールされる絶対リンクの典型的な形式は、
<span style="color: #000000">http://www.xxx.com/xxx/yyy のように要約できることがわかりました。 /zzz .html<code><span style="color: #000000">http://www.xxx.com/xxx/yyy/zzz.html</span>
每个部分可以使用的字符范围有明确的规范,具体可以参考RFC1738。那么正则表达式就可以写出来了。
/(http|https):\/\/([\w\d\-_]+[\.\w\d\-_]+)[:\d+]?([\/]?[\w\/\.]+)/i
解释如下:
(http|https)第一个括号内匹配的是协议部分。
([wd-_]+[.wd-_]+)第二个括号内匹配的是域名部分。
([/]?[w/.]+)第三个括号内匹配的是相对路径。
写到这个时候,基本上大部分的网址都能匹配到了,但是对于URL中带有参数的还不能抓取,这样有可能造成再次访问的时候页面报错。关于参数RFC1738规范中要求是用?来分割,后面带上参数,但是现代的RIA应用有可能使用其他奇怪的形式进行分割。
稍微修改一下,这样就可以将查询参数部分搜索出来。这里仍然没有涵盖全部的情况,例如URL中有中文、有空格及其他特殊字符的情况,但是基本上能够满足我的需求了,就没有继续深化。
/(http|ftp|https):\/\/([\w\d\-_]+[\.\w\d\-_]+)[:\d+]?([\/]?[\w\/\.\?=&;%@#\+,]+)/i
使用括号的好处是,在处理结果时,可以很容易的获取到协议、域名、相对路径这些内容,方便后续的处理。
例如使用 preg_match_all()
各部で使用できる文字の範囲については明確な仕様が定められていますので、詳しくはRFC1738を参照してください。その後、正規表現を書くことができます。
rrreee
(http|https) 最初の括弧はプロトコル部分と一致します。 ([wd-_]+[.wd-_]+)
2 番目の括弧はドメイン名の部分と一致します。
([/]?[w/.]+) 3 番目の括弧は相対パスと一致します。
rrreee
🎜 括弧を使用する利点は、結果を処理するときに、プロトコル、ドメイン名、および相対パスを簡単に取得して、後続の処理を容易にすることができることです。 🎜🎜たとえば、preg_match_all()
を使用して照合する場合、結果配列 🎜index 0 はすべての結果、1 はプロトコル、2 はドメイン名、3 は相対パス 🎜 です。 🎜🎜要約: 上記がこの記事の全内容です。皆様の学習に役立つことを願っています。 🎜🎜関連する推奨事項: 🎜🎜🎜 PHP で複数フィールドのあいまい一致クエリを実装する方法 🎜🎜🎜🎜🎜🎜php🎜mailer バインディング メールボックスを実装する方法 🎜🎜🎜🎜🎜 最初の文字を取得するために PHP でカスタム関数を実装する方法漢字の🎜🎜 🎜🎜🎜🎜🎜🎜🎜以上がPHP を使用してページ内の URL の定期的なクロールを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。