Pergunta

É claro que uma página HTML pode ser analisada usando qualquer número de analisadores de python, mas estou surpreso que não parece ser qualquer script de análise públicos para extrair conteúdo significativo (excluindo barras laterais, navegação, etc.) de um dada doc HTML.

Eu estou supondo que é algo como a coleta de DIV e P elementos e, em seguida, verificá-los para uma quantidade mínima de conteúdo de texto, mas tenho certeza de uma implementação sólida incluiria muitas coisas que eu não tenha pensado.

Foi útil?

Solução

Tente o bonito Soup para Python. Ele tem métodos muito simples para extrair informações de um arquivo HTML.

Tentando extrair genericamente dados de páginas web exigiria pessoas para escrever suas páginas de forma semelhante ... mas há um número quase infinito de maneiras de transmitir uma página que parece deixar idêntica sozinho todos os conbinations você pode ter para transmitir a mesma informação.

Houve um determinado tipo de informações que você estava tentando extrair ou algum outro objetivo final?

Você poderia tentar extrair qualquer conteúdo no 'div' e marcadores 'p' e comparar os tamanhos relativos de todas as informações na página. O problema, então, é que as pessoas provavelmente informação grupo em coleções de 'div de e' p de (ou pelo menos que fazer se eles estão escrevendo html bem formado!).

Talvez se você formou uma árvore da forma como a informação está relacionada (nós seria o 'p' ou 'div ou qualquer coisa e cada nó conteria o texto associado) você poderia fazer algum tipo de análise para identificar o menor' p 'ou 'div' que encompases o que parece ser a maioria da informação ..?

[EDIT] Talvez se você pode obtê-lo na estrutura de árvore sugeri, você poderia, então, usar um sistema de pontos semelhante ao assassino spam. Definir algumas regras que tentam classificar a informação. Alguns exemplos:

+1 points for every 100 words
+1 points for every child element that has > 100 words
-1 points if the section name contains the word 'nav'
-2 points if the section name contains the word 'advert'

Se você tem um monte de regras baixa pontuação que somam quando você encontrar mais relevent procurando seções, eu acho que poderia evoluir para uma técnica bastante poderosa e robusta.

[EDIT2] Olhando para a legibilidade, parece estar fazendo muito bonito exatamente o que eu apenas sugeriu! Talvez ele poderia ser melhorado para tentar entender mesas melhor?

Outras dicas

Tenha um olhar em templatemaker: http://www.holovaty.com/writing/templatemaker/

É escrito por um dos fundadores do Django. Basicamente você alimentá-lo alguns arquivos exemplo html e vai gerar um "modelo" que você pode usar para extrair apenas os bits que são diferentes (que é geralmente o conteúdo significativo).

Aqui está um exemplo do google página de código :


# Import the Template class.
>>> from templatemaker import Template

# Create a Template instance.
>>> t = Template()

# Learn a Sample String.
>>> t.learn('<b>this and that</b>')

# Output the template so far, using the "!" character to mark holes.
# We've only learned a single string, so the template has no holes.
>>> t.as_text('!')
'<b>this and that</b>'

# Learn another string. The True return value means the template gained
# at least one hole.
>>> t.learn('<b>alex and sue</b>')
True

# Sure enough, the template now has some holes.
>>> t.as_text('!')
'<b>! and !</b>'

Você pode usar o boilerpipe aplicação Web para buscar e teor de extrato on the fly.

(Isto não é específico para Python, como você só precisa emitir um pedido HTTP GET para uma página no Google AppEngine).

Cheers,

Christian

O que é significativo e que não é, isso depende da semântica da página. Se a semântica é ruim, seu código não vai "adivinhar" o que é significativo. Eu uso a legibilidade, que é ligada no comentário, e eu ver que em muitas páginas tento lê-lo não fornece qualquer resultado, não falando de um decente.

se alguém coloca o conteúdo em uma tabela, você está condenado. Tente legibilidade em um fórum phpbb você verá o que quero dizer.

Se você quiser fazê-lo, vá com um regexp na <p></p>, ou analisar o DOM.

Goose é apenas a biblioteca para esta tarefa. Para citar sua README:

Goose vai tentar extrair as seguintes informações:

  • Texto principal de um artigo
  • A imagem principal do artigo
  • Qualquer filmes Youtube / Vimeo incorporados no artigo
  • Meta Descrição
  • Meta Tag
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top