Como posso extrair o conteúdo HTML de forma eficiente com Perl?
-
05-07-2019 - |
Pergunta
Eu estou escrevendo um rastreador em Perl, que tem a conteúdos de extrato de páginas da web que reside no mesmo servidor. Atualmente, estou usando o módulo HTML :: Extract para fazer o trabalho, mas eu achei o módulo um pouco lento, então eu olhei para seu código fonte e descobri que não usa qualquer cache de conexão para LWP :: UserAgent .
Meu último recurso é o código-fonte da garra do HTML::Extract
e modificá-lo para usar um cache, mas eu realmente quero evitar que se eu puder. Alguém sabe de qualquer outro módulo que pode realizar o mesmo trabalho melhor? Basicamente, eu só preciso pegar todo o texto no elemento <body>
com as tags HTML removidas.
Solução
Eu uso pQuery para o meu web scraping. Mas eu também ouvi coisas boas sobre Web :: Scraper .
Ambos, juntamente com outros módulos têm aparecido em respostas sobre SO para perguntas semelhantes aos seus:
Outras dicas
características do HTML::Extract
olhar muito básico e desinteressante. Se os módulos que draegfun mencionado não lhe interessam, você pode fazer tudo o que HTML::Extract
faz usando LWP::UserAgent
e HTML::TreeBuilder
mesmo, sem exigir muito código em tudo, e então você estaria livre para trabalhar em cache em seus próprios termos.
Eu tenho usado Web :: Scraper para minhas necessidades raspagem. É realmente muito bonito para a extração de dados e porque você pode chamar ->scrape($html, $originating_uri)
então é muito fácil de armazenar em cache o resultado que você precisa também.
Você precisa fazer isso em tempo real? Como é que a ineficiência afeta você? Você está fazendo a tarefa em série de modo que você tem que extrair uma página antes de passar para a próxima? Por que você quer evitar um cache?
Pode o rastreador de download das páginas e passá-las para outra coisa? Talvez o rastreador pode até mesmo correr em paralelo, ou de alguma forma distribuída.