Как мне разобрать дерево ссылок в Ruby с помощью Nokogiri? - PullRequest
0 голосов
/ 23 февраля 2012

Я пытаюсь найти определенную ссылку / текст на странице и отслеживать ее, продолжая поиск по другим ссылкам.

У меня есть ссылка типа http://newyork.craigslist.org/,, и я хочу найти конкретный тип квартиры. Учитывая, что есть категория «жилье» со многими различными подкатегориями, я хочу начать с главной страницы, перейти к первой категории жилья и выполнить поиск по всем ссылкам для любого текста, который я ищу.

Я использую Nokogiri и буду использовать XPath для анализа всех ссылок, чтобы найти нужный текст.

Проблема в том, как я спускаюсь по дереву. Начиная с корневого URL и переходя к каждой «ветке», затем, когда я закончу синтаксический анализ этой ветви, вернитесь к корню и проверьте следующую ссылку.

Я пробовал много вариантов использования циклов, но я продолжал застрять в том, что кажется неправильным вложенным циклом.

Как мне подойти к переходу от корня к каждому и обратно к корню и к следующему? Какие структуры данных будут лучше, и как мне их структурировать?

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

Я не использую Rails, а всего лишь сценарий Ruby 1.9.2 для скелетов.

Это решение должно быть в состоянии масштабироваться вверх или вниз на большее количество уровней. Если я хочу, чтобы скрипт потом проверял другие города рядом с Нью-Йорком, я не хочу каждый раз вводить новый город. Так что это был бы пример синтаксического анализа «вверх» дерева (еще один уровень выше текущего корня). Если бы я хотел изучить каждую возвращаемую ссылку и выполнить поиск по тексту на этой странице, я бы хотел, чтобы скрипт мог это делать. Так, например, после поиска в нью-йоркских списках квартиры, а не дома, скрипт возвращает несколько ссылок. Затем я хотел бы, чтобы сценарий детализировал каждую из этих квартир и просто нашел те, которые являются «2 спальнями». Так что это будет примером бурения «вниз» большего количества уровней.

...