Я использую Watir для очистки результатов поиска с веб-сайта и ввода их в файл CSV. Когда я запускаю поиск, результаты делятся на классы span. Таким образом, HTML будет выглядеть примерно так:Когда веб-соскабливание с Ватиром, как мне разобрать результаты в том же классе и ввести их в отдельные ячейки CSV?
<span class="sn_auth_name">foo</span>
<span class="sn_target_lang">English</span>
и мой код выглядит следующим образом:
sn_auth_name = row.xpath('span[@class="sn_auth_name"]/text()').text.strip
sn_target_lang = row.xpath('span[@class="sn_target_lang"]/text()').text.strip
CSV.open("file.csv", "a") do |csv|
csv << [sn_auth_name, sn_target_lang]
Вопрос заключается в том, что для некоторых из результатов поиска, есть несколько элементов, присвоенные к одному классу. То есть, иногда есть только один sn_auth_name
, а иногда их три! Прямо сейчас оба результата попадают в одну ячейку в моем CSV-файле.
Есть ли способ, с помощью которого я могу обрабатывать время от времени, получая более одного результата, присвоенного одному классу? Решение, в котором второй (или третий) результат вводится в отдельную ячейку?
Спасибо!
Кто-то запросил более подробную информацию, так что вот выход, который я обычно получаю.
<table class="restable"><tr>
<td class="res1">1/1</td>
<td class="res2">
<span class="sn_auth_name">Imām</span>,
<span class="sn_auth_firstname">Abū Bakr</span>:
<span class="sn_target_title">Al-Kalām rasmāl</span> [
<span class="sn_target_lang">Arabic</span>]/
<span class="sn_transl_name">Ḥijāzī al-Sayyid</span>,
<span class="sn_transl_firstname">Muṣṭafā</span>/
<span class="sn_pub">
<span class="place">Al-Qāhirah</span>:
<span class="publisher">Al-Majlis al-Alā lil-Thaqāfah</span> [
<span class="sn_country">Egypt</span>]</span>,
<span class="sn_year">2000</span>.
<span class="sn_pagination">588 p.</span>
<span class="sn_orig_title">Magana jarice</span> [
<span class="sn_orig_lang">Afrikaans</span>]
</td></tr>
</table>
Это не проблема для царапин, потому что для каждого фрагмента текста, который я хочу захватить, существует один тип класса. Но каждый так часто, я получаю результат, как это:
<tr>
<td class="res1">7/8</td>
<td class="res2">
<span class="sn_auth_name">Plenge</span>,
<span class="sn_auth_firstname">Vagn</span>;
<span class="sn_auth_name">Wyk</span>,
<span class="sn_auth_firstname">Chris van</span>:
<span class="sn_target_title">Opbrud</span> [
<span class="sn_target_lang">Danish</span>]/
<span class="sn_transl_name">Hansen</span>,
<span class="sn_transl_firstname">Finn Holten</span>;
<span class="sn_transl_name">Madelung</span>,
<span class="sn_transl_firstname">Marianne</span>;
<span class="sn_transl_name">Seiketso</span>,
<span class="sn_transl_firstname">Helen Gaohenngwe</span>/
<span class="sn_pub">
<span class="place">Frederiksberg</span>:
<span class="publisher">AKS</span>,
<span class="place">Frederiksberg</span>:
<span class="publisher">Hjulet</span> [
<span class="sn_country">Denmark</span>]</span>,
<span class="sn_year">2000</span>.
<span class="sn_pagination">247 p.</span> [
<span class="sn_orig_lang">Afrikaans</span>], [
<span class="sn_orig_lang">English</span>]
</td></tr>
Вот, например, есть несколько записей для sn_auth_name
. И то, что заканчивается в моем CSV-файле, - это ячейка с PlengeWyk
. Идеальным было бы создать скрипт для создания значения sn_auth_name2
и записать его в отдельной ячейке, то есть Plenge
и Wyk
.
Любые мысли?
Это поможет, если вы предоставите пример различных макетов, которые могут иметь строки, и ожидаемого результата для каждого из них. –
То есть, Джастин. Я добавил несколько примеров вывода. – NCG
В вашем примере кода, что такое 'row'? Элементы Watir не имеют метода 'xpath'.Вы используете Nokogiri для анализа HTML? –