Pergunta

Como faço para reparar o HTML malformado usando C#? Uma ótima resposta seria uma amostra de pacote de agilidade HTML!


Estou raspando um site (para uso legítimo). O HTML do site está OK, mas há alguns problemas irritantes.

Uma maneira que eu poderia ir seria através de expressões regulares. Usei a Web Expression para analisar os problemas e as expressões regulares necessárias para corrigi -los. Então, uma maneira seria usar uma ferramenta como Regexbuddy Para gerar código C# para essas expressões regulares.

No entanto, a ferramenta recomendada para processar html malformada em C# é o HTML Agility Pack (HAP). Além disso, analisei apenas algumas páginas e receio que as páginas futuras contenham padrões que ainda não resolvi, e eu odiaria entrar no "Encontrar os erros nas próximas páginas e corrigi -las" manutenção " o negócio. Portanto, se o HAP já tiver uma solução sólida e sempre trabalhadora, isso seria ótimo. O problema é que, exceto por algumas menções aqui, não consegui encontrar nenhuma documentação de como usar para esta ferramenta, exceto o arquivo de ajuda da API objeto por objeto.

Então - antes de gastar $ e aprender tempo no regexbuddy (sem versão de avaliação gratuita) ou quebrar meus dentes na documentação da API da HAP - existe uma maneira fácil de fazer isso? Uma amostra HAP ajudaria ... :-)

Foi útil?

Solução 2

O que eu tirei das respostas aqui: 1) Se você está raspando um site que não controla, sempre inserirá um modo de manutenção em que precisar . 2) Se você está limitado a este site conhecido, por que não escrever seu raspador para ajustar os problemas

Portanto, se eu tiver que entrar no modo de manutenção, deve ser o mais fácil possível. Portanto, meu processo é o seguinte:

  1. eu uso Webius Swexplorerautomation Para detectar cenas em páginas da web. A idéia é que uma cena seja uma coleção de condições que você define para o IE. Quando uma página da Web é carregada, ou seja, tenta ver qual conjunto de condições é atendido (por exemplo, o título da página é "Login da conta", a página contém uma caixa de texto "Login" A "Password" da caixa de texto). Se um conjunto de condições correspondentes a uma cena for detectado, ou seja, relata que a cena foi detectada. Este modelo fornece uma camada de abstração - algumas alterações na página da web podem se traduzir em alterações no arquivo de cena, salvando o código de ter que mudar. Além disso, isso me protege do modelo orientado para eventos do IE: eu chamo de "cena. Estou avaliando este produto, mas ainda não tenho certeza se vou usá -lo, principalmente porque a documentação é terrível. Outra alternativa é Watin, e mais uma razão pela qual eu ainda não comprei Swea é Este artigo acusando seu autor de Spams contra Watin.
  2. Depois que a página da web for adquirida, eu uso a Web Expression para executar verificações de compatibilidade e identificar erros.
  3. eu uso Regexmagic para remover e corrigir erros. Eu realmente amo essa ferramenta. Claro, às vezes deixa você com raiva, porque não permite que você faça coisas que devem ser muito fáceis, mas é uma ferramenta doce e doce, e a documentação é incrível.
  4. Finalmente, depois que todos os erros que conheço foram corrigidos, eu uso o pacote de agilidade HTML para converter em xhtml - atravesse o TS e pontilhe o IS, por assim dizer: todas as minúsculas, cotações entre atributos e assim por diante.

Espero que isto ajude!

Avi

Outras dicas

Você pode me dizer que tipo de problemas irritantes você está tendo?
Mas você não precisa usar o Regex para limpar o HTML, o HAP permitirá que você acesse os elementos de um HTML malformado usando consultas XPath.
E basicamente você precisa aprender o XPath para saber como obter os elementos HTML que deseja.
Realmente depende do tipo de HTML que você está analisando usando o HAP.
Mas existem várias maneiras de obter os elementos.
Como por id ou classe ou até você pode obter o elemento que segue outro elemento que contém um determinado texto como "Nome:" por exemplo.
você pode ir para W3 Schools XPath Tutorial Para um bom tutorial XPath

Regex não pode ser usado para limpeza em HTML. Faz http://tidy.sourceforge.net/ ajuda?

Se você estiver raspando um site que não controla, sempre inserirá um modo de manutenção em que precisará corrigir o raspador toda vez que o layout da página que você está eliminando. Não importa se você está usando o regexu003Ctd color="red"> d+u003C/td> Para obter o grande número vermelho de uma página ou se você estiver usando um analisador DOM para obter a 3ª célula na segunda linha na tabela com números de identificação para obter o mesmo. O regex quebra se o webmaster substituir o atributo de cor por um atributo de classe. O DOM Parser quebra se o webmaster adicionar outra linha à parte superior da tabela.

Se você estiver raspando partes maiores de uma página da web e deseja incorporá -las em sua própria página da web, pode ser mais fácil superar o seu desejo de conformidade com os padrões da Web e apenas deixe o navegador descobrir como exibir as coisas.

Como você está usando o HTML Agility Pack e saiba dos problemas que ocorrem, se você estiver limitado a este site conhecido, por que não escrever seu raspador para ajustar os problemas quando carregar o HTMLDocument.

IE: Se você sabe que o elemento sempre aparece depois do, insira o elemento na primeira posição do filho da tag .....

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