Im folgenden HTML-Beispiel versuche ich den $ 16,95-Text im äußeren span.price
Element zu extrahieren und den Text vom inneren span.sale
auszuschließen.Wie man den Text eines Elements in Capybara findet, während ich den inneren Elementtext ignoriere
<div class="price">
<span class="sale">
<span class="sale-text">"Low price!"</span>
"$16.95"
</span>
</div>
Wenn ich Nokogiri verwenden würde, wäre dies nicht zu schwierig.
price = doc.css('sale')
price.search('.sale-text').remove
price.text
Allerdings navigiert Capybara eher als Knoten entfernt. Ich wusste, dass etwas wie price.text
Text von allen Unterelementen greifen würde, also versuchte ich, xpath zu verwenden, um spezifischer zu sein. p.find(:xpath, "//span[@class='sale']", :match => :first).text
. Dies greift jedoch auch auf das innere Element zu.
Schließlich habe ich versucht, durch alle Spannen zu durchlaufen, um zu sehen, ob ich die Ergebnisse trennen könnte, aber ich bekomme einen mehrdeutigen Fehler.
Ich verwende Capybara/Selen, da dies für ein Web-Scrapping-Projekt mit Authentifizierung Komplikationen ist.
Schätzen Sie die Antwort, aber am Ende kratzte ich nur die HTML mit Capybara und Verarbeitung mit Nokogiri. Ich musste durch viele Ergebnisseiten navigieren, und die Kombination von Parsing mit langsamen Capybara-Knoten und seltsamen JS-Effekten ließ das Skript normalerweise einen StaleElementReferenceError auslösen. – dylankb