刮取网站以获得PHP中的特定值。

时间:2013-07-26 06:09:06

标签: php regex

我正试图从网站上删除cetrain值:http://www.gitanjalijewels.com/

我使用以下代码:

<?php 


$data = file_get_contents('http://www.gitanjalijewels.com/category.php?id=39');
$regex = '/GOLD RATES:: (.+?) ,/';
preg_match($regex,$data,$match);
var_dump($match); 
echo $match[1];

&GT;

然而,我得到的结果是:

array(0){}

无法确定可能出现的问题?任何人都可以指导我朝着正确的方向前进吗?

3 个答案:

答案 0 :(得分:2)

不要使用正则表达式来解析HTML。使用DOM解析器。

include('simple_html_dom.php');
$html = file_get_html('http://www.gitanjalijewels.com/');

foreach($html->find('/html/body/div[1]/div/table/tbody/tr[3]/td/li/marquee/') as $element)                                     
{ 
       echo $element->plaintext . '<br>';
}

输出:

GOLD RATES::(24kt999:--Rs.2868), (24kt995:--Rs.2841), (22kt:--Rs.2675), (18kt:--Rs.2236) 

答案 1 :(得分:1)

$regex = '/GOLD RATES::[\s]?(.+?)[\s]?,/si';
preg_match($regex,$data,$match);
var_dump($match);

输出:

array(2) {
  [0] =>
  string(32) "GOLD RATES::(24kt999:--Rs.2868),"
  [1] =>
  string(19) "(24kt999:--Rs.2868)"
}

答案 2 :(得分:1)

$html = file_get_contents("http://www.gitanjalijewels.com/category.php?id=39");

$matches = array();
preg_match("/GOLD RATES::[^\>]+/", $html, $matches);
print("<pre>");
var_dump($matches);
print("</pre>");

if( count($matches) > 0 ){
    $html = $matches[0];
    $matches = array();
    preg_match_all("/\(([^:]+)\:([^\)]+)\)/", $html, $matches);

    $goldPrice = array();
    if( count($matches) > 0){
        for($i = 0; $i<count($matches[1]); $i++)
            $goldPrice[ $matches[1][$i] ] = $matches[2][$i];
    }
    print("<pre>");
    var_dump($goldPrice);
    print("</pre>");
}

result:
array(4) {
    ["24kt999"]=>
        string(9) "--Rs.2868"
    ["24kt995"]=>
        string(9) "--Rs.2841"
    ["22kt"]=>
        string(9) "--Rs.2675"
    ["18kt"]=>
        string(9) "--Rs.2236"
}