Maison développement back-end Tutoriel Python Compréhension approfondie des principes du robot d'exploration distribué Python

Compréhension approfondie des principes du robot d'exploration distribué Python

Nov 26, 2020 pm 05:59 PM
python 分布式爬虫

La colonne

Tutoriel vidéo Python présente les principes des robots distribués.

Compréhension approfondie des principes du robot d'exploration distribué Python

Recommandation gratuite : Tutoriel vidéo Python

Tout d'abord, faisons-le Voyons comment les gens obtiennent le contenu de la page Web s'il s'agit d'un comportement normal.

(1) Ouvrez le navigateur, entrez l'URL et ouvrez la page Web source

(2) Sélectionnez le contenu que vous souhaitez, y compris le titre, l'auteur, le résumé , texte, etc. Informations

(3) Stockées sur le disque dur

Les trois processus ci-dessus, mappés au niveau technique, sont en fait : la demande de réseau, la capture de données structurées et stockage de données.

Nous utilisons Python pour écrire un programme simple pour implémenter la fonction de saisie simple ci-dessus.

#!/usr/bin/python 
#-*- coding: utf-8 -*- 
''''' 
Created on 2014-03-16 
 
@author: Kris 
''' 
import urllib2, re, cookielib 
 
def httpCrawler(url): 
  ''''' 
  @summary: 网页抓取 
  ''' 
  content = httpRequest(url) 
  title = parseHtml(content) 
  saveData(title) 
 
def httpRequest(url): 
  ''''' 
  @summary: 网络请求 
  '''  
  try: 
    ret = None 
    SockFile = None 
    request = urllib2.Request(url) 
    request.add_header('User-Agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)') 
    request.add_header('Pragma', 'no-cache') 
    opener = urllib2.build_opener() 
    SockFile = opener.open(request) 
    ret = SockFile.read() 
  finally: 
    if SockFile: 
      SockFile.close() 
     
  return ret 
 
def parseHtml(html): 
  ''''' 
  @summary: 抓取结构化数据 
  ''' 
  content = None 
  pattern = &#39;<title>([^<]*?)</title>&#39; 
  temp = re.findall(pattern, html) 
  if temp: 
    content = temp[0] 
   
  return content 
   
