Как эффективно извлечь HTML-контент с помощью Perl? - PullRequest
2 голосов
/ 11 сентября 2009

Я пишу сканер на Perl, который должен извлекать содержимое веб-страниц, находящихся на одном сервере. В настоящее время я использую модуль HTML :: Extract , чтобы выполнить эту работу, но я обнаружил, что модуль немного медленный, поэтому я посмотрел в его исходный код и обнаружил, что он не использует кеш подключения для LWP :: UserAgent .

Мое последнее средство - захватить исходный код HTML::Extract и изменить его для использования кэша, но я действительно хочу этого избежать, если смогу. Кто-нибудь знает какой-либо другой модуль, который может выполнять ту же работу лучше? Мне просто нужно собрать весь текст в элементе <body> со снятыми тегами HTML.

Ответы [ 4 ]

4 голосов
/ 11 сентября 2009
1 голос
/ 12 сентября 2009

HTML::Extract функции выглядят очень базовыми и неинтересными. Если упомянутые draegfun модули вас не интересуют, вы можете делать все, что HTML::Extract делает, используя LWP::UserAgent и HTML::TreeBuilder самостоятельно, совсем не требуя большого количества кода, и тогда вы сможете свободно работать с кэшированием. ваши собственные условия.

0 голосов
/ 16 сентября 2009

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

Может ли ваш сканер загрузить страницы и передать их чему-то другому? Возможно, ваш сканер может работать даже параллельно или распределенным образом.

0 голосов
/ 12 сентября 2009

Я использовал Web :: Scraper для своих нужд. Это действительно очень удобно для извлечения данных, и, поскольку вы можете вызвать ->scrape($html, $originating_uri), тогда очень просто кешировать нужный вам результат.

...