4

目標:cURLを使用してiframe内の「パリ」という単語を削りたい。

iframeを含む単純なページがあるとします。

<html>
<head>
<title>Curl into this page</title>
</head>
<body>

<iframe src="france.html" title="test" name="test">

</body>
</html>

iframeページ:

<html>
<head>
<title>France</title>
</head>
<body>

<p>The Capital of France is: Paris</p>

</body>
</html>

私のcURLスクリプト:

<?php>

// 1. initialize

$ch = curl_init();

// 2. The URL containing the iframe

$url = "http://localhost/test/index.html";

// 3. set the options, including the url

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 2);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

// 4. execute and fetch the resulting HTML output by putting into $output

$output = curl_exec($ch);

// 5. free up the curl handle

curl_close($ch);

// 6. Scrape for a single string/word ("Paris") 

preg_match("'The Capital of France is:(.*?). </p>'si", $output, $match);
if($match) 

// 7. Display the scraped string 

echo "The Capital of France is: ".$match[1];

?>

結果=何もありません!

誰かが私にフランスの首都を見つけるのを手伝ってもらえますか?!;)

次の例が必要です:

  1. iframeURLの解析/取得
  2. URLをカールする(index.htmlページで行ったように)
  3. 文字列「Paris」の解析

ありがとう!

4

3 に答える 3

3

--編集--ページのコンテンツを文字列にロードし、iframeの文字列を解析してから、iframeソースを別の文字列にロードできます。

$wrapperPage = file_get_contents('http://localhost/test/index.html');

$pattern = '/\.*src=\".*\.html"\.*/';

$iframeSrc = preg_match($pattern, $wrapperPage, $matches);

if (!isset($matches[0])) {
    throw new Exception('No match found!');
}

$src = $matches[0];

$src = str_ireplace('"', '', $src);
$src = str_ireplace('src=', '', $src);
$src = trim($src);

$iframeContents = file_get_contents($src);

var_dump($iframeContents);

- オリジナル -

合格率に取り組みます(以前に回答した質問への回答を受け入れます)。

カールハンドラーを設定するURLは、i-frameをラップするファイルです。iframeのURLに設定してみてください。

$url = "http://localhost/test/france.html";
于 2011-12-07T00:02:41.937 に答える
3

さまざまな理由で、iframeカールを独自のサーバーのコンテキスト外で読み取ることができず、カールを直接見ると、ある種の「直接または外部で読み取ることができない」というエラーメッセージがスローされる場合があることに注意してください。

このような場合、curl_setopt($ ch、CURLOPT_REFERER、$ fullpageurl);を使用できます。(phpを使用していて、curl_execを使用してテキストを読んでいる場合)次に、curl_execは、iframeが元のページにあると見なし、ソースを読み取ることができます。

したがって、何らかの理由でfrance.htmlをiframeとして含む大きなページのコンテキスト外で読み取ることができなかった場合でも、CURLOPT_REFERERを使用して上記のメソッドを使用し、メインページを設定してソースを取得できます(test / index.html in元の質問)リファラーとして。

于 2013-06-26T18:09:24.103 に答える
2

の質問に答えるために、パターンが入力テキストと一致しません:

          <p>The Capitol of France is: Paris</p>

終了段落タグの前に余分なスペースがありますが、これは一致しません。

preg_match("'The Capitol of France is:(.*?). </p>'si"

.キャプチャグループの前にスペースがあり、その後は冗長を削除する必要があります。

preg_match("'The Capitol of France is: (.*?)</p>'si"

2つの位置のいずれかでオプションのスペースを使用するには、\s*代わりに次を使用します。

preg_match("'The Capitol of France is:\s*(.*?)\s*</p>'si"

より具体的にするために、キャプチャグループを文字のみに一致させることもできます(\w+)

于 2011-12-07T00:07:11.090 に答える