def saveData(data): 
  &#39;&#39;&#39;&#39;&#39; 
  @summary: 数据存储 
  &#39;&#39;&#39; 
  f = open(&#39;test&#39;, &#39;wb&#39;) 
  f.write(data) 
  f.close() 
   
if __name__ == &#39;__main__&#39;: 
  url = &#39;http://www.baidu.com&#39; 
  httpCrawler(url)
Copier après la connexion

Cela a l'air très simple, oui, c'est un programme de base pour débuter avec les robots d'exploration. Bien entendu, la mise en œuvre d’un processus de collecte n’est rien d’autre que les étapes de base ci-dessus. Mais pour mettre en œuvre un processus de collecte puissant, vous rencontrerez les problèmes suivants :

(1) L'accès avec les informations des cookies est requis. Par exemple, la plupart des logiciels sociaux nécessitent essentiellement que les utilisateurs se connectent. pouvons-nous voir des choses précieuses. En fait, c'est très simple. Nous pouvons utiliser le module cookielib fourni par Python pour réaliser chaque visite avec les informations de cookie fournies par le site Web source. le robot d'exploration sera connecté. statut, nous pourrons alors collecter toutes les informations vues par l'utilisateur connecté. Ce qui suit est une modification de la méthode httpRequest() utilisant des cookies :

ckjar = cookielib.MozillaCookieJar() 
cookies = urllib2.HTTPCookieProcessor(ckjar)     #定义cookies对象 
def httpRequest(url): 
  &#39;&#39;&#39;&#39;&#39; 
  @summary: 网络请求 
  &#39;&#39;&#39;  
  try: 
    ret = None 
    SockFile = None 
    request = urllib2.Request(url) 
    request.add_header(&#39;User-Agent&#39;, &#39;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)&#39;) 
    request.add_header(&#39;Pragma&#39;, &#39;no-cache&#39;) 
    opener = urllib2.build_opener(cookies)    #传递cookies对象 
    SockFile = opener.open(request) 
    ret = SockFile.read() 
  finally: 
    if SockFile: 
      SockFile.close() 
     
  return ret
Copier après la connexion

(2) Problème d'encodage. Il existe actuellement deux encodages les plus courants sur les sites Web : utf-8 ou gbk. Lorsque nous collectons l'encodage du site Web source et que l'encodage stocké dans notre base de données est incohérent, par exemple, l'encodage de 163.com utilise gbk, et ce dont nous avons besoin. store est des données codées en utf.-8, nous pouvons alors utiliser les méthodes encode() et decode() fournies en Python pour convertir. Par exemple :

content = content.decode(&#39;gbk&#39;, &#39;ignore&#39;)   #将gbk编码转为unicode编码 
content = content.encode(&#39;utf-8&#39;, &#39;ignore&#39;)  #将unicode编码转为utf-8编码
Copier après la connexion

a un encodage Unicode au milieu. encodage intermédiaire unicode afin de convertir en gbk ou utf-8.

(3) Les balises de la page Web sont incomplètes. Par exemple, certains codes sources ont une balise de début mais pas de balise de fin. Si la balise HTML est incomplète, cela affectera notre capacité à capturer des données structurées. Nous pouvons utiliser Python Le module BeautifulSoup nettoie d'abord le code source puis analyse et obtient le contenu.

(4) Certains sites Web utilisent JS pour stocker du contenu Web. Lorsque nous avons examiné directement le code source, nous avons trouvé un tas de code JS problématique. Vous pouvez utiliser Mozilla, Webkit et d'autres boîtes à outils capables d'analyser les navigateurs pour analyser js et ajax, bien que la vitesse soit légèrement plus lente.

(5) L'image existe sous forme flash. Lorsque le contenu de l'image est composé de texte ou de chiffres, cela est plus facile à gérer. Il suffit d'utiliser la technologie OCR pour obtenir une reconnaissance automatique, mais s'il s'agit d'un lien flash, nous stockons l'intégralité de l'URL.

(6) Une page Web a plusieurs structures de pages Web. Si nous n'avons qu'un seul ensemble de règles d'exploration, cela ne fonctionnera certainement pas. Par conséquent, nous devons configurer plusieurs ensembles de simulations pour faciliter l'exploration.

(7) Surveillez le site Web source. Après tout, explorer les choses d'autres personnes n'est pas une bonne chose, c'est pourquoi la plupart des sites Web auront des restrictions sur l'accès aux robots d'exploration.
Un bon système de collecte devrait être que, peu importe où se trouvent nos données cibles, tant qu'elles sont visibles par l'utilisateur, nous pouvons les récupérer. Ce que vous voyez est ce que vous obtenez, une collecte sans entrave, que les données doivent être connectées ou non, peuvent être collectées en douceur. Les informations les plus précieuses nécessitent généralement une connexion, comme les sites de réseaux sociaux. Afin de pouvoir se connecter, le site Web doit disposer d'un système d'exploration qui simule la connexion de l'utilisateur pour obtenir les données normalement. Cependant, les sites sociaux espèrent former une boucle fermée et ne sont pas disposés à placer des données en dehors du site. Ce type de système ne sera pas aussi ouvert aux gens que les actualités et autres contenus. La plupart de ces sites Web sociaux adopteront certaines restrictions pour empêcher les systèmes de robots d'exploration d'explorer les données. Généralement, il ne faudra pas longtemps pour qu'un compte soit exploré avant qu'il soit détecté et que l'accès soit interdit. Cela signifie-t-il que nous ne pouvons pas explorer les données de ces sites Web ? Ce n’est certainement pas le cas. Tant que les réseaux sociaux ne ferment pas l’accès aux pages Web, nous pouvons également accéder aux données auxquelles les personnes normales peuvent accéder. En dernière analyse, il s'agit d'une simulation du comportement humain normal, que l'on appelle professionnellement « anti-surveillance ».

Les sites Web sources ont généralement les restrictions suivantes :

1. Le nombre de visites sur une seule adresse IP au cours d'une certaine période de temps. le site Web, à moins qu'il ne s'agisse d'un clic aléatoire pour jouer, sinon vous ne visiterez pas un site Web trop rapidement sur une période de temps prolongée et la durée ne sera pas trop longue. Ce problème est facile à résoudre. Nous pouvons utiliser un grand nombre d'adresses IP de proxy irrégulières pour former un pool de proxy, sélectionner des proxys au hasard dans le pool de proxy et simuler l'accès. Il existe deux types d’adresses IP proxy : le proxy transparent et le proxy anonyme.

2. Le nombre de visites sur un seul compte au cours d'une certaine période de temps. Si une personne accède à une interface de données 24 heures sur 24 et que la vitesse est très rapide, il peut s'agir d'un robot. Nous pouvons utiliser un grand nombre de comptes avec un comportement normal. Le comportement normal est la façon dont les gens ordinaires opèrent sur les sites de réseaux sociaux, et le nombre d'URL visitées par unité de temps doit être minimisé. Cette fois, il peut y avoir un intervalle de temps entre chaque visite. L'intervalle peut être une valeur aléatoire, c'est-à-dire qu'après chaque visite d'une URL, il se met en veille pendant une période de temps aléatoire, puis visite l'URL suivante.

Si vous pouvez contrôler les politiques d'accès des comptes et des adresses IP, il n'y aura pratiquement aucun problème. Bien entendu, le site Web de l'autre partie aura également des stratégies d'exploitation et de maintenance qui seront ajustées. Dans une bataille entre l'ennemi et nous-mêmes, le robot d'exploration doit être capable de sentir que l'anti-surveillance de l'autre partie aura un impact sur nous, et informez l'administrateur de le gérer en temps opportun. En fait, l'idéal est de pouvoir mettre en œuvre intelligemment une confrontation anti-surveillance grâce à l'apprentissage automatique et obtenir une capture ininterrompue.

Ce qui suit est un diagramme d'architecture de robot d'exploration distribué que je conçois récemment, comme le montre la figure 1 :

Il s'agit d'un travail purement humble. et une idée préliminaire. Elle est en cours de mise en œuvre et la communication entre le serveur et le client est en cours d'établissement. Le module Socket de Python est principalement utilisé pour réaliser la communication entre le serveur et le client. Si vous êtes intéressé, vous pouvez me contacter individuellement pour discuter et trouver une meilleure solution.

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

HaDIDB: une base de données légère et évolutive horizontalement dans Python HaDIDB: une base de données légère et évolutive horizontalement dans Python Apr 08, 2025 pm 06:12 PM

HaDIDB: Une base de données Python évolutive de haut niveau légère HaDIDB (HaDIDB) est une base de données légère écrite en Python, avec un niveau élevé d'évolutivité. Installez HaDIDB à l'aide de l'installation PIP: PiPinStallHaDIDB User Management Créer un utilisateur: CreateUser () pour créer un nouvel utilisateur. La méthode Authentication () authentifie l'identité de l'utilisateur. FromHadidb.OperationMportUserUser_OBJ = User ("Admin", "Admin") User_OBJ.

Python: Explorer ses applications principales Python: Explorer ses applications principales Apr 10, 2025 am 09:41 AM

Python est largement utilisé dans les domaines du développement Web, de la science des données, de l'apprentissage automatique, de l'automatisation et des scripts. 1) Dans le développement Web, les cadres Django et Flask simplifient le processus de développement. 2) Dans les domaines de la science des données et de l'apprentissage automatique, les bibliothèques Numpy, Pandas, Scikit-Learn et Tensorflow fournissent un fort soutien. 3) En termes d'automatisation et de script, Python convient aux tâches telles que les tests automatisés et la gestion du système.

Le plan Python de 2 heures: une approche réaliste Le plan Python de 2 heures: une approche réaliste Apr 11, 2025 am 12:04 AM

Vous pouvez apprendre les concepts de programmation de base et les compétences de Python dans les 2 heures. 1. Apprenez les variables et les types de données, 2. Flux de contrôle maître (instructions et boucles conditionnelles), 3. Comprenez la définition et l'utilisation des fonctions, 4. Démarrez rapidement avec la programmation Python via des exemples simples et des extraits de code.

Méthode de Navicat pour afficher le mot de passe de la base de données MongoDB Méthode de Navicat pour afficher le mot de passe de la base de données MongoDB Apr 08, 2025 pm 09:39 PM

Il est impossible de visualiser le mot de passe MongoDB directement via NAVICAT car il est stocké sous forme de valeurs de hachage. Comment récupérer les mots de passe perdus: 1. Réinitialiser les mots de passe; 2. Vérifiez les fichiers de configuration (peut contenir des valeurs de hachage); 3. Vérifiez les codes (May Code Hardcode).

Comment utiliser Aws Glue Crawler avec Amazon Athena Comment utiliser Aws Glue Crawler avec Amazon Athena Apr 09, 2025 pm 03:09 PM

En tant que professionnel des données, vous devez traiter de grandes quantités de données provenant de diverses sources. Cela peut poser des défis à la gestion et à l'analyse des données. Heureusement, deux services AWS peuvent aider: AWS Glue et Amazon Athena.

Comment optimiser les performances MySQL pour les applications de haute charge? Comment optimiser les performances MySQL pour les applications de haute charge? Apr 08, 2025 pm 06:03 PM

Guide d'optimisation des performances de la base de données MySQL dans les applications à forte intensité de ressources, la base de données MySQL joue un rôle crucial et est responsable de la gestion des transactions massives. Cependant, à mesure que l'échelle de l'application se développe, les goulots d'étranglement des performances de la base de données deviennent souvent une contrainte. Cet article explorera une série de stratégies efficaces d'optimisation des performances MySQL pour garantir que votre application reste efficace et réactive dans des charges élevées. Nous combinerons des cas réels pour expliquer les technologies clés approfondies telles que l'indexation, l'optimisation des requêtes, la conception de la base de données et la mise en cache. 1. La conception de l'architecture de la base de données et l'architecture optimisée de la base de données sont la pierre angulaire de l'optimisation des performances MySQL. Voici quelques principes de base: sélectionner le bon type de données et sélectionner le plus petit type de données qui répond aux besoins peut non seulement économiser un espace de stockage, mais également améliorer la vitesse de traitement des données.

Comment démarrer le serveur avec redis Comment démarrer le serveur avec redis Apr 10, 2025 pm 08:12 PM

Les étapes pour démarrer un serveur Redis incluent: Installez Redis en fonction du système d'exploitation. Démarrez le service Redis via Redis-Server (Linux / MacOS) ou Redis-Server.exe (Windows). Utilisez la commande redis-Cli Ping (Linux / MacOS) ou redis-Cli.exe Ping (Windows) pour vérifier l'état du service. Utilisez un client redis, tel que redis-cli, python ou node.js pour accéder au serveur.

Comment lire la file d'attente redis Comment lire la file d'attente redis Apr 10, 2025 pm 10:12 PM

Pour lire une file d'attente à partir de Redis, vous devez obtenir le nom de la file d'attente, lire les éléments à l'aide de la commande LPOP et traiter la file d'attente vide. Les étapes spécifiques sont les suivantes: Obtenez le nom de la file d'attente: Nommez-le avec le préfixe de "Fitre:" tel que "Fitre: My-Quyue". Utilisez la commande LPOP: éjectez l'élément de la tête de la file d'attente et renvoyez sa valeur, telle que la file d'attente LPOP: My-Queue. Traitement des files d'attente vides: si la file d'attente est vide, LPOP renvoie NIL et vous pouvez vérifier si la file d'attente existe avant de lire l'élément.

See all articles