0

特定の Web ページのマークアップから画像をスクレイピングしようとしています。これらの Web ページにはすべてスライドショーがあります。それらのソースは、ページ上の JavaScript オブジェクトに含まれています。get_file_contents("http://www.example.com/page/1"); が必要だと思っています。次に、フレーズを入力できる preg_match_all() 関数を用意し (つまり、"\"LargeUrl\":\""、または "\"Description\":\"")、ヒットするまで文字列を取得します。次に見つかった引用符。

var photos = {}; 
photos['photo-391094'] = {"LargeUrl": "http://www.example.org/images/1.png","Description":"blah blah balh"};
photos['photo-391095'] = {"LargeUrl": "http://www.example.org/images/2.png","Description":"blah blah balh"};
photos['photo-391096'] = {"LargeUrl": "http://www.example.org/images/3.png","Description":"blah blah balh"};

私はこの関数を持っていますが、入力フレーズの後に行全体を返します。入力フレーズの後から次の引用符に到達するまで検索するように変更するにはどうすればよいですか? それとも、私はこれをすべて間違っていて、より良い方法がありますか?

$page = file_get_contents("http://www.example.org/page/1");
$word = "\"LargeUrl\":\"";

if(preg_match_all("/(?<=$word)\S+/i", $page, $matches))
{
    echo "<pre>";
    print_r($matches);
    echo "</pre>";
} 

理想的には、「\"LargeUrl\":\"」を入力した場合、関数は次のような配列を返します

$matches[0] = "http://www.example.org/images/1.png";
$matches[1] = "http://www.example.org/images/2.png";
$matches[2] = "http://www.example.org/images/3.png";
4

3 に答える 3

0

私はあなたのための完璧な解決策を持っています....次のコードを使用すると、必要な結果が得られます。

preg_match_all('/{"LargeUrl":(.*?)"(.*?)"/', $page, $result, PREG_PATTERN_ORDER);
for ($i = 0; $i < count($result[0]); $i++) {
        echo "<pre>";
        echo $result[2][$i];
        echo "</pre>";

}

ありがとう……p2c

于 2012-07-23T10:40:07.987 に答える
0

括弧を使用して、関心のある部分をキャプチャできます。それを行う簡単な正規表現は次のとおりです。

$word = '"LargeUrl":';
$pattern = "$word" . '\s+"([^"]+)"';

preg_match_all("/$pattern/", $page, $matches);

print_r($matches[1]);
于 2012-07-18T03:39:12.233 に答える
0

各画像 URL に一致する正規表現は間違いなくありますが、より簡単な場合は、オブジェクト全体を一致させてから、一致した文字列を json_decode() することもできます。

于 2012-07-18T03:39:22.187 に答える