2016-10-12 7 views
-2

См иерархии ниже:Возникли проблемы синтаксического анализа этих данных в Watir-WebDriver

enter image description here

Все, что нужно здесь «Компания Название», «владелец компании», «владелец компании Название», «Улица Номер Улица Name "и" City, State Zipcode ".

Я пробовал b.div.span.bs, но это не сработало (bs, потому что есть несколько блоков, из которых я собираю данные). Я также подумал, что просто попробую что-то вроде b.tds.split('<br>'), а затем заменим все экземпляры тегов и как-то удаляю пустые ячейки ячеек, но я обнаружил, что каждый блок отличается, поэтому данные не выравниваются, т. Е. Название компании может быть в ячейке 1 для первого массива, но тогда, если название компании отсутствует (для второго блока), ячейка 1 будет владельцем компании, которая конфликтует ... Во всяком случае, просто пытайтесь найти умный способ получить эти данные. Спасибо.

Here - это фактический HTML; однако вы должны сначала нажать «Просмотреть все».

+1

Я думаю, что ответ будет зависеть от того, как данные могут отличаться. Можете ли вы показать, каковы различные варианты, которыми могут быть блоки? Вы упомянули, что название компании может отсутствовать, но трудно сказать, что именно это означает в плане HTML-макета. Какие другие поля могут быть необязательными? (Это также поможет, если вы можете вставить HTML в отличие от скриншота - это облегчит нам копирование и проверку решений.) –

+0

@JustinKo, позвольте мне проверить. – Forwarding

+0

Можете ли вы дать нам ссылку на одну из страниц? Это очень помогло бы нам найти решение, которое будет работать последовательно. – JeffC

ответ

1

Вы можете разделить все, что находится внутри <div>, а затем разбить его на <br>. Первая часть - название компании (если существует), а затем владелец компании последний/второй.

Остальное ... сложнее. Некоторые из них довольно страшны в этом факсе и Member, так как имеют ярлыки, так что это легко. <a> легко.

Возможно, вы можете проверить номер телефона с помощью регулярного выражения, а затем вернуться обратно оттуда. Если номер телефона до номера телефона не <a>, тогда это город, почтовый индекс и тот, который до этого является адресом. Если он существует до этого, это название владельца компании.

Все после номера телефона в ваших примерах есть ярлыки, так что это легко.

1

Я не уверен, что все ваши варианты использования, но часто для страниц, где DOM не очень полезно, я только получить текст и разобрать с Ruby:

browser.td.text.split("\n").reject(&:empty?) 
+0

Это полезно ... – Forwarding

1

Это не сразу ответить на вопрос, но он показывает, как бы я идти об этом с помощью Nokogiri, который является стандартом HTML/XML парсер для Ruby:

require 'nokogiri' 

doc = Nokogiri::HTML('<td><div></div><br>a<br>b<br>c</td>') 

doc внутреннее представление Nokogiri о документе.

Мы используем ориентиры в разметке для навигации и поиска вещей, которые мы хотим. В этом случае <div> является хорошей отправной точкой:

doc.at('div').next_sibling.next_sibling.text # => "a" 

next_sibling как мы говорим Nokogiri смотреть на следующий узел. В этом случае он проходит мимо первого <br> и смотрит на TextNode a.

Это было бы привести к неработоспособному коду, хотя, так что есть лучший путь:

doc.search('td br').to_html # => "<br><br><br>" 

Это показывает, что мы можем найти все <br> тегов внутри <td>, так что мы просто должны перебрать их и используйте их в качестве наших ориентиров:

doc.search('td br').map{ |br| br.next_sibling.text } # => ["a", "b", "c"] 
+0

Порошняя ошибка при установке: 'ERROR: при выполнении gem ... (Errno :: EPERM) Операция не разрешена -/usr/bin/nokogiri' – Forwarding

+0

Вот что я побежал:' sudo gem install nokogiri' – Forwarding

+1

Я не знаю достаточно о вашей системе, чтобы помочь на основе этого небольшого количества информации. Кроме того, это будет отдельный вопрос. Установка Nokogiri хорошо освещена на сайте. –

 Смежные вопросы

  • Нет связанных вопросов^_^