Я соскабливаю ~ 10 сайтов для получения той же информации и в настоящее время имею скрипт для каждого из них, который работает сам по себе. Эти сценарии имеют одну и ту же базу (перебирают доступные страницы, очищают информацию, сохраняют ее), но разные атрибуты.Рефакторинг кода Ruby scrape (с различными атрибутами)
В качестве примера, это примеры того, как я извлечения author
элемент из двух страниц:
page.at('b[itemprop="author"]').children.text.strip
page.at('.author-username').text.strip
Моя цель состоит в том, чтобы реорганизовать это так главная логика обрабатывается в классе, но я У меня возникли проблемы с выяснением того, как пройти в вышеуказанных экстракторах в зависимости от источника. Я знаю, что могу pass CSS selectors as arguments, но, как вы можете видеть, для каждой извлечения есть дополнительная логика.
Хотя я мог бы иметь отдельный метод для обработки этого (как указано в предыдущей ссылке), это быстро выйдет из-под контроля с ~ 10 источниками.
Каков наилучший способ реорганизации этого кода?
Спасибо за ваш ответ Скотт, это полезно. Не могли бы вы рассказать, как я буду делать вызовы методов, которые предоставляются через эти строки ('['children', 'text', 'strip']')? В качестве примера, как я могу запустить 'attribute_1.children.text.strip'? – Manonthemoon
А я понял, я использую 'page.send ()' для вызова каждого метода. –
Manonthemoon
Справа. И действительно, эти списки методов должны были быть символами, а не строками. Либо должны работать одинаково, но символы более эффективны с точки зрения памяти. –