Повторение в пауке результат из таблицы - PullRequest
0 голосов
/ 08 июня 2018

Я наблюдаю за пауком-питоном в разборке, чтобы разобрать страницу, и все работает, кроме извлечения из таблицы.Он извлекает данные из таблицы, но повторяет их несколько раз.

Итак, для таблицы:

<tbody><tr>
      <td><b>Name</b></td>
      <td><b>Role</b></td>
    </tr>
            <tr style="background-color:#C0C0C0; color:Black;">
            <td>Name 1</td>
            <td>No Party</td>
            </tr>
            <tr style="background-color:#C0C0C0; color:Black;">
            <td>Eny</td>
            <td>Party</td>
            </tr>
            <tr style="background-color:#C0C0C0; color:Black;">
            <td>Cory</td>
            <td>Party</td>
            </tr>
</tbody>

Поэтому мне нужно взять строки из таблицы, в которых есть вторая сторона, объединить их и написать в виде одной строки. Я напишу парсер следующим образом:

raw_data['names'] = process_string(", ".join(page.xpath('//tr[td="Party"]/td[1]/text()').extract()))

В результате я получил:

Эни, Кори, Энт, Кори, Эни, Кори, Эни, Кори

Таким образом, он повторил правильный результат 4 раза.В скрипте нет повторения, другое поле прекрасно работает, так что в скрипте нет ничего плохого, это просто выражение.Я пробовал другой xpath, но результат тот же.Чем отличается таблица?

1 Ответ

0 голосов
/ 08 июня 2018

Я не эксперт в XPath, поэтому вот как это можно сделать с помощью селекторов CSS:

names_list = [row.css('td:nth-child(1)::text').extract_first() 
              for row in s.css('tr') 
              if row.css('td:nth-child(2)::text').extract_first() == 'Party']
raw_data['names'] = ', '.join(names_list)
...