Как я могу эффективно извлекать HTML-контент с помощью Perl?
-
05-07-2019 - |
Вопрос
Я пишу поисковый робот на Perl, который должен извлекать содержимое веб-страниц, находящихся на одном сервере.В настоящее время я использую HTML::Извлечь модуль для выполнения этой работы, но я обнаружил, что модуль немного медленный, поэтому я заглянул в его исходный код и обнаружил, что он не использует кэш подключений для LWP:: Агент пользователя.
Мое последнее средство - схватить HTML::Extract
это исходный код и измените его, чтобы использовать кэш, но я действительно хочу избежать этого, если смогу.Кто-нибудь знает какой-нибудь другой модуль, который может выполнять ту же работу лучше?По сути, мне просто нужно захватить весь текст в <body>
элемент с удаленными HTML-тегами.
Решение
Я использую Запрос для очистки моей паутины.Но я также слышал хорошие вещи о Полотно::Скребок.
Оба эти вместе с другими модулями появились в ответах на SO на вопросы, похожие на ваши:
- как я могу выполнить очистку экрана с помощью perl
- как я могу извлечь xml веб-сайта и сохранить в файле, используя perls lwp
- как мне извлечь html-заголовок с помощью perl
- можете ли вы привести пример синтаксического анализа html с помощью вашего любимого анализатора
- как мне извлечь содержимое из html-файла с помощью perl
Другие советы
HTML::Extract
выглядят очень простыми и неинтересными. Если упомянутые draegfun модули вас не интересуют, вы могли бы делать все, что LWP::UserAgent
делает с помощью HTML::TreeBuilder
и <=>, самостоятельно, без особого кода, и тогда вы могли бы свободно работать в режиме кэширования. ваши собственные условия.
Я использую Web :: Scraper для своих нужд. На самом деле это очень удобно для извлечения данных, и, поскольку вы можете вызывать ->scrape($html, $originating_uri)
, очень легко кешировать и нужный вам результат.
Вам нужно сделать это в режиме реального времени? Как неэффективность влияет на вас? Выполняете ли вы задачу поочередно, чтобы вам пришлось извлечь одну страницу, прежде чем перейти к следующей? Почему вы хотите избежать кэша?
Может ли ваш сканер загрузить страницы и передать их чему-то другому? Возможно, ваш сканер может работать параллельно или каким-либо другим образом.