Nano Hash - криптовалюты, майнинг, программирование

использование scrapy для анализа произвольного количества строк (пар ключ: значение) в таблице html

Недавно начал работать с библиотекой 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)), а также некоторая конкатенация строк завершили работу.


Ответы:


1

У тебя слишком много вопросов, имхо.

Во-первых, похоже, что ваш вопрос вовсе не о скраппинге. Речь идет об организации ваших данных и xpath.

Я думаю, что вы должны разделить свою задачу на подзадачи. Первая подзадача — фактически извлечь данные в структуру данных Python, а затем попытаться их обработать. Из вашей информации, я думаю, данные понравятся:

{
    'table_1': {
        'row_1': ['cell_1', 'cell_2'],
        'row_2': ['cell_1', 'cell_2'],
        ...
    },
    'table_2': {
        'row_1': ['cell_1', 'cell_2', 'cell_3'],
        'row_2': ['cell_1', 'cell_2', 'cell_3'],
        ...
    },
}

Это правильно?


ОБНОВЛЕНИЕ:

Трудность, с которой я столкнулся, заключалась в использовании объекта scrapy Item, поскольку для этого требуется, чтобы мой класс Item определял количество полей перед очисткой, а не для каждой таблицы. У меня есть сотни таблиц, на которых я хочу выполнить этот процесс.

Насколько я знаю, Поля элементов могут хранить любой объект Python. Класс Scrapy Item — это просто место, где вы храните Field, но scrapy не обрабатывает эти поля особым образом. Только вы берете эти Поля в конвейер и интерпретируете данные в них.

Так что выбирайте любой формат магазина, который вам подходит. Например:

class Shirt(Item):
    available_sizes = Field() # [(size1, amount1), (size2, amount2), ...] or {size1: amount1, size2: amount2, ...} if `size` is a hashable object
18.03.2012
  • Да, это правильно. Получение данных в этой форме является основным препятствием. Давайте определим подзадачу 1 как очистку произвольного количества строк в таблице и преобразование их в такой формат. Основываясь на моих знаниях о элементах очистки, кажется, что мне нужно заранее определить количество полей и их имена, когда в этом случае я хочу определить их во время очистки. 19.03.2012
  • что вы хотите, чтобы экземпляр Item содержал? 19.03.2012
  • Пары ключ:значение в каждом элементе должны выглядеть как «строка_1»: «ячейка_1», «строка_2»: «ячейка_1» и т. д. для каждой строки в таблице. Каждая строка может представлять поле. 22.03.2012
  • А как насчет cell_2, cell_3 и других? 22.03.2012
  • Спасибо за ответ. Я вижу, что у меня были проблемы с тем, чтобы все четко передать. Я отредактировал свой исходный пост, чтобы уточнить и сузить сферу вопроса. Пожалуйста, взгляните еще раз. 22.03.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..