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

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

coldplay.xixi
coldplay.xixiavant
2020-11-26 17:59:023133parcourir

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)

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

(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编码

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer
Article précédent:syntaxe Python XPathArticle suivant:syntaxe Python XPath