2010-10-13 16 views
5

Hey, j'aimerais gratter quelques données de mon blog en utilisant YQL:Comment utiliser plusieurs sélecteurs XPath dans une requête YQL

SELECT * FROM html WHERE url="http://site.com/blog" AND xpath="//div[@class='post']" 

Comment puis-je utiliser différents bits de XPath dans ma requête? Par exemple. puis-je faire quelque chose comme:

SELECT * FROM html WHERE url="http://site.com/blog" AND xpath="//div[@class='post']" AND xpath ="//div[@class='title']" 

en supposant que je veux obtenir le poste et le titre? Je suppose que je pourrais prendre tout le HTML mais je préférerais seulement prendre ce dont j'ai besoin car la vitesse est un problème ici.

Une fois que j'ai le code HTML, je veux extraire le texte du balisage, est-il correct d'utiliser des expressions régulières PHP pour cela? Je comprends également que vous pouvez utiliser la syntaxe CSS, si vous avez l'expérience de l'utilisation de YQL et pourrait me guider dans la façon dont je pourrais écrire une requête similaire à celle ci-dessus, mais en CSS plutôt que XPATH je serais reconnaissant!

Merci.

Répondre

11

En ce qui concerne CSS:

Voir le site YQL lui-même pour cela. Recherche google pour YQL et CSS (je ne peux poster qu'un seul lien ici et le second est plus utile.)

L'exemple qu'ils ont là ne fonctionne réellement plus mais vous pouvez essayer cet exemple, qui gratte les questions de la page d'accueil de stackoverflow.

YQL example

multiples choisit avec un XPATH:

Vous pouvez le faire directement avec la syntaxe XPath. par exemple.

SELECT * FROM html WHERE url="www.asscompact.de" and xpath="//head/meta[@name='title']|//head/meta[@name='description']|//head/meta[@name='keywords']" 
+0

Merci, n'était pas sûr de la syntaxe, mais cela a éclairci. –

+0

Très, très utile! Je vous remercie. – talkingnews

+0

Upvoted .. J'ai pensé cela moi-même mais je voulais savoir si je pouvais donner un espace ou quelque chose entre le résultat de deux xPaths, de sorte que plus tard je pourrais analyser le résultat et obtenir deux valeurs différentes. – SoulMan

-3

Ce n'est pas possible. Vous devez exécuter cette requête deux fois. La première fois pour le premier xpath et la deuxième fois pour le second xpath. Bien sûr, vous pouvez écrire votre propre déclaration open table et fournir un support pour ce type de requêtes.

+0

Ok merci pour l'info! –

0

Vous pouvez également écrire XPATH multiples Sélectionne comme ceci:

SELECT * FROM html WHERE url="www.asscompact.de" and xpath="//head/meta[@name='title' or @name='description']"