parser, xpath

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : parser, xpath

Re: parser, xpath

par damien_55 » 15 déc. 2011, 11:00

Meme avec les quotes. ça ne fontionne pas
preg_match_all('/<span class="st">(.*)<\/span>/U', $result, $matches);

Re: parser, xpath

par xTG » 14 déc. 2011, 19:44

Il te manque des quotes autour de la valeur de l'attribut class de la balise span.

Re: parser, xpath

par damien_55 » 14 déc. 2011, 18:05

J'ai reussi à extraire le titre mais je rencontre un probleme sur les snippets avec cette balise:

<span class=st> apparement, cette fonction
preg_match_all('/<span class=st>(.*)<\/span>/U', $result, $matches);
ne semble aps fonctionner ??

Re: parser, xpath

par damien_55 » 14 déc. 2011, 17:07

Re,

Ce code ci marche pour extraire les url des pages de resultats:
<?php
//Script php : Extraction urls Résultats Google
// Copyrights 2008 Seoblackout.com
//http://www.seoblackout.com
//Url script : http://www.seoblackout.com/2008/10/26/extraire-resultats-google/

@set_time_limit(0);
$useragent='Mozilla/5.0';
$regex='<h3 class="r">';
$regex_titre='<h3 class="r">';
$regex_snipets='<h3 class="r">';

//extension et langue google
if ((isset($_POST['ext'])) && ($_POST['ext']!=''))
{
	$ext=strip_tags($_POST['ext']);
	if ($ext=='fr') {
	$lang='fr';
	}
	else if ($ext=='com') {
	$lang='en';
	}
	else if ($ext=='es') {
	$lang='es';
	}
	else if ($ext=='de') {
	$lang='de';
	}
	else if ($ext=='ca') {
	$lang='en';
	}
	else if ($ext=='ca2') {
	$ext='ca';
	$lang='fr';
	}
	else {
	$ext='fr';
	$lang='fr';
	}
}
else
{
	// par défaut, on recherche sur google.fr et lang=fr
	$ext='fr';
	$lang='fr';
}
//nombre de page à extraire :
if ((is_numeric($_POST['pages'])) && ($_POST['pages']!=''))
{
	$c=(strip_tags($_POST['pages'])-1);
}
else
{
	//10 pages par défaut, on part de 0 donc 10 pages = 9
	$c=9;
}

if ((isset($_POST['kw'])) && ($_POST['kw']!=''))
{
	$kw=trim(strip_tags($_POST['kw']));
	$pagenum = 0;
	$googlefrurl = "http://www.google.".$ext."/search?hl=".$lang."&q=" . urlencode($kw) . "&start=$pagenum";
	$url_new = '';

	while($pagenum <= $c)
	{
			if (function_exists('curl_init'))
			{
				$ch = curl_init();
				curl_setopt($ch, CURLOPT_USERAGENT, $GLOBALS['useragent']);
				curl_setopt($ch, CURLOPT_URL,$googlefrurl);
				curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
				$result=curl_exec ($ch);
				curl_close ($ch);
			}
			else
			{
				$result= file_get_contents($googlefrurl);
			}
		preg_match_all('/'.$regex.'<a href="(.*?)"/si', $result, $matches);


			$i = 0;
			$n = count($matches[1]);
			$pagenum++;
			$pagenum2 = $pagenum.'0';
			$googlefrurl = "http://www.google.".$ext."/search?hl=".$lang."&q=" . urlencode($kw) . "&start=$pagenum2&safe=off&pwst=1&filter=0";

			while($i <= $n)
			{
				$url_new1 = addslashes($matches[1][$i]);
				$url_new .= trim($matches[1][$i])."<br>";
				$i++;
flush();





			}
	}
	$url_new .= '';





}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Extraction Urls résultats Google</title>
</head>
<body>
<h1>Extraction Urls résultats Google</h1>
<div>
<?php
if ((isset($_POST['kw'])) && ($_POST['kw']!='')) {
	echo "<h3>Keyword : ",strip_tags($kw),"</h3>";
	echo "<h6>Google Results</h6>";
	echo str_replace('<br><br>','<br>',$url_new);
	echo str_replace('<br><br>','<br>',$titre_new);
	echo str_replace('<br><br>','<br>',$snipets_new);
}
?>
<form method="POST" action="<?php echo strip_tags($_SERVER['REQUEST_URI']) ;?>">
<p>Saisir vos mots-clés :</p>
<input name="kw" type="text" size="100" value="<?php if (isset($_POST['kw'])) {echo strip_tags($kw);} ?>">
<p>Nombre de pages à extraire (optionel => 10 pages par défaut):</p>
<input name="pages" type="text" size="3" maxlength="3" value="<?php if (isset($_POST['pages'])) {echo strip_tags($_POST['pages']);} else {echo '10';} ?>">
<p>Moteur :</p>
<select name="ext">
<option value="fr"<?php if (($_POST['ext'])=='fr') {echo ' selected';} ?>>Google.fr (hl=fr)</option>
<option value="com"<?php if (($_POST['ext'])=='com') {echo ' selected';} ?>>Google.com (hl=en)</option>
<option value="es"<?php if (($_POST['ext'])=='es') {echo ' selected';} ?>>Google.es (hl=es)</option>
<option value="de"<?php if (($_POST['ext'])=='de') {echo ' selected';} ?>>Google.de (hl=de)</option>
<option value="ca"<?php if (($_POST['ext'])=='ca') {echo ' selected';} ?>>Google.ca (hl=en)</option>
<option value="ca2"<?php if (($_POST['ext'])=='ca2') {echo ' selected';} ?>>Google.ca (hl=fr)</option>
</select>
<p><input type="submit" value="Go" name="go">
<input type='button' value='Annuler' onclick='location.href="<?php echo strip_tags($_SERVER['REQUEST_URI']) ;?>"'></p>
</form>
<br />
<small>Script proposé par SEO BlackOut : <a href="http://www.seoblackout.com/">référencement</a></small>
</div>
</body>
</html>
Maintenant, il me manque a extraire le titre et le snipets. J'ai bien reperer les blaise adéquates:
Titre: <h3 class=r>
snipet: <span Class=st>

