「氷」を含む単語をスクレイピングしたいページがあるとしましょう。どうすれば簡単にこれを行うことができますか? 物事をソースコードに分解する多くのスクレーパーを見てきましたが、これは必要ありません。Webページのプレーンテキストを検索するものが必要です。
編集: 基本的に、.jpeg を検索してファイル名全体を見つけるために何かが必要です。(ウェブサイトでは平文で表示され、タグに隠されているわけではありません)
以下に一致するものはすべて、そのice
中に含まれる単語です。
/(\w*)ice(\w*)/i
\w
(一致すること0-9
にも注意してください_
。以下の方が良い結果が得られる可能性があります/\b.*?ice\b.*?/i
:)
UPDATE
ファイル名を一致させるには(空白を含めることはできません):
/\S+\.jpeg/i
例:
<?php
$str = 'Picture of me: 238484534.jpeg and someone else img-of-someone.jpeg here';
$cnt = preg_match_all('/\S+\.jpeg/i', $str, $matches);
print_r($matches);
1. attribute,textname のように、HTML タグ内の単語も読みたいですか? 2.それとも、ウェブページの表示部分のみですか?
for#1 : ソリューションはシンプルで、他の回答で述べたように既に存在します。
for#2: PHP DOMDOCUMENT クラスを使用し、innerHTML のみを抽出して検索します。ドキュメントはこちら:
http://php.net/manual/en/class.domdocument.php
たとえば、これを参照してください。
これには正規表現を使用する必要があります。以下では、PCRE http://www.php.net/manual/en/ref.pcre.phpと関数 preg_match http://www.php.net/manual/en/function.preg-match-all.phpを使用します。
<?php
$html = <<<EOF
<html>
<head>
<title>Test</title>
</head>
<body>List of files:
<ul>
<li>test1.jpeg</li>
<li>test2.jpeg</li>
</ul>
</body>
</html>
EOF;
$matches = array();
$count = preg_match_all("([0-9a-zA-Z_-]+\.jpeg)", $html, $matches);
if (count($matches) > 1) {
for ($i = 1; $i < count($matches); $i++) {
print "Filename: {$matches[$i]}\n";
}
}
?>
これを試して:
preg_match_all('/\w*ice\w*/', 'abc icecream lice', $matches);
print_r($matches);