У меня есть HTML-документ этого формата:
<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>wmgussio@erols.com</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>osefo@wam.umd.edu</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>
Таким образом, он чередуется - порция контактной информации и затем «разделитель контактов». Я хочу получить контактную информацию, поэтому моим первым препятствием является захват фрагментов между контактными разделителями. Я уже разобрался с регулярным выражением, используя rubular. Это:
/<tr><td colspan="4"><span class="fullName">((.|\s)*?)<hr class="contactSeparator">/
Вы можете проверить рубуляр, чтобы убедиться, что это изолирует куски.
Однако моя большая проблема в том, что у меня проблемы с кодом ruby. Я использую встроенную функцию сопоставления и делаю распечатки, но не получаю ожидаемых результатов. Вот код:
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
Обратите внимание, что page.body - это просто тело HTML-документа, захваченного Mechanize. HTML-документ намного больше, но имеет этот формат. Итак, неожиданный вывод ниже:
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>wmgussio@erols.com</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: ">"
Здесь есть 2 сюрприза для меня:
1) Не существует двух совпадений, содержащих куски контактной информации, хотя в рубрикаторе я убедился, что эти куски следует извлечь.
2) Все \ r \ n \ t (переводы строк, табуляции и т. Д.) Отображаются в матчах.
Кто-нибудь может увидеть проблему здесь?
В качестве альтернативы, если кто-нибудь знает о хорошем импортере бесплатных контактов AOL, это было бы здорово. Я пользуюсь черной книгой, но она не работает для меня на AOL, и я пытаюсь это исправить. К сожалению, у AOL еще нет API контактов.
Спасибо!