Extraire des informations

Petit nouveau ! | 7 Messages

07 août 2014, 19:18

Bonjour,

Bonjour, j'extraie des informations d'une page. Par exemple depuis cette page:

<ul class="tags">
<li><div class="tag"><a href="http://www.url1.com" title="url1">title 1</a></div></li>

<li><div class="tag"><a href="http://www.url2.com" title="url2">title 2</a></div></li>
</ul>

Je souhaiterai obtenir title 1,title 2.

J'ai ainsi codé:
$m=array();
preg_match('/<ul class="tags">(.*?)<\/ul>/ims',$buff,$m);
$info['tags']=trim(strip_tags($m[1]));
$cats=explode("\n",$info['tags']);
$cats=array_map('trim',$cats);
$info['tags']=implode(',',$cats);

Mais il y'a un problème au niveau de l'explode \n.

Lorsque je met: preg_split('/\s+/ à la place de l'explode cela donne title,1,title,2. J'ai aussi essayé avec \r mais cela ne marche pas non plus.

Merci pour votre aide.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

10 août 2014, 14:37

salut,


pourquoi faire des split sur les sauts de lignes ?

si tu veux récupérer les textes des liens autant utiliser directement une expression régulière qui cible la chose.

par exemple
<?php
preg_match_all("/<a href="(.*)" title="(.*)">(.*)<\/a>/i", $input_lines, $output_array);
ce qui donne

Code : Tout sélectionner

Array ( [0] => Array ( [0] => <a href="http://www.url1.com" title="url1">title 1</a> [1] => <a href="http://www.url2.com" title="url2">title 2</a> ) [1] => Array ( [0] => http://www.url1.com [1] => http://www.url2.com ) [2] => Array ( [0] => url1 [1] => url2 ) [3] => Array ( [0] => title 1 [1] => title 2 ) )

pour tester les expressions expressions régulières en live tu as pas mal d'outils comme http://www.phpliveregex.com/

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 7 Messages

24 sept. 2014, 16:56

Merci pour votre réponse. Le preg_match_all marche mais j'ai ensuite du mal à séparer chaque information par une virgule et l'extraire. J'ai essayé:

$m=array();
preg_match_all("/<a href="(.*)" title="(.*)">(.*)<\/a>/i", $buff,$m);
$info['tags']=trim(strip_tags($m[3]));
$cats=array_map('trim',$cats);
$info['tags']=implode(',',$cats);

Mais cela ne marche pas. Il y'a beaucoup d'erreur notamment avec trim et array_map.

Eléphant du PHP | 151 Messages

25 sept. 2014, 10:34

En fait tu fais du grab de page ?... :roll: :roll:

Je vais te donner un lien, super mega top : http://simplehtmldom.sourceforge.net/

Très facile à utiliser, tut te casses pas la tête, suis bien les explications.
Développeur d'applications pour intranets industriels (IHM), DBA Oracle, auto entrepreneur. Je fuis les frameworks car je pense comme Rasmus Lerdorf : "all PHP frameworks suck"...
Je me suis lancé dans la reprise du projet PhpMyNewsletter (GNU GPL), que je vous invite à essayer.

echo ($user=='enregistré?"je t'aide":"je t'aide pas !");

Petit nouveau ! | 7 Messages

25 sept. 2014, 12:39

Merci pour ces informations mais tout le script a deja ete codé.

Je chercher juste à modifier ces quelques informations.

Eléphant du PHP | 63 Messages

25 sept. 2014, 15:01

Mais cela ne marche pas. Il y'a beaucoup d'erreur notamment avec trim et array_map.
preg_match_all('/<a\s[^>]*>\s*(.*?)\s*<\/a>/is', $buff, $m);
$info['tags'] = implode(',', $m[1]);

Petit nouveau ! | 7 Messages

25 sept. 2014, 15:34

Ca marche avec $info['tags'] = implode(',', $m[1]);

Merci beaucoup.