Pergunta

Estou usando o PHP para raspar um site e coletar alguns dados. Tudo é feito sem usar o regex. Estou usando o método PHP explode () para encontrar tags HTML específicas.

É possível que, se a estrutura do site mudar (CSS, HTML), os dados errados possam ser coletados pelo raspador. Então, a questão é - como sei se a estrutura HTML mudou? Como identificar isso antes de armazenar qualquer dados no meu banco de dados para evitar que os dados incorretos sejam armazenados.

Foi útil?

Solução

Eu acho que você não tem soluções limpas se estiver raspando uma página em que o conteúdo muda.

Eu desenvolvi vários raspadores de Python e sei como pode ser frustrante quando o site faz uma mudança sutil em seu layout.

Você pode experimentar uma solução a la mecanize (não conheça a contraparte do PHP) e, se tiver sorte, poderá isolar o conteúdo necessário para extrair (links?).

Outra abordagem de possibilidade seria codificar algumas restrições e verificá -las antes da loja no banco de dados.

Por exemplo, se você estiver raspando URLs, precisará verificar se o raspador analisou é formalmente um URL válido; O mesmo para o ID inteiro ou o que você deseja raspar que pode ser reconhecido como válido.

Se você estiver raspando o texto simples, será mais difícil verificar.

Outras dicas

Se você quiser saber as alterações em relação à estrutura, acho que a melhor maneira é armazenar a estrutura DOM da sua primeira página e compará -la com a nova.

Há muita maneira que você pode fazer:- Saxparser Domparser etc

Eu tenho um pequeno blog que dará algumas dicas para o que quero dizerhttp://let-them-c.blogspot.com/2009/04/xml-as-objects-in-oops.html

ou você pode usar http://en.wikipedia.org/wiki/simple_api_for_xml ou analisador de utilitário dom.

Falando da minha bunda aqui, mas é possível que você queira ver alguns métodos de PHP do modelo de objeto de documento.

http://php.net/manual/en/book.dom.php

Se meu entendimento muito, muito limitado do DOM estiver correto, uma alteração na estrutura do site HTML alteraria o modelo de objeto de documento, mas uma simples mudança de conteúdo dentro de uma estrutura fixa não. Então, se você pudesse capturar o estado de DOM e compará -lo a cada arranhão, você não poderia determinar que essa mudança foi feita?

(A propósito, a maneira como eu fiz isso quando estava tentando obter uma notificação por e -mail quando os resultados do exame de barras foram publicados em uma página específica, apenas compare o arquivo file_get_contents (). Assim que o site postou o conteúdo.)

Depende do site, mas você pode contar o número de elementos da página na página raspada como Div, Class & Style Tags e, então, comparando esses totais com os de arranhões posteriores, detectam se a estrutura da página foi alterada.

Um processo similar pode ser usado para o arquivo CSS, onde os nomes de cada classe ou ID podem ser extraídos usando regex simples, armazenados e verificados conforme necessário. Se esta lista tiver novas adições, a estrutura da página quase certamente mudou em algum lugar no site que está sendo raspado.

Primeiro, em alguns casos, você pode querer comparar hashes do original para o novo HTML. MD5 e SHA1 são dois hashes populares. Isso pode ou não ser válido em todas as circunstâncias, mas é algo que você deve estar familiarizado. Isso dirá se algo mudou - conteúdo, tags ou qualquer coisa.

Para entender se a estrutura mudou, você precisaria capturar um histograma das ocorrências de tags e compará -las. Se você se preocupa com as tags estar fora de ordem, precisará capturar uma árvore das tags e fazer uma comparação para ver se as tags ocorrem na mesma ordem. Isso será muito específico para o que você deseja alcançar.

PHP Simple HTML Dom Parser é uma ferramenta que o ajudará a analisar o HTML.

Explode() não é um analisador HTML, mas você deseja saber sobre mudanças na estrutura HTML. Isso vai ser complicado. Tente usar um analisador HTML. Nada mais será capaz de fazer isso corretamente.

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