PHPでHTMLソース内にあるURLを取得するプログラムを作ってみました。

2024.04.01
PHPでHTMLソース内にあるURLを取得するプログラムを作ってみました。
HTMLのソースファイルから、画像などのファイルのURLを抽出するPHPプログラムです。
対象となるタグはです
また、一部
ChatGPT3.5を利用しています。


ノーマルのソースはこちら。
正規表現をしてURLを抽出しています。
事前にファイルを読み込みして変数に入れている部分は自前です。
<?php
$sourceData = "";
$sourceData = OpenFile("source.html");

function OpenFile($file){
if (file_exists($file)) {
$newAray = array();
$handle = fopen("$file", "r");
while ($lines = fgets($handle)) {
$str = $lines;
array_push($newAray,$str);
}
fclose($handle);
$sourceData = join('',$newAray);
}
return $sourceData;
}

// 正規表現を使って<a>タグと<img>タグと<source>タグの中のURLを抽出する
$urlRegex = '/(?:<a[^>]*href=[\'"]([^\'"]+)[\'"][^>]*>|<img[^>]*src=[\'"]([^\'"]+)[\'"][^>]*>|<source[^>]*srcset=[\'"]([^\'"]+)[\'"][^>]*>)/i';

$urls = [];
preg_match_all($urlRegex, $sourceData, $matches);

// 抽出したURLを配列に追加する
foreach ($matches[1] as $match) {
if (!empty($match)) {
$urls[] = $match;
}
}

foreach ($matches[2] as $match) {
if (!empty($match)) {
$urls[] = $match;
}
}

foreach ($matches[3] as $match) {
if (!empty($match)) {
$urls[] = $match;
}
}

// ソート
sort($urls);

// URLを出力
echo "Found URLs:<br>\n";
foreach ($urls as $url) {
echo $url . "<br>\n";
}
?>




このままだとちょっと見にくかったので、ソースを更に短くしてみました。
こちらだとタグが増えても、対応し易いかなと思います。ただし、HTMLタグに対応するURLを厳密にみていません
AタグのURLはhrefに含まれますが、後者のソースでは、「href、src、srcset」のいずれかに値が含まれると表示されるようになっています。
<?php
#ini_set( 'display_errors', 1 );
$sourceData = "";
$sourceData = OpenFile("source.html");

function OpenFile($file){
if (file_exists($file)) {
$newAray = array();
$handle = fopen("$file", "r");
while ($lines = fgets($handle)) {
$str = $lines;
array_push($newAray,$str);
}
fclose($handle);
$sourceData = join('',$newAray);
}
return $sourceData;
}

// 正規表現を使って<a>タグと<img>タグと<source>タグの中のURLを抽出する
$urlRegex = '/(?:<(a|img|source)[^>]*(href|src|srcset)=[\'"]([^\'"]+)[\'"][^>]*>)/i';

$urls = [];
preg_match_all($urlRegex, $sourceData, $matches);

// 抽出したURLを配列に追加する
foreach ($matches[3] as $match) {
if (!empty($match)) {
$urls[] = $match;
}
}

// ソート
sort($urls);

// URLを出力
echo "Found URLs:<br>\n";
foreach ($urls as $url) {
echo $url . "<br>\n";
}
?>




なんでこんなの作ったかといえば、URL抽出する必要があったんですよね。
ChatGPTつかってちゃちゃっとやったので、荒削りです。すみません。

ご利用に関しては制限をしておりません。ご自由にご利用ください。
ただし、トラブル等は負えませんのでご了承ねがいます。



関連記事


「ぽーん」ボタン
Amazonのセール品にご注意ください
Adobe Photoshop のAI機能で画像を作ってみた
酷い広告と、その先にも地獄を見た件
コピーしたWordPressがリダイレクトされてしまうので、DBを直接弄って対応する。
JPEGのEXIF情報を一覧表示するサービスを公開しました。
TVアニメ「彼女が公爵邸に行った理由 第9話」の「神殿内だけで用いられる特殊な言葉」を翻訳してみた。
[Windows] 英語キーボード(101/102キー)を日本語キーボード(106/109キー)に変更する。
ツイッターの画面で「上上下下左右左右BA」と入力すると〜
超A&G+の「m3u8」のURLを取得できるページを作ってみた。
Streamlink 用「AbemaTV ダウンロード ブックマークレット」
Recotte Studio と COEIROINK を連携する「voivoca」を設定する。
Windows 10 バージョン 22H2 を手動でアップデートする。
Recotte Studio と VOICEVOX をシームレスに連携する「RecotteVoicevoxBridge」を設定する。
夏川椎菜のCultureZをStreamlinkでリアルタイム録音するBAT作成を簡単にする。
12星座検索!
キーワード検索のサポート「検索フォーム」
Windows のフォルダアイコンを変更する

コメント投稿フォーム

 

フィギュア

最近

カテゴリ

カプセルトイ

初音ミク

アーカイブ

RSS Feed RSS Feed Atom Feed TopicXML アイコン
WebBoard

PICUP