mais j'y connais rien au fonctionnement du preg_match_all et comment lier tout ça; Merci de votre aide

Re: parser, xpath

par Mazarini » 14 déc. 2011, 16:28

Il semble d'après le message que la page comporte une erreur bloquante pour l'analyse de la page. La page est reconnu par le valideur du w3c comme une page html5, peut être que ca ne facilite pas la tache du parser.

Re: parser, xpath

par damien_55 » 14 déc. 2011, 16:07

Donc, on ne peut parser cette page? pourtant c'est une page de résultats google ??

Re: parser, xpath

par Mazarini » 14 déc. 2011, 16:03

Le message me fait penser que la page que tu veux parser n'est pas écrite dans un html correct.

Pour info : 85 Errors, 7 warning(s)
source : http://validator.w3.org/check?uri=http% ... ne&group=0

Re: parser, xpath

par damien_55 » 14 déc. 2011, 15:36

J'ai ce message d'erreur:

Warning: DOMDocument::loadHTML() [function.DOMDocument-loadHTML]: htmlParseEntityRef: expecting ';' in Entity, line: 1 in C:\Program Files\EasyPHP 2.0b1\www\extract-google-essai.php on line 10

Re: parser, xpath

par Mazarini » 14 déc. 2011, 15:28

Bonjour,

A part le fait que ca ne marche pas, qu'est ce qui se passe exactement. Quel est le problème que tu rencontres ?

Une des premières choses à faire, est déjà d'enlever le @ devant dom->loadHTML($googlefrurl); car ca cache un éventuel message d'erreur.
Une autre chose serait d'afficher echo $div1->nodeName,' => ',$div1->nodeValue,'<br>'; dans la boucle.

parser, xpath

par damien_55 » 14 déc. 2011, 15:14

Bonjour,

Je suis entrain de faire un parser pour recuperer les titres des resultats google.

J'ai écrit ça, mais ça ne fonctionne pas.
<?php
 header('Content-type: text/html; charset=UTF-8');

$googlefrurl = "http://www.google.fr/search?hl=fr&q=audi";



$dom = new DOMDocument();

@$dom->loadHTML($googlefrurl);

$xpath = new Domxpath($dom);

$str_nodes1="/html/body/div[4]/div/div/div[4]/div[2]/div[2]/div/div[2]/div/ol/li/div/h3/a";
$result1 = $xpath->query($str_nodes1);
$titre ='';
foreach ($result1 as $div1) {
echo $titre.= $div1->nodeValue .'<br>';
}
echo  '<br /><br />'."\n";

echo $googlefrurl;

 ?>
Quelqu'un a une idée ??