Недавно начал работать с библиотекой scrapy. Я пытаюсь очистить веб-сайт, на котором есть несколько разных таблиц для каждого вида продукта, который они продают. В конце концов, я буду использовать данные для заполнения атрибутов объекта. На данный момент мне просто нужно извлечь его в формат JSON.
Вот пример таблицы:
<table id="table_1">
<tr id="row_1">
<td>cell_1</td>
<td>cell_2</td>
<td>cell_3</td>
</tr>
<tr id="row_2">
<td>cell_4</td>
<td>cell_5</td>
<td>cell_6</td>
</tr>
<tr id="row_n">
<td>cell_x</td>
<td>cell_y</td>
<td>cell_z</td>
</tr>
</table>
Каждая колонка представляет отдельный товар, например, маленькие, средние или большие футболки. В приведенной выше таблице будет 3 элемента, поэтому элементы будут выглядеть так:
Item 1 {
row_1:cell_1
row_2:cell_4
row_n:cell_x
}
Item 2 {
row_1:cell_2
row_2:cell_5
row_n:cell_y
}
Item 3 {
row_1:cell_3
row_2:cell_6
row_n:cell_z
}
Это хорошо структурированные таблицы без «отсутствующих» или «лишних» ячеек, хотя количество строк и столбцов произвольно.
Трудность, с которой я столкнулся, заключалась в использовании объекта scrapy Item, поскольку для этого требуется, чтобы мой класс Item определял количество полей перед очисткой, а не для каждой таблицы. У меня есть сотни таблиц, на которых я хочу выполнить этот процесс.
Спасибо, что дочитали до этого места, любая помощь приветствуется. :)
РЕШЕНИЕ: @warawuk Спасибо за помощь. Я воспользовался вашим предложением и получил тройной вложенный список. Возможно, не идеально, но достаточно просто извлечь значения, пока я продолжаю с ними работать:
{"tRows":
[[["row1"], ["cell1", "cell2"]]
[["row2"], ["cell3", "cell4"]]
[["row3"], ["cell5", "cell6"]]
[["row4"], ["cell7", "cell8"]]] x100s of tables
}
Чтобы справиться с произвольным количеством строк, я использовал регулярное выражение для извлечения идентификаторов из каждой строки и их подсчета. Простой цикл с использованием диапазона (len (rowNames)), а также некоторая конкатенация строк завершили работу.