2 votes

Grattage d'écran simple et analyse en .NET

Je suis en train de construire un petit moteur de recherche spécialisé pour les informations sur les prises. Le moteur ne collectera que des segments spécifiques de données sur chaque site. Mon plan est de diviser le processus en deux étapes.

  1. Un simple grattage d'écran basé sur une URL qui pointe vers la page où se trouve le segment dont j'ai besoin. La façon la plus simple de procéder consiste-t-elle à utiliser un objet WebClient et à obtenir le code HTML complet ?

  2. Une fois que le HTML est extrait et sauvegardé, il faut l'analyser via un script et extraire uniquement le segment et les valeurs dont j'ai besoin (par exemple le prix d'un produit). Mon problème est que ce script doit être unique pour chaque site que j'extrais, qu'il doit être capable de gérer du HTML très laid (donc je ne pense pas que XSLT fera l'affaire...) et que je dois pouvoir le modifier à la volée au fur et à mesure que les sites cibles se mettent à jour et changent. Enfin, je vais prendre les valeurs spécifiques et les écrire dans une base de données pour les rendre consultables.

Pourriez-vous me donner quelques conseils sur la meilleure façon d'architecturer ? Feriez-vous autrement que ce qui est décrit ci-dessus ?

3voto

alexn Points 25639

Eh bien, j'irais dans le sens que vous décrivez.

1. Quel volume de données va-t-il traiter ? Récupérer le HTML complet via WebClient / HttpWebRequest ne devrait pas poser de problème.

2. Je choisirais HtmlAgilityPack pour l'analyse du HTML. Il est très indulgent, et peut gérer des balises très laides. Comme HtmlAgilityPack supporte XPath, il est assez facile d'avoir des sélections xpath spécifiques pour des sites individuels.

Je suis en train de courir et je vais développer cette réponse dès que possible.

1voto

Glenn Points 888
  1. 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.

  2. 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...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X