Dire qu'il s'agit d'un robot est un peu exagéré, mais le nom est juste, j'ai donc ajouté le mot "simple" devant pour montrer ça
Il s'agit d'un robot castré, qui peut être utilisé simplement ou avec lequel jouer.
L'entreprise a récemment lancé une nouvelle activité pour capturer les données des produits concurrents. Après avoir lu le système de capture écrit par un ancien camarade de classe, il y a certains problèmes
Les règles sont trop strictes, qu'il s'agisse d'évolutivité ou de polyvalence. La surface est un peu faible. Le système précédent devait faire une liste
puis ramper à partir de cette liste. Il n'y avait aucune notion de profondeur, ce qui était un défaut pour les robots. Par conséquent, j'ai décidé de créer un
crawler légèrement plus général, d'ajouter le concept de profondeur et d'améliorer l'évolutivité et la généralité.
Nous avons convenu ici que le contenu à traiter (peut-être l'URL, le nom d'utilisateur, etc.) nous l'appellerons entité.
Compte tenu de l'évolutivité, le concept de file d'attente est adopté ici. Toutes les entités à traiter sont stockées dans la file d'attente,
retire une entité de la file d'attente. le traitement est terminé, stockez et stockez les entités nouvellement capturées dans la file d'attente. Bien sûr, ici
nous devons également effectuer un traitement de déduplication du stockage et un traitement de déduplication de file d'attente pour empêcher le programme de traitement d'effectuer un travail inutile.
+--------+ +-----------+ +----------+ | entity | | enqueue | | result | | list | | uniq list | | uniq list| | | | | | | | | | | | | | | | | | | | | | | | | +--------+ +-----------+ +----------+
Lorsque chaque entité entre dans la file d'attente, 入队排重队列
définit l'indicateur d'entité de mise en file d'attente sur un, puis ne rejoint plus la file d'attente. Lorsque l'entité
est traitée, les données de résultat sont obtenues après. les données de résultat sont traitées Marquez les versets résultants comme 结果数据排重list
, bien sûr
, ici vous pouvez également faire mise à jour traitement, et le code peut être compatible.
+-------+ | 开始 | +---+---+ | v +-------+ enqueue deep为1的实体 | init |--------------------------------> +---+---+ set 已经入过队列 flag | v +---------+ empty queue +------+ +------>| dequeue +------------->| 结束 | | +----+----+ +------+ | | | | | | | v | +---------------+ enqueue deep为deep+1的实体 | | handle entity |------------------------------> | +-------+-------+ set 已经入过队列 flag | | | | | v | +---------------+ set 已经处理过结果 flag | | handle result |--------------------------> | +-------+-------+ | | +------------+
Afin de crawler certains sites web, la chose la plus redoutée est de bloquer les adresses IP et de bloquer Adresses IP. Mais sans agent, je ne peux que le faire. Par conséquent, la stratégie de crawl
est toujours très importante.
Avant d'explorer, vous pouvez rechercher sur Internet des informations pertinentes sur le site Web à explorer, voir si quelqu'un l'a déjà exploré et absorber son
expérience. Ensuite, je dois analyser attentivement moi-même la demande de site Web pour voir si leur demande de site Web apportera des paramètres
spéciaux ? Y aura-t-il des cookies associés au statut non connecté ? La dernière chose que j'ai essayée a été de définir une fréquence de capture aussi élevée que possible.
Ce sera encore plus gênant si la connexion nécessite un.
code de vérification , vous pouvez essayer de vous connecter manuellement puis enregistrer le cookie (bien sûr , si vous en avez la possibilité, vous pouvez essayer la reconnaissance OCR). Bien sûr, vous devez toujours prendre en compte les problèmes mentionnés dans le paragraphe précédent après vous être connecté. Cela ne signifie pas que tout ira bien
après la connexion. Certains sites Web verront leurs comptes bloqués s'ils sont explorés trop fréquemment après la connexion. dans.
, afin que l'action d'initialisation puisse être entièrement automatique et que je n'ai fondamentalement pas besoin de la gérer . L'exploration démarrera quotidiennement
les mises à jour sont effectuées automatiquement.
capturer autant de données du site Web que possible.
Cela entraînerait de plus en plus de contenu dans la file d'attente et occuperait beaucoup de mémoire. Maintenant, elle est transformée en structure de pile, et
récursion. est traité en premier. Complétez toute la profondeur d'une entité , puis traitez l'entité suivante. Par exemple, pour les 10 entités initiales (deep=1), la profondeur d'exploration maximale
est de 3. Il y a 10 sous-entités sous chaque entité, et la longueur maximale de leurs files d'attente est :
队列(lpush,rpop) => 1000个 修改之后的队列(lpush,lpop) => 28个
méthode.
a également été limitée pour éviter des problèmes inattendus.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!