Pergunta

Isto não é realmente uma questão de programação, mais de um um algorítmica.

O problema: encontrar a seção "conteúdo" de uma página HTML.

Por "conteúdo" Quero dizer o dom que contém o conteúdo da página, como visto por seres humanos, sem o ruído, simplesmente o "conteúdo real da página". Eu sei que o problema não está bem definida, mas vamos continuar ... Por exemplo, em sites de blog, este é normalmente é fácil, ao navegar para um posto específico que normalmente têm algumas barras de ferramentas no topo da página, talvez alguns elementos de navegação na LHS e então você tem a div que contém o conteúdo. Tentando descobrir isso a partir do HTML pode ser complicado. Felizmente, no entanto, a maioria dos blogs têm feeds RSS e na alimentação para este post específico que você gostaria de encontrar um seção (ou ) e isso é exatamente o que você quer. Então, para refinar a definição de conteúdo, esta é a coisa real na página que contém a parte interessante, a remoção de todos os anúncios, elementos de navegação etc. Assim encontrar o conteúdo de blogs é relativamente fácil, assumindo que eles têm RSS. O mesmo vale para outros sites de suporte RSS.

E sobre sites de notícias? Em muitos casos, sites de notícias têm RSS, mas nem sempre. Como se encontra o conteúdo em sites de notícias, então? Quais sites sobre mais geral? Muitas páginas da web (claro que não todos eles) têm seção de conteúdo e outras seções. Você pode pensar em um bom algoritmo para encontrar as seções que são "interessante" v / é o menos interessante? Talvez as seções que a mudança daqueles que não mudar?

espero que eu tenha sido claro ... Obrigado!

Foi útil?

Solução

Eu não fiz isso, mas esta seria a minha abordagem geral.

Como você indica, a falta de estrutura nas partes de conteúdo visíveis (ou seja, ele não tem tags como header, navigation, ads) de HTML significa que é mais difícil em casa sobre a peça chave da página. Minha abordagem seria a primeira remover elementos distintos que você decidiu definitivamente não são interessantes. Uma possível lista de exclusões poderia ser:

  • meta elementos tais como !doctype, head (tomar a title como uma peça separada de dados)
  • elementos dinâmicos como object, embed, applet, script
  • imagens (dependendo se quer manter ou não), img
  • elementos de forma, isto é form, input, textarea, label, legend, select, option

A segunda passagem poderia, então, começar a excluir comumente ocorrem div ou ul nomes id / classe, e todas as tags dentro deles, como:

  • header, footer, meta
  • nav, navigation, topnav, sidebar
  • ad, ads, adu (e outros nomes geralmente usados ??para anúncios)

Esperamos que possa remover uma quantidade significativa de decoração a partir da página. O próximo desafio é tentar identificar o conteúdo principal a partir do que sobrou, e gostaria de sugerir inicialmente assumindo que o autor do site está usando HTML semântica corretamente, e por isso é principalmente usando o h1, Tag principais h2 e a marca de parágrafo p.

Para identificar o conteúdo, gostaria de olhar para qualquer tag de cabeçalho que é seguida por uma tag (s) parágrafo. (Isto pode ser h2 para o seu conteúdo principal, o tag h1 é muitas vezes (e, possivelmente, incorretamente) usado para exibir o nome ou logotipo do site, mas isso esperamos que foram eliminados por excluindo as partes de cabeçalho da página.) Cada parágrafo subsequentes devem ser adicionado ao conteúdo atual até chegar a uma ruptura, o que poderia ser tanto o fim do div ou td elemento, ou poderia ser um elemento de cabeçalho do mesmo nível que você começou.

Como ainda pode haver vários conjuntos de conteúdo que você se reuniram na página (talvez o conteúdo principal mais a sinopse sobre o autor), você precisa testar e refinar um passo de decisão aqui que escolhe o mais provável candidato. Isso muitas vezes simplesmente ser o maior, tanto em termos de duração e número de elementos do parágrafo utilizados.

Como você reunir mais exemplos de conteúdo, você pode adicionar medidas para o seu algoritmo de suporte; isso pode ser que você notar muitos dos div id="content" páginas uso ou id="maincontent". Ele também pode ser útil para manter os itens secundários de conteúdo que detectado, de modo que se certos sites têm uma maneira curiosa de estruturação do conteúdo, em seguida, uma vez que você adicionar um apanhador em seu algoritmo pode ser re-run contra apenas isso o conteúdo do site.

Outras dicas

Um site bem estruturado terão suas áreas comuns reutilizar o mesmo código, por exemplo, navegação, cabeçalho e etc.

Quando você tem uma página de destino que você gostaria de analisar, tente navegar através de algumas outras páginas sob o mesmo domínio / subdomínio e encontrar elementos que são comuns a todas as páginas. Esses são os ruídos que você quer se livrar.

Em seguida, você pode dar uma olhada no que está restante, para ver se alguns ruídos escorregou. Quando você tiver coletado uma quantidade razoável desses dados, tentar encontrar algum padrão neles. Limite a sua lógica e repetir.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top