Ruby Mechanize Elemente mit dem angegebenen text
Ich versuche zu analysieren, die Inhalte einer website mit mechanize und ich bin stecken geblieben an einer Stelle. Die Inhalte, die ich will, um zu analysieren, ist in einen li
tag, und nicht immer in der gleichen Reihenfolge.
Können angenommen, wir haben folgenden, wo die Reihenfolge der li
- tags ist nicht immer das gleiche und einige Male, einige möglicherweise gar nicht da.
<div class="details">
<ul>
<li><span>title 1</span> ": here are the details"</li>
<li><span>title 2</span> ": here are the details"</li>
<li><span>title 3</span> ": here are the details"</li>
<li><span>title 4</span> ": here are the details"</li>
</ul>
</div>
Was ich will, ist, um nur die li
details, in denen die span
text ist zum Beispiel title 3
. Was ich gemacht habe, ist das folgende, das gibt mir die Daten aus der ersten li
:
puts page.at('.details').at('span', :text => "title 3").at("+ *").text
Gibt es eine Möglichkeit, das zu tun, was ich will, mit mechanize oder sollte ich die auch anderweitig verwenden?
- Wenn Sie möchten, können Sie dies tun, mit nokogiri.. Wenn du willst kann ich versuchen für dich..
- Mechanize da ich gelesen und gesehen habe, ist das arbeiten mit nokogiri. Die
page
dass Sie sehen können, werden behandelt, als eine nokogiri-Objekt, in dem Sie suchen können. Statt zum Beispielcss_at
Sie schreiben nurat
- Hmm ich habe gerade festgestellt, dass.. Was ist das problem mit deinem code? Wenn ich weiß, dass,ich kann mir wohl denken, mein ein.. 🙂
- Wie gesagt, das problem ist, dass es mir die ersten
li
in der Erwägung, dass, ich will die eine, die als<span>
texttitle 3
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erklärung:
Mit bei können Sie mithilfe von css-oder xpath-Selektor. Um zu machen, mehr lesbar und ähnelt Ihr Ansatz, diese Antwort mithilfe von css-Selektor, aber das problem ist, dass CSS nicht durchführen der Auswahl basierend auf dem text. Dank Nokogiri, die Sie verwenden können, Verwendung der JQuery-selector, also die enthält Methoden ermöglichen.
Die Auswahl verwenden Sie das span-element, also, wenn Sie wollen, um die li-element Eltern, können Sie Eltern Methoden und erhalten dann den text leicht.
next
stattparent
um die details zu erhalten Teil. Danke!Da bist du auf der Suche, dies zu tun mit Mechanize (und ich sehe, wie einer der Kommentare, empfehlen, mit Nokogiri statt), sollten Sie sich bewusst sein, dass Mechanize ist gebaut auf Nokogiri, also bist du tatsächlich in der Lage zu verwenden/alle Nokogiri Funktionalität durch Mechanisieren.
Zeigen Sie in der Dokumentation zu http://mechanize.rubyforge.org/Mechanize.html
So erreichen Sie dies mit Hilfe von XPath und die mechanize-Seite.such-Methode.
Dieser sollte in der Lage sein, um Ihnen den text für das li-element, das Sie suchen. (unverified mit .text, aber der XPath funktioniert)
Testen kann man die XPath-hier: http://www.xpathtester.com/saved/51c5142c-dbef-4206-8fbc-1ba567373fb2
Einen Reiniger
css
Ansatz:Als pro den Kommentar, ich denke du suchst so etwas wie unten.