extrait de chaîne unique à partir de HTML à l'aide de Ruby/Mécaniser (et Nokogiri)
Je suis de l'extraction des données à partir d'un forum. Mon script basé sur fonctionne bien. Maintenant, j'ai besoin d'extraire la date et de l'heure (21 Déc 2009, 20:39) de même post. Je ne peux pas le faire fonctionner. J'ai utilisé FireXPath pour déterminer le xpath.
Exemple de code:
require 'rubygems'
require 'mechanize'
post_agent = WWW::Mechanize.new
post_page = post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')
puts post_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div[2]/text()').to_s.strip
puts post_page.parser.at_xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div[2]/text()').to_s.strip
puts post_page.parser.xpath('//[@id="post1960370"]/tbody/tr[1]/td/div[2]/text()')
toutes mes tentatives se soldent avec une chaîne vide ou un message d'erreur.
Je ne trouve aucune documentation sur l'utilisation de Nokogiri au sein de Mécaniser. Le Mécaniser la documentation dit au bas de la page:
Après que vous avez utilisé Mécaniser pour naviguer jusqu'à la page que vous avez besoin de gratter, puis gratter à l'aide Nokogiri méthodes.
Mais quelles méthodes? Où puis-je lire à leur sujet avec des échantillons et explique la syntaxe? Je n'ai rien trouvé sur Nokogiri du site.
OriginalL'auteur Radek | 2010-01-22
Vous devez vous connecter pour publier un commentaire.
Radek. Je vais vous montrer comment pêcher.
Lorsque vous appelez
Mechanize::Page::parser
, c'est de vous donner la Nokogiri document. Donc votre "xpath
" et "at_xpath
" les appels sont en invoquant Nokogiri. Le problème est dans votre xpath. En général, commencer avec le plus général xpath vous pouvez commencer à travailler, et puis le réduire. Ainsi, par exemple, au lieu de cela:ceci pour commencer:
Cela devient l'une quelconque des tables, n'importe où, et ensuite de les imprimer au format html. Examiner le code HTML, pour voir ce que les tables il a fait revenir. Il a probablement attrapé plusieurs lorsque vous voulez seulement un, donc vous aurez besoin de la raconter comment choisir la table que vous voulez. Si, par exemple, vous remarquez que le tableau que vous voulez a la classe CSS "
userdata
", alors essayez ceci:Tout moment vous n'obtenez pas un tableau, vous goofed le xpath, afin de le corriger avant de commencer. Une fois que vous obtenez le tableau que vous voulez, puis essayer d'obtenir les lignes:
Si cela a fonctionné, puis décoller la "
to_html
" et vous avez maintenant un tableau de Nokogiri nœuds, chacun d'une ligne de tableau.Et c'est la façon dont vous le faites.
Conrad: Salut Wayne,merci pour le tutoriel de nice.Je vais essayer ce que tu dis mais je pense que je ne veux que la première occurrence de l'élément, il serait facile et rapide à utiliser absolue xpath. Et qu'il me donnerait le premier élément du tableau.
Si vous suivez toutes ces étapes, même si vous voulez obtenir le numéro de combien de fois cette question a été consulté?
Oui, j'ai toujours comprendre mon xpath de manière itérative. Quelqu'un qui est bon à xpath peut-être en mesure de l'obtenir dès la première fois. Que quelqu'un n'est pas moi. Ce n'est pas l'expression xpath qui décide si vous obtenez une chose ou à plusieurs. C'est que vous l'appeliez "xpath" ou "at_xpath". Si vous appelez "xpath", vous obtiendrez toujours une chose; si plusieurs éléments concordants, vous n'obtiendrez que la première. Si vous appelez "at_xpath", vous obtiendrez toujours un tableau, même si vous appariés juste une chose.
wow,c'est quelque chose que je cherchais. la différence entre les "xpath" et "at_xpath'.Super! je vous remercie pour cela.Comment avez-vous appris cela?
OriginalL'auteur Wayne Conrad
Je pense que vous avez copié à partir de Firebug, firebug vous donne un supplément tbody, ce qui pourrait ne pas être là, dans l'actuel code... donc, ma suggestion est de supprimer l'tbody et essayez de nouveau.
si cela ne fonctionne toujours pas ... alors suivez Wayne c'est le processus qui est le meilleur!
<tbody>
tag est un bon exemple. J'utilise le navigateur de vue de source "c'est un peu comme ce" point de vue, mais de récupérer le code HTML réel directement à partir de l'hôte et de le regarder dans un éditeur quand je suis en train d'analyser si les choses semblent dénués de sens. À l'aide de la CISR ouverts et piquer à l'analyse doc est bien assez souvent, mais il y a des fois il faut avoir l'éditeur est ouvert.+1 @l'Homme de fer-blanc : Très vrai!
OriginalL'auteur RubyDubee