2010-05-14 69 views
0

我試圖使用php cURL和preg_match從下面的html頁面/鏈接中提取價格。基本上,我期待這個代碼輸出4,550,但由於某種原因,我得到php cURL。 preg_match,從xhtml中提取文本

 Notice: Undefined offset: 1 in C:\wamp\www\test.php on line 22

我覺得模式是正確的,因爲如果我把HTML本身的變量和逃避「」它的工作原理! 。 另外,如果我輸出(echo $ result;)它顯示從foxtons網站正確抓住的HTML,所以我無法弄清楚爲什麼整個事情不起作用。我需要做這項工作,如果您能告訴我爲什麼會生成該通知,以及爲什麼我的當前腳本不起作用,我將不勝感激。

 
$url = " http://www.foxtons.co.uk/search?bedrooms_from=0&property_id=727717 "; 
$ch = curl_init($url);

curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($ch); curl_exec($ch); curl_close($ch); $result2 = str_replace('"', '\"', $result);

$tagname1= ");</script> "; $tagname2= "</noscript> per month</a>";

$pattern = "/$tagname1(.*?)$tagname2/"; preg_match($pattern, $result, $matches); $prices = $matches[1]; print_r($prices); ?>

+0

爲什麼你定義$ result2如果你不使用它? – Artefacto 2010-05-15 00:02:28

回答

0

我重寫了劇本有點佔超過1 <無腳本>在頁面上。你需要使用preg_match_all來尋找所有的匹配,而不是隻停留在第一個匹配。



$url = "http://www.foxtons.co.uk/search?bedrooms_from=0&property_id=727717"; 
$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1); 
$result = curl_exec($ch); 
curl_exec($ch); 
curl_close($ch); 

preg_match_all("/<noscript>(.*)<\/noscript>/", $result, $matches); 
print_r($matches); 

輸出



Array 
(
    [0] => Array 
     (
      [0] => £1,050 
      [1] => 4,550 
     ) 

    [1] => Array 
     (
      [0] => £1,050 
      [1] => 4,550 
     ) 

) 

我想這對我的盒子,它的工作 - 讓我知道,如果它的工作對你

+0

是的,它也適用於我的。我會將你的答案設定爲接受,但如果你能向我解釋爲什麼我的腳本不起作用,我將不勝感激,因此我可以理解它有什麼問題。 問候, 邁克爾! – Michael 2010-05-16 03:25:45

+0

我看到的一些東西 - 1)你不應該需要逃避報價 2)使用preg_match_all和preg_match,preg_match_all找到所有匹配與第一個匹配(在這種情況下,這不是你正在尋找的結果) 3)你用*和?在模式字符串中,?匹配零次或一次,*匹配零次或多次 – 2010-05-16 22:43:40

0

不要使用正則表達式來解析HTML,使用改爲html dom解析器,如PHP Simple HTML DOM Parser

include("simple_html_dom.php") ; 

$html = file_get_html("http://www.foxtons.co.uk/search?bedrooms_from=0&property_id=727717"); 

foreach($html->find('noscript') as $noscript) 
{ 

    echo $noscript->innertext."<br>"; 
} 

回聲的:

£1,600 
6,934 
£1,500 
6,500 
£1,350 
5,850 
£950 
4,117 
£925 
4,009 
£850 
3,684 
£795 
3,445 
£795 
3,445 
£775 
3,359 
£750 
3,250