Ich habe ein HTML-Dokument dieses Formats:Rubin regulärer Ausdruck Hilfe Spiel mit Stücken von html doc zu extrahieren
<tr><td colspan="4"><span class="fullName">Bill Gussio</span></td></tr>
<tr>
<td class="sectionHeader">Contact</td>
<td class="sectionHeader">Phone</td>
<td class="sectionHeader">Home</td>
<td class="sectionHeader">Work</td>
</tr>
<tr valign="top">
<td class="sectionContent"><span>Screen Name:</span> <span>bhjiggy</span><br><span>Email 1:</span> <span>[email protected]</span></td>
<td class="sectionContent"><span>Mobile: </span><span>2404173223</span></td>
<td class="sectionContent"><span>NY</span><br><span>New York</span><br><span>78642</span></td>
<td class="sectionContent"><span>MD</span><br><span>Owings Mills</span><br><span>21093</span></td>
</tr>
<tr><td colspan="4"><hr class="contactSeparator"></td></tr>
<tr><td colspan="4"><span class="fullName">Eddie Osefo</span></td></tr>
<tr>
<td class="sectionHeader">Contact</td>
<td class="sectionHeader">Phone</td>
<td class="sectionHeader">Home</td>
<td class="sectionHeader">Work</td>
</tr>
<tr valign="top">
<td class="sectionContent"><span>Screen Name:</span> <span>eddieOS</span><br><span>Email 1:</span> <span>[email protected]</span></td>
<td class="sectionContent"></td>
<td class="sectionContent"><span></span></td>
<td class="sectionContent"><span></span></td>
</tr>
<tr><td colspan="4"><hr class="contactSeparator"></td></tr>
So ist es abwechselt - Batzen Kontaktdaten und dann ein „Kontakt Trennzeichen“. Ich möchte die Kontaktinformationen erfassen, also ist mein erstes Hindernis, die Brocken zwischen dem Kontaktseparator zu greifen. Den regulären Ausdruck habe ich bereits mit Rubulam gefunden. Es ist:
Sie können auf Rubular überprüfen, um zu überprüfen, dass dies Chunks isoliert.
Allerdings ist mein großes Problem, dass ich Probleme mit dem Ruby-Code habe. Ich benutze die eingebaute Match-Funktion und mache Drucke, aber bekomme nicht die Ergebnisse, die ich erwarte. Hier ist der Code:
page = agent.get uri.to_s
chunks = page.body.match(/<tr><td colspan="4"><span class="fullName">((.|\s)*?)<hr class="contactSeparator">/).captures
chunks.each do |chunk|
puts "new chunk: " + chunk.inspect
end
Beachten Sie, dass page.body ist nur der Körper des HTML-Dokuments von Mechanize ergriffen. Das HTML-Dokument ist viel größer, hat aber dieses Format. So ist die unerwartete Ausgabe unter:
new chunk: "Bill Gussio</span></td></tr>\r\n\t<tr>\r\n\t\t<td class=\"sectionHeader\">Contact</td>\r\n\t\t<td class=\"sectionHeader\">Phone</td>\r\n\t\t<td class=\"sectionHeader\">Home</td>\r\n\t\t<td class=\"sectionHeader\">Work</td>\r\n\t</tr>\r\n\t<tr valign=\"top\">\r\n\t\t<td class=\"sectionContent\"><span>Screen Name:</span> <span>bhjiggy</span><br><span>Email 1:</span> <span>[email protected]</span></td>\r\n\t\t<td class=\"sectionContent\"><span>Mobile: </span><span>2404173223</span></td>\r\n\t\t<td class=\"sectionContent\"><span>NY</span><br><span>New York</span><br><span>78642</span></td>\r\n\t\t<td class=\"sectionContent\"><span>MD</span><br><span>Owings Mills</span><br><span>21093</span></td>\r\n\t</tr>\r\n\t\r\n\t<tr><td colspan=\"4\">"
new chunk: ">"
Es gibt 2 Überraschungen für mich:
1) Es gibt keine 2 Ursachen, die die Stücke von Kontaktinformationen enthalten, obwohl auf Rubular ich vergewissert haben, dass Diese Stücke sollten extrahiert werden.
2) Alle \ r \ n \ t (Zeilenvorschübe, Registerkarten usw.) werden in den Übereinstimmungen angezeigt.
Kann jemand das Problem hier sehen?
Alternativ, wenn jemand von einem guten kostenlosen AOL Kontakte Importeur weiß, wäre das toll. Ich habe Blackbook benutzt, aber es scheitert immer noch an AOL und ich versuche es zu beheben. Leider hat AOL noch keine Kontakt-API.
Vielen Dank!
Insbesondere extrahiere ich aus HTML. Ich habe mit XPATH herumgespielt, aber aufgrund der genauen Daten, die ich herausholen möchte, scheint es wirklich sehr schwierig zu sein, das zu bekommen, was ich will. Es scheint, dass XPATH gut ist, um alle Daten zwischen 2 Knoten zu bekommen, das ist nicht was ich will. Auch XPATH-Dokumente für Ruby sind schlecht! – Tony