2016-09-21 4 views
1

Ich versuche, einige historische Daten von pgatour.com mit einem Ruby-Skript zu ziehen, aber ich kann nicht scheinen, es zu bekommen, irgendwelche Daten überhaupt zu ziehen.Ruby, Nokogiri, Xpath und Pgatour.com

Ich weiß, dass dies bereits besprochen wurde, aber ich habe alle Lösungen ausprobiert, die mir bisher in den Sinn gekommen sind, und jetzt streiche ich alles auf das Einfachste herunter, was ich mir vorstellen kann um herauszufinden, ob es mich oder die Website ist.

Ich bin jetzt nur versuchen, ein Element aus einem Tisch zu packen und sie dann an die Konsole aus

XPath zu erhalten, öffnete ich Chrom Entwickler-Tools auf, eine Punktzahl in der Tabelle und rechtsklicken gefunden Kopieren Xpath und dann nur das direkt im Code verwendet, aber immer noch nichts

require 'open-uri' 
require 'nokogiri' 

url = "http://www.pgatour.com/tournaments/safeway-open/past-results.html" 
html = open(url) 
doc = Nokogiri::HTML(html) 
puts doc.xpath('//*[@id="pastResultsData"]/ul/li[1]/table/tbody/tr[2]/td[5]').text 

Mache ich etwas falsch? Oder ist die Website so strukturiert, dass eine einfache Lösung wie die oben beschriebene nicht funktioniert?

+0

Regel # 1: Verlassen Sie sich nicht auf die Ausgabe des Browsers oder eines in einen Browser eingebetteten Tools, um den Selektor oder sogar das Layout des HTML zu finden. Browser versauen sich mit dem HTML. Stattdessen benutze 'wget',' curl' oder 'nokogiri' in der Befehlszeile und sieh es dir an, um genau zu sehen, was Nokogiri sieht. Die Quoten sind sehr gut, es gibt DHTML beteiligt, also was Sie wollen, ist nicht in der Seite, bis der JavaScript-Interpreter es lädt. –

Antwort

0

Es ist WIRKLICH wichtig, zuerst zu sehen, ob das HTML statisch oder dynamisch ist. Es gibt viele Möglichkeiten, dies zu tun, aber ein sehr einfacher Test ist Nokogiri in der Befehlszeile zu verwenden:

>nokogiri 'http://www.pgatour.com/tournaments/safeway-open/past-results.html' 
Your document is stored in @doc... 
Welcome to NOKOGIRI. You are using ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin15]. Have fun ;) 
>> @doc.at('#pastResultsData') 
<div id="pastResultsData" class="clearfix module-tournament-past-results"/> 

die Suche nach #pastResultsData wird jeden Tag mit dieser ID finden. Der zurückgegebene Wert zeigt an, dass der Tag <div> leer ist, was normalerweise bedeutet, dass er darauf wartet, als Container verwendet zu werden, der später von DHTML gefüllt wird.

Und an diesem Punkt kann Nokogiri Ihnen nicht helfen, müssen Sie entweder den Inhalt abrufen dann analysieren, oder verwenden Sie etwas, das JavaScript analysiert.

+0

danke, das ist sehr hilfreich –