-
Oui, un WebClient peut très bien fonctionner pour cela. Le contrôle WebBrowser fonctionnera également en fonction de vos besoins. Si vous comptez charger le document dans un HtmlDocument (le DOM HTML d'IE), il sera peut-être plus facile d'utiliser le contrôle du navigateur Web.
-
L'objet HtmlDocument qui est maintenant intégré à .NET peut être utilisé pour analyser le HTML. Il est conçu pour être utilisé avec le contrôle WebBrowser mais vous pouvez également utiliser l'implémentation de la dll mshtml. Je n'ai pas utilisé le HtmlAgilityPack, mais j'ai entendu dire qu'il pouvait faire un travail similaire.
Les objets HTML DOM gèreront et corrigeront la plupart des HTML laids que vous leur enverrez. En plus de permettre une façon plus agréable d'analyser le HTML, document.GetElementsByTag permet d'obtenir une collection d'objets de balises par exemple.
En ce qui concerne la gestion des exigences changeantes du site, il semble qu'il s'agisse d'un bon candidat pour l'option schéma stratégique . Vous pourriez charger les stratégies pour chaque site en utilisant la réflexion ou quelque chose de ce genre.
J'ai travaillé sur un système qui utilise XML pour définir un ensemble générique de paramètres permettant d'extraire du texte des pages HTML. En gros, il s'agissait de définir des éléments de début et de fin pour commencer et terminer l'extraction. J'ai trouvé que cette technique fonctionnait assez bien pour un petit échantillon, mais elle devient plutôt lourde et difficile à personnaliser lorsque la collection de sites devient de plus en plus grande. Il est difficile de maintenir le XML à jour et d'essayer de conserver un ensemble générique de XML et de code pour gérer tout type de site. Mais si le type et le nombre de sites sont faibles, cela peut fonctionner.
Une dernière chose à mentionner est que vous pourriez vouloir ajouter une étape de nettoyage à votre approche. Un moyen flexible de nettoyer le HTML au fur et à mesure qu'il entre dans le processus était inestimable pour le code sur lequel j'ai travaillé dans le passé. Peut-être que l'implémentation d'un type de pipeline serait une bonne approche si vous pensez que le domaine est suffisamment complexe pour le justifier. Mais même une simple méthode qui exécute des regex sur le HTML avant de l'analyser serait utile. Se débarrasser des images, remplacer certaines balises mal utilisées par du HTML plus agréable, etc. La quantité de HTML vraiment douteux qui existe continue à me surprendre...