Question

Je construis un petit moteur de recherche spécialisé pour obtenir des informations sur les prix. Le moteur ne collectera que des segments de données spécifiques sur chaque site. Mon plan est de scinder le processus en deux étapes.

  1. Le grattage d'écran simple basé sur une URL qui pointe vers la page où le segment dont j'ai besoin existe. Le moyen le plus simple de procéder consiste-t-il simplement à utiliser un objet WebClient et à obtenir le code HTML complet?

  2. Une fois que le code HTML est extrait et enregistré, analysez-le via un script et extrayez uniquement le segment et les valeurs dont j'ai besoin (par exemple, la valeur du prix d'un produit). Mon problème est que ce script doit être unique pour chaque site que je tire, il doit être capable de gérer du très mauvais HTML (donc je ne pense pas que XSLT fera l'affaire ...) et je dois pouvoir le changer. à la volée lorsque les sites cibles sont mis à jour et modifiés. Je vais enfin prendre les valeurs spécifiques et les écrire dans une base de données pour les rendre consultables

Pourriez-vous s'il vous plaît me donner quelques conseils sur la meilleure façon de concevoir l'architecture? Feriez-vous autre chose que celle décrite ci-dessus?

Était-ce utile?

La solution

  1. Oui, un client Web peut bien fonctionner pour cela. Le contrôle WebBrowser fonctionnera également en fonction de vos besoins. Si vous allez charger le document dans un document HTML (le DOM HTML IE), l'utilisation du contrôle de navigateur Web sera peut-être plus simple.

  2. L'objet HtmlDocument qui est maintenant intégré à .NET peut être utilisé pour analyser le code HTML. Il est conçu pour être utilisé avec le contrôle WebBrowser, mais vous pouvez également utiliser l'implémentation à partir de la dll mshtml. Je n’ai pas utilisé le HtmlAgilityPack, mais j’entends dire qu’il peut faire un travail similaire.

Les objets HTML DOM traitent généralement, et corrigent, le plus vilain HTML que vous leur lancez. En plus de permettre un moyen plus simple d’analyser le code HTML, document.GetElementsByTag pour obtenir une collection d’objets de balise, par exemple.

En ce qui concerne les nouvelles exigences du site, cela semble être un bon candidat pour le modèle de stratégie . Vous pouvez 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 utilisant XML pour définir un ensemble générique de paramètres permettant d'extraire du texte à partir de pages HTML. Fondamentalement, il définirait les éléments de début et de fin pour commencer et terminer l'extraction. J'ai trouvé cette technique assez efficace pour un petit échantillon, mais elle devient plutôt lourde et difficile à personnaliser à mesure que la collection de sites devient de plus en plus grande. Maintenir le XML à jour et essayer de conserver un ensemble générique de XML et de coder le traitement de tout type de site est difficile. Mais si le type et le nombre de sites sont faibles, cela pourrait fonctionner.

Une dernière chose à mentionner est que vous pouvez ajouter une étape de nettoyage à votre approche. Un moyen flexible de nettoyer HTML au fur et à mesure de son insertion a été inestimable pour le code sur lequel j'ai travaillé par le passé. Peut-être que mettre en place un type de pipeline serait une bonne approche si vous pensez que le domaine est assez complexe pour le justifier. Mais même une méthode qui exécute des expressions rationnelles sur le code HTML avant de l’analyser serait utile. Se débarrasser des images, remplacer certaines balises mal utilisées par des balises HTML plus agréables, etc. La quantité de HTML vraiment douteux qui existe continue de me surprendre ...

Autres conseils

Eh bien, je voudrais aller avec la façon dont vous décrivez.

1. Combien de données va-t-il gérer? Récupérer l'intégralité du code HTML via WebClient / HttpWebRequest ne devrait pas poser de problème.

2. Je choisirais HtmlAgilityPack pour l'analyse HTML. Il est très tolérant et peut gérer un balisage très laid. Comme HtmlAgilityPack prend en charge XPath, il est assez facile d’avoir des sélections xpath spécifiques pour des sites individuels.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top