2017-07-17 11 views
0

私のPHPファイルの天気予報ページからいくつかのコンテンツにアクセスしようとしています。ウェブサイトは:http://www.weather-forecast.com/locations/Bergen/forecasts/latestで、ビューソースでは、「3日天気予報の要約」から必要な情報を得ることができます。ウェブサイトでpreg_matchを使用して情報にアクセスしたときに空の配列が返される

私のコードは、これまでのところです:

<?php 

    $contents = file_get_contents("http://www.weather-forecast.com/locations/Bergen/forecasts/latest"); 

    preg_match('/3 Day Weather Forecast Summary:<\/b><span class="read-more-small"><span class="read-more-content"> <span class="phrase"> (.*?) </s', $contents, $matches); 
    print_r($matches); 

?> 

それは私のソースコード内のスパンとの間のすべての情報を与える文句を言わないいくつかの理由。私がアクセスしたいのは:

3日の天気予報の概要:午前中には重い雨(合計17ミリメートル)。非常に軽度(水曜日の午後には最大C、火曜日の夜にはC)。風は減少しています(月曜の夜はWSWからの新風、月の夜は静かです)。

このようなクリーンテキスト。助言がありますか?

よろしく、Bojar

答えて

0

ウェブサイトのソースは3日の概要前後のスペースを持っていないので、私の知る限り、あなたの正規表現は、ワイルドカードの試合の前後に空白を含めるべきではありません。試してみてください:

'... <span class="phrase">(.*?)</s' 

全コール:

preg_match(
    '/3 Day Weather Forecast Summary:<\/b><span class="read-more-small"><span class="read-more-content"> <span class="phrase">(.*?)</s', 
    $contents, 
    $matches 
); 

編集:ちょうどスペースなしパターンが期待される結果を生成することを確認しました。

さらに、この種の解析は、長期的なものや個人的な趣味のプロジェクト以外のものについてはご注意ください。 HTML構造やCSSクラスなどでは、ほとんどのマイナーチェンジ(空白に依存します)の後も分解するのは非常に簡単です。もっと信頼できるものを探すには、CSSセレクタ付きのHTMLパーサを使用することを検討してください例えば文書内のspan.phraseこれはまだ完全ではありませんが、preg_matchよりも安定しています。

+0

私があなたのことを完全に理解しているかどうかはわかりません。すべてのスペースを削除することを意味しますか? preg_match( '/ 3日天気予報概要:<\/b>(。*? ) stAMy

+0

@stAMyその編集が私が何を意味するのかというと、 –

+0

ありがとうございました!それは確かに働いた!回答を解決策としてどのようにマークしますか? – stAMy

関連する問題