2012-02-20 8 views
0

サイトの通貨を取るためにページスクレイピングスクリプトを書こうとしています。私は正規表現を書いて助けが必要です。ページスクレイピングのための正規表現

これまで私がこれまで持っていたことは次のとおりです。

<?php 

function converter(){ 
     // Create DOM from URL or file 
     $html = file_get_contents("http://www.bloomberg.com/personal- finance/calculators/currency-converter/"); 

    // Find currencies. (using h1 to test) 
     preg_match('/<h1>(.*)<\/h1>/i', $html, $title); 
     $title_out = $title[1]; 
     echo $title_out; 

} 

$foo = converter(); 
echo $foo; 



?> 

ここで、通貨はブルームバーグのサイトに保管されています。

サイト:http://www.bloomberg.com/personal-finance/calculators/currency-converter/

//<![CDATA[ 
     var test_obj = new Object(); 
     var price = new Object(); 
       price['ADP:CUR'] = 125.376; 

式は、その速度を得るためにどのように見えますか? どんな助力も素晴らしいだろう!

+0

HTMLコードを解析するために正規表現を使用しないでください。許容される彼の使用の場合、) – m0skit0

+1

。 –

+0

[PHPでHTMLを解析するには?](http://stackoverflow.com/questions/3650125/how-to-parse-html-with-php) – Gordon

答えて

3

これは私にとってはうまくいく - もっと柔軟にする必要がありますか?そしてそれはいろいろな空白を取る必要がありますか?それともちょうど1つのスペースですか? (等号)

"/price\['ADP:CUR'\] = (\d+\.\d+/)" 

使用:

if(preg_match("/price\['ADP:CUR'\] = (\d+\.\d+)/", $YOUR_HTML, $m)) { 
//Result is in $m[1] 
} else { 
//Not found 
} 
+0

ありがとう!すばらしい。ちょうど価値を返すにはどうしたらいいですか?私はそれの前に文字を取り除くだろうか?また可能性があります 正規表現の中にvarを入れました。たとえば、ADPではなくGBPを探したいと思っていました。 "/ price \ ['$ this-> from:CUR' \] = \ d + \。\ d + /" – Will

+0

私の更新された答えを見てください:)そして、あなたは正規表現で変数を使うことができます。 – jack

+0

タンクしてね! @ジャック – Will

2

これは、ブルームバーグサイト上のJavaScriptオブジェクトと同じ準配列を返します。そこ

<?php 
$data = file_get_contents('http://www.bloomberg.com/personal-finance/calculators/currency-converter/'); 

$expression = '/price\\[\'(.*?)\'\\]\\s+=\\s+([+-]?\\d*\\.\\d+)(?![-+0-9\\.]);/'; 

preg_match_all($expression, $data, $matches); 

$array = array_combine($matches[1], $matches[2]); 

print_r($array); 

echo $array['ADP:CUR'];// string(7) "125.376" 
?> 
3

あなたが行く:

/ADP:CUR[^=]*=\s*(.*?);/i 
関連する問題