2012-03-24 11 views
0

Ich bin neu in PHP und versuche, Daten von einer Website zu kratzen Ich benutze reguläre Ausdrücke, aber das Finden von Content-Verleih und Details in der div ist ein Problem hier ist mein Code. Könnte mir jemand helfen?Scraping und divs

<?php 
header('content-type: text/plain'); 
$contents= file_get_contents('http://www.hassconsult.co.ke/index.php?option=com_content&view=article&id=22&Itemid=29'); 
$contents = preg_replace('/\s(1,)/','',$contents); 
$contents = preg_replace('/&nbsp;/','',$contents); 

//print $contents."\n"; 
$records = preg_split('/<span class="style8"/',$contents); 

for ($ix=1; $ix < count($records); $ix++){ 
$tmp = $records[$ix]; 

preg_match('/href="(.*?)"/',$tmp, $match_url); 
preg_match('/>(.*?)<\/span>/',$tmp,$match_name); 
preg_match('/<div[^>]+class ?= ?"style10"[^>]*>(\s*(<div.*(?2).*<\/div>\s*)*)<\/div>/Us',$tmp,$match_rental);//error is here 
print_r($match_url); 
print_r($match_name); 
print_r($match_rental); 
print $tmp."\n"; 
exit(); 
} 
//print count($records)."\n"; 
//print_r($records); 
//if ($contents===false) 
//print 'FALSE'; 
//print_r(htmlentities($contents)); 

?> 

Hier ist ein Beispiel des Inhalts

>HILLVIEW CROSSROADS4 BED HOUSE</span></div></td> 
       </tr> 
       <tr> 
        <td width="57%" style="padding-left:20px;"><div align="left" class="style10" style="color:#007AC7;"> 
         <div align="left"> 
              Rental; 
         USD      4,500 
         </div> 
        </div></td> 
        <td width="43%" align="right"><div align="right" class="style10" style="color:#007AC7;"> 
         <div align="right"> 

         No.    
         834 

         </div> 
        </div></td> 
       </tr> 
       <tr> 
        <td colspan="2" style="padding-left:20px;color:#000000;"> 
        <div align="justify" style="font-family:Arial, Helvetica, sans-serif;font-size:11px;color:333300;">Artistically designed 4 bed (all 
ensuite) house on half acre of well-tended gardens. Lounge with fireplace opening to terrace, opulent master suite, family room, study. Good finishes, SQ, carport, extra water storage 
and generator.        <a href="/index.php?option=com_content&amp;view=article&amp;id=27&amp;Itemid=74&amp;send=5&amp;ref_no=834/II&amp;t=2">....Details</a>    </div></td> 
       </tr> 
      </table></td> 
      </tr> 
</table> 
<br> 
+0

Warum sind Verwenden Sie reguläre Ausdrücke, um HTML zu analysieren? Es gibt mehrere HTML-Parser für PHP, die alle Arten von Dingen behandeln, die reguläre Ausdrücke nicht haben. Ein HTML-Parser weiß beispielsweise, welche Konstrukte in welchen Versionen von HTML und XHTML gültig sind und bestimmt anhand des Doctypes, welche Version die Seite verwendet. –

+0

Bitte senden Sie mir Links zu einem Tutorial würde ich sehr schätzen, ich bin ein bisschen neu – user1207576

Antwort

2

Diese Website ist nicht gut CSS-Selektoren hat, aber es ist noch nicht zu schwer, es mit XPath zu bekommen:

$dom = new DOMDocument(); 
@$dom->loadHTMLFile('http://www.hassconsult.co.ke/index.php?option=com_content&view=article&id=22&Itemid=29'); 
$xpath = new DOMXPath($dom); 

foreach($xpath->query("//div[@id='ad']/table") as $table) { 
    // title 
    echo $xpath->query(".//span[@class='style8']", $table)->item(0)->nodeValue . "\n"; 
    // price 
    echo $xpath->query(".//div[@class='style10']/div", $table)->item(0)->nodeValue . "\n"; 
    // description 
    echo $xpath->query(".//div[@align='justify']", $table)->item(0)->nodeValue . "\n"; 
} 
+0

Wissen Sie, wie ich auf die nächste Seite oder die Details überqueren kann, weil unter mehr Details brauche ich die Bilder und von der Karte Breite und Länge unterstützt Xpath dies ? Vielen Dank! – user1207576

+0

Ich empfehle, einige xpath Tutorials zu lesen und es selbst auszuprobieren. Wenn Sie nicht weiterkommen, können Sie eine neue Frage mit einem xpath-Tag posten, und Sie erhalten wahrscheinlich eine gute Antwort. – pguardiario

+0

ok danke eine letzte Frage wie bekomme ich den Titel hinzugefügt echo $ xpath-> query ("./Span [@ class = 'style8']", $ Tabelle) -> item (0) -> nodeValue; unter foreach und gibt einen Fehler zurück, der versucht, den Namen zu erhalten. – user1207576