2010-10-24 5 views
0

J'essaie d'extraire des données d'un site Web à l'aide de l'objectif c. C'est tout nouveau pour moi, alors j'ai fait quelques recherches. Ce que je sais maintenant, c'est que j'ai besoin d'utiliser xpath, et j'ai un autre wrapper pour celui appelé hpple pour l'iPhone. Je l'ai mis en marche dans mon projet.Expressions régulières (analyse syntaxique HTML sur iPhone)

Je suis confus sur la façon dont je récupère des informations sur le site. Apparemment, je dois utiliser des expressions régulières dans cette ligne de code:

NSArray * a = [doc search:@"//a[@class='sponsor']"]; 

Ceci est juste un exemple. Est-ce que ce truc dans la recherche: @ "...." l'expression régulière? Si oui, je suppose que je peux développer les centaines de modèles dont j'ai besoin pour mon programme pour analyser le site (j'ai besoin de beaucoup de données), mais y a-t-il un meilleur moyen? Je suis vraiment perdu dans ça. Toute aide est appréciée.

Répondre

1

Le paramètre est un XPath, pas une expression régulière. Voici une répartition:

  • Tous les xpaths sont interprétés par rapport à un context node. Dans ce cas, c'est le noeud racine.
  • // est une abréviation qui signifie "tous les descendants"
  • a signifie "tout enfant nodes avec un type de noeud 'a'" (en HTML, c'est anchors)
  • [...] contient une predicate, le raffinage juste qui a à match de
    • @ est une abréviation pour les noeuds d'attribut
    • @class signifie un attribut nommé "classe"
    • @class='sponsor' signifie un attribut de classe égal à "sponsor". Notez que ceci ne correspondra pas aux nœuds avec une classe contenant "sponsor", tel que <a class="big sponsor" ...>; la classe doit être égale.

Tous ensemble, nous avons « « a » noeuds descendant de la racine qui ont la classe égale à« commanditaire ».

+0

Très instructif. Par hasard, y a-t-il un programme que je peux utiliser pour trouver facilement le bon XPath? Ou XPath est-il assez facile à utiliser? – nicholjs

+0

Qu'entendez-vous par "XPath correct"? Voulez-vous dire trouver un XPath qui va sélectionner des nœuds donnés? Je n'ai vu aucune application qui fait cela. Cependant, il existe de nombreux [testeurs XPath] (http://www.google.com/search?q=xpath+test) qui vous permettent de tester si un XPath donné sélectionne les nœuds que vous souhaitez pour un document donné. Si vous utilisez un Mac, essayez [AquaPath] (http://ditchnet.org/aquapath/) pour commencer. Pour travailler avec XPath, recherchez des tutoriels. Certains aspects d'entre eux sont faciles à travailler; ils ressemblent un peu à des chemins de fichiers évolués (je pense que ça se passe au niveau 30). – outis

+0

+1 Bonne réponse. Un mineur: 'a' signifie * éléments enfants nommés' a' *. –

0

Ceci est une expression XPath, pas une expression régulière. Le W3C a une référence XPath ici: http://www.w3.org/TR/xpath/. Fondamentalement, vous recherchez <un> éléments dans la classe "sponsor".

Notez que c'est une bonne chose! Les expressions régulières sont mauvaises pour l'analyse HTML.

+0

Merci beaucoup Matt. Je vais travailler à travers le tutoriel. – nicholjs