2009-10-13 4 views
0

En cours de conception de haut niveau pour un analyseur/analyseur ciblé. L'application sera utilisée pour extraire des données de sites Web spécifiques. De plus, l'application est conçue pour fonctionner dans un processus maître/esclave, où le côté maître/serveur traite les paquets à analyser, puis permet aux nœuds enfants (serveurs clients) du système d'aller chercher le lot de paquets à analysé. (Xpath est utilisé dans le processus d'analyse pour extraire les données pour chaque page du site analysé.)algorithme de l'analyseur/robot d'exploration question

Je poste ici, car je m'interroge sur les implémentations efficaces pour s'assurer que les données que l'application récupère est correcte. J'envisage d'implémenter un processus dans lequel je fais au moins deux passages sur les sites ciblés, et si les résultats sont différents, je fais une troisième fois, puis j'utilise les deux courses qui correspondent, par erreur, si l'application obtient un résultat différent pour les 3 courses ...

Cependant, cela devient reaaly inefficace et pédaliers sérieusement le bandwodth/traitement ...

la raison pour laquelle je crois que je dois faire des courses multiples, parce que les données sous-jacentes/site va changer au jour le jour .. Mais je veux être en mesure d '"arrêter" la course suivante dès que possible, si l'application peut déterminer que les données sous-jacentes sur la page n'a pas changé ..

So. Je demande essentiellement si Quelqu'un a des pointeurs vers tout type de docs/articles/pensées/etc .. sur la façon dont ce problème peut/a été résolu .. Je pense qu'il ya des gens/applications qui ont résolu cela. IE, un site comme simplement embauché/en effet où vous devez gratter les sites de travail sous-jacents, et assurez-vous que les données que vous obtenez est correcte, ont résolu ce genre de chose ...

Espérons que tout cela a du sens! (J'ai plus, mais essayé de le garder court ici ..)

Merci

Tom

Répondre

1

Je ne vois pas le point de faire plusieurs pistes pour le même site.

GARANTIES TCP/IP correcte transfert des données. S'il y a une erreur, vous obtiendrez l'erreur de votre pile TCP/IP. Puis réessayer est logique. Et si le serveur enverrait des données erronées, il n'y a pas de réel espoir que de les appeler 3 fois améliorerait la situation.

La plupart des sites peuvent également être dynamiques. Il est donc quasiment impossible que vous obteniez exactement le même résultat deux fois.

+0

salut ... la raison d'être des exécutions multiples. Je fais une analyse des horaires de classe de collège, allant de registraire, à l'école, au dept, à la classe, une/toutes ces pages pourraient être modifiées par le collège, de sorte que l'application doit continuellement se refaire. cependant, si je détermine que la 'page; est la même que la version déjà mise en cache/récupérée, l'application pourrait alors utiliser la version actuelle de la page, pour générer les paquets suivants pour analyser les pages suivantes du site. –

+0

Je répondais sur le "Je poste ici, car je m'interroge sur les implémentations efficaces pour s'assurer que les données que l'application récupère est correcte.J'envisage de mettre en œuvre un processus où je fais au moins deux courses à travers les sites ciblés , et si les résultats sont différents, effectuez une troisième exécution, puis utilisez les deux exécutions correspondantes, en effectuant une erreur, si l'application obtient un résultat différent pour les trois exécutions ... "part. Cela devrait suffire à utiliser le dernier résultat. – Foxfire

0

La première étape consiste à s'appuyer sur les en-têtes HTTP Caching. Cela vous indique si la page a changé du tout.

Tous les sites ne sont pas compatibles avec le cache, mais beaucoup le sont. Une fois passé cela, vous n'avez plus de chance car vous devez analyser la page pour voir si elle a changé. Vous pouvez ignorer n'importe quel post-traitement à ce moment-là, mais vous devez quand même manger la phase de récupération et d'analyse, qui est probablement la partie la plus coûteuse de toute façon.

0

Pourquoi construire un autre crawler?Il y a beaucoup de très bonnes implémentations qui ont déjà travaillé sur la façon:

  • ne pas surcharger les serveurs, vous obtenir une interdiction
  • une nouvelle tentative de selon les différents modes de défaillance
  • pour maximiser la bande passante
  • pour éviter boucles infinies dans le fetching
  • et beaucoup d'autres considérations

Vous pouvez intégrer votre logiciel avec ces robots existants et être heureux. Ou, si vous voulez faire plus de travail, vous pouvez probablement les intégrer dans votre application (peut être plus difficile qu'il n'y paraît, de grands robots d'exploration sont des bêtes très complexes.)

Certains d'entre eux sont: