2009-09-03 10 views
1

Je suis en train de gratter une page où les informations que je suis à la recherche de mensonges dans le secteur:PHP Grattage page

<tr class="defRowEven"> 
    <td align="right">label</td> 
    <td>info</td> 
</tr> 

J'essaie d'obtenir l'étiquette et les informations sur la page. Avant je faisais quelque chose comme:

$hrefs = $xpath->evaluate("/html/body//a"); 

Voilà comment je saisis les URL. Y at-il un moyen de saisir cette information tr? Serait-il préférable d'utiliser regex ou en utilisant le DOMXPath? Je ne suis pas familier avec DOMXPath et toute information serait plus qu'utile. Je vous remercie!

Répondre

1

Je ne suis pas familier avec XPath, mais en utilisant SimpleHtmlDom vous pouvez faire ceci:

foreach($html->find('tr.defRowEven') as $row) { 

    //get the 'label' (first cell) 
    echo $row->find('td', 0)->innerText; 

    //get the 'info' (second cell) 
    echo $row->find('td', 1)->innerText; 
} 
+0

Essayé cela, pas de chance. Juste un écran vide. Je continuerai à travailler avec la classe, merci! – Petrogad

+0

@Frederico - peut-être essayer echo $ row-> find ('td', 0) -> plainText; – karim79

0

Quelqu'un ici récemment au SO a donné un lien vers phpQuery .. une sorte de jQuery pour côté serveur php /. qui devrait rendre cette chose un peu facile. Je ne l'ai pas essayé donc je ne peux pas commenter de première main

4

XPath peut sélectionner en fonction des attributs. Pour trouver votre ligne, puis, utilisez:

$rows = $xpath->query("//tr[@class='defRowEven']"); 

Cela devrait retourner une liste de lignes, de sorte que vous pouvez sélectionner l'étiquette et les informations pour chaque sans les mélanger:

foreach ($rows as $row) { 
    $label = $xpath->evaluate("td[@align='right']", $row); 
    $info = $xpath->evaluate("td[2]", $row); 
} 

Dans le cas où doesn ne fonctionne pas, vous pouvez essayer la route regex:

preg_match_all('/<tr class="defRowEven">\s*<td align="right">(.*?)<\/td>\s*<td>(.*?)<\/td>/', 
    $html, $matches, PREG_SET_ORDER); 
foreach ($matches as $match) { 
    list($full, $label, $info) = $match; 
} 
+0

Essayé votre 2ème exemple, et ne pouvait pas obtenir ce travail. Je vais continuer à essayer cependant. Je vous remercie! – Petrogad

Questions connexes