Nettoyer le HTML en utilisant C #

html html-agility-pack malformed screen-scraping

Question

Comment réparer le code HTML mal formé à l'aide de C #? Une bonne réponse serait un exemple de HTML Agility Pack!


Je gratte un site (pour un usage légitime). Le code HTML du site est correct mais il y a quelques problèmes gênants.

Une façon de faire serait de passer par des expressions régulières. J'ai utilisé Expression Web pour analyser les problèmes et les expressions régulières nécessaires pour les corriger. Ainsi, un moyen serait d'utiliser un outil tel que RegexBuddy pour générer du code C # pour ces expressions régulières.

Cependant, l'outil recommandé pour le traitement du code HTML mal formé en C # est le HTML Agility Pack (HAP). De plus, j’ai analysé seulement une poignée de pages et je crains que les pages futures ne contiennent des motifs que je n’ai pas encore résolus, et je n’aimerais pas entrer dans la zone "Trouver les erreurs dans les pages suivantes et les corriger" Entreprise. Donc, si HAP a déjà une solution solide et toujours efficace, ce serait formidable. Le problème est que, à l'exception de quelques mentions chez SO, je n'ai trouvé aucune documentation d'utilisation de cet outil, à l'exception du fichier d'aide de l'API, objet par objet.

Donc, avant de passer du temps à apprendre RegexBuddy (pas de version d'évaluation gratuite), ou de me casser les dents sur la documentation de l'API HAP, existe-t-il un moyen simple de le faire? Un échantillon HAP aiderait ... :-)

Réponse acceptée

Ce que j’ai retenu des réponses fournies ici: 1) Si vous supprimez un site Web que vous ne contrôlez pas, vous entrerez toujours en mode de maintenance dans lequel vous devrez réparer votre scraper chaque fois que la mise en page de la page que vous modifiez est modifiée . 2) Si vous êtes limité à ce site connu, pourquoi ne pas écrire votre grattoir pour régler les problèmes

Donc, si je dois passer en mode maintenance, cela devrait être aussi simple que possible. Par conséquent, mon processus est le suivant:

  1. J'utilise SWExplorerAutomation de Webius pour détecter des scènes dans des pages Web. L'idée est qu'une scène est un ensemble de conditions que vous définissez pour IE. Lorsqu'une page Web est chargée, Internet Explorer essaie de déterminer les conditions à remplir (par exemple, le titre de la page est "Connexion au compte", la page contient une zone de texte "Connexion" et une zone de texte "Mot de passe"). Si un ensemble de conditions correspondant à une scène est détecté, IE signale que la scène a été détectée. Ce modèle fournit une couche d'abstraction. Certaines modifications de la page Web peuvent se traduire par des modifications dans le fichier de scène, ce qui évite au code de devoir être modifié. De plus, cela me protège du modèle événementiel d'IE: j'appelle "scène. J'évalue ce produit, mais je ne suis pas encore sûr de l'utiliser, principalement parce que la documentation est terrible. Une autre alternative est Watin , et une de plus La raison pour laquelle je n'ai pas encore acheté SWEA est cet article accusant son auteur de spamming contre Watin.
  2. Une fois la page Web acquise, j'utilise Expression Web pour exécuter des contrôles de compatibilité et identifier les erreurs.
  3. J'utilise RegexMagic pour supprimer et corriger les erreurs. J'aime vraiment cet outil. Bien sûr, cela vous met parfois en colère, parce que cela ne vous permet pas de faire des choses qui devraient être vraiment faciles, mais c’est un outil séduisant, et la documentation est incroyable.
  4. Enfin, une fois que toutes les erreurs que je connais ont été corrigées, j'utilise HTML Agility Pack pour la conversion au format XHTML - traversez les ts et les pointes, pour ainsi dire: toutes les minuscules, les guillemets, etc.

J'espère que cela t'aides!

Avi


Réponse populaire

pouvez-vous me dire quel genre de problèmes ennuyeux avez-vous?
mais vous n'avez pas besoin d'utiliser regex pour nettoyer le code HTML, HAP vous permettra d'accéder aux éléments d'un code HTML mal formé à l'aide de requêtes Xpath.
et fondamentalement, vous devez apprendre Xpath pour savoir comment obtenir les éléments HTML que vous souhaitez.
cela dépend vraiment du type de HTML que vous analysez avec HAP.
mais il y a plusieurs façons d'obtenir les éléments.
comme par id ou par classe ou même vous pouvez obtenir l’élément qui suit un autre élément contenant un texte donné tel que "nom:" par exemple.
vous pouvez aller au tutoriel Xpath pour les écoles W3 pour un bon tutoriel xpath




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi