Maison  >  Article  >  développement back-end  >  Recommandation de conscience ! 8 compétences essentielles pour les maîtres des robots Python !

Recommandation de conscience ! 8 compétences essentielles pour les maîtres des robots Python !

PHPz
PHPzavant
2023-04-13 11:55:051526parcourir

Recommandation de conscience ! 8 compétences essentielles pour les maîtres des robots Python !

Si vous souhaitez apprendre rapidement les robots d'exploration, le langage le plus intéressant à apprendre doit être Python. Python a de nombreux scénarios d'application, tels que : le développement Web rapide, les robots d'exploration, le fonctionnement et la maintenance automatisés, etc. publier automatiquement des scripts et envoyer et recevoir des e-mails, des scripts simples de reconnaissance de code de vérification.

Les robots ont également de nombreux processus de réutilisation au cours du processus de développement. Aujourd'hui, je vais résumer les 8 compétences essentielles, qui peuvent économiser du temps et des efforts à l'avenir et accomplir les tâches efficacement.

1. Exploration de base des pages Web

méthode get

import urllib2
url = "http://www.baidu.com"
response = urllib2.urlopen(url)
print response.read()

méthode post

import urllib
import urllib2
url = "http://abcde.com"
form = {'name':'abc','password':'1234'}
form_data = urllib.urlencode(form)
request = urllib2.Request(url,form_data)
response = urllib2.urlopen(request)
print response.read()

2. Utiliser l'IP proxy

Dans le processus de développement des robots d'exploration, nous rencontrons souvent des situations où l'IP est bloquée, et nous avons alors besoin pour l'utiliser Proxy IP ; il y a la classe ProxyHandler dans le package urllib2. Grâce à cette classe, vous pouvez configurer un proxy pour accéder à la page Web, comme indiqué dans l'extrait de code suivant :

import urllib2
proxy = urllib2.ProxyHandler({'http': '127.0.0.1:8087'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
response = urllib2.urlopen('http://www.baidu.com')
print response.read()

3. sont stockés dans la mémoire de l'utilisateur par certains sites Web afin d'identifier l'identité de l'utilisateur et d'effectuer un suivi de session. Pour les données sur le terminal local (généralement cryptées), python fournit le module cookielib pour traiter les cookies. fournir des objets pouvant stocker des cookies, afin qu'ils puissent être utilisés conjointement avec le module urllib2 pour accéder aux ressources Internet. Recherchez le compte public sur WeChat : Architect Guide, répondez : Architect Get Information.


Extrait de code :

import urllib2, cookielib
cookie_support= urllib2.HTTPCookieProcessor(cookielib.CookieJar())
opener = urllib2.build_opener(cookie_support)
urllib2.install_opener(opener)
content = urllib2.urlopen('http://XXXX').read()

La clé est CookieJar(), qui est utilisée pour gérer les valeurs des cookies HTTP, stocker les cookies générés par les requêtes HTTP et ajouter des objets cookies aux requêtes HTTP sortantes. L'intégralité du cookie est stockée en mémoire et le cookie sera perdu après le garbage collection de l'instance CookieJar. Tous les processus n'ont pas besoin d'être exécutés séparément.


Ajouter des cookies manuellement :

cookie = "PHPSESSID=91rurfqm2329bopnosfu4fvmu7; kmsign=55d2c12c9b1e3; KMUID=b6Ejc1XSwPq9o756AxnBAg="
request.add_header("Cookie", cookie)

4. Déguisez-vous en navigateur

Certains sites Web sont dégoûtés par la visite des robots d'exploration, ils rejettent donc les demandes des robots. Par conséquent, l'erreur HTTP 403 : interdite se produit souvent lors de l'utilisation de urllib2 pour accéder directement au site Web.


Portez une attention particulière à certains en-têtes. Le serveur vérifiera ces en-têtes :


User-Agent ou Proxy vérifiera cette valeur pour déterminer s'il s'agit d'une requête initiée par le navigateur

  • Content-Type. Lors de l'utilisation de l'interface REST, le serveur vérifiera cette valeur pour déterminer comment le contenu du corps HTTP doit être analysé. Cela peut être réalisé en modifiant l'en-tête dans le package http. L'extrait de code est le suivant :
  • import urllib2
    headers = {
     'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'
    }
    request = urllib2.Request(
     url = 'http://my.oschina.net/jhao104/blog?catalog=3463517',
     headers = headers
    )
    print urllib2.urlopen(request).read()
  • 5. Analyse de page
  • L'outil le plus puissant pour l'analyse de page est bien sûr les expressions régulières. Ceci est différent pour différents utilisateurs de différents sites Web, il n'est donc pas nécessaire de trop expliquer

La seconde est la bibliothèque d'analyse, il y en a généralement deux. utilisé lxml et BeautifulSoup

Pour ces deux bibliothèques, mon évaluation est qu'elles sont toutes deux des bibliothèques de traitement HTML/XML. Beautifulsoup est implémenté uniquement en python et est inefficace, mais ses fonctions sont pratiques. Par exemple, le code source d'un certain. Le nœud HTML peut être obtenu via la recherche de résultats ; encodage en langage C lxml, efficace, prend en charge XPath.

6. Traitement du code de vérification

Pour certains codes de vérification simples, une identification simple peut être effectuée. Je n'ai fait qu'une simple reconnaissance du code de vérification. Cependant, certains codes de vérification anti-humains, tels que 12306, peuvent être codés manuellement via la plateforme de codage. Bien entendu, cela nécessite des frais.


7. Compression Gzip

Avez-vous déjà rencontré des pages Web tronquées, quelle que soit la façon dont vous les transcodez ? Haha, cela signifie que vous ne savez pas que de nombreux services Web ont la capacité d'envoyer des données compressées, ce qui peut réduire de plus de 60 % la grande quantité de données transmises sur les lignes réseau. Cela est particulièrement vrai pour les services Web XML, car les données XML peuvent être compressées à un degré très élevé.


Mais en général, le serveur n'enverra pas de données compressées pour vous à moins que vous n'indiquiez au serveur que vous pouvez gérer les données compressées.

Vous devez donc modifier le code comme ceci :

import urllib2, httplib
request = urllib2.Request('http://xxxx.com')
request.add_header('Accept-encoding', 'gzip')
opener = urllib2.build_opener()
f = opener.open(request)

C'est la clé : créez un objet Request et ajoutez un en-tête Accept-encoding pour indiquer au serveur que vous pouvez accepter les données compressées gzip.

Ensuite, décompressez les données :

import StringIO
import gzip
compresseddata = f.read()
compressedstream = StringIO.StringIO(compresseddata)
gzipper = gzip.GzipFile(fileobj=compressedstream)
print gzipper.read()
    8. Exploration simultanée multithread
  • Si un seul thread est trop lent, le multithread est nécessaire. Voici un modèle de pool de threads simple. Ce programme imprime simplement 1 à 10. mais on voit qu'il est concurrent.

Bien que le multithreading de Python soit inutile, il peut encore améliorer l'efficacité dans une certaine mesure pour les robots d'exploration fréquents sur le réseau.

from threading import Thread
from Queue import Queue
from time import sleep
# q是任务队列
#NUM是并发线程总数
#JOBS是有多少任务
q = Queue()
NUM = 2
JOBS = 10
#具体的处理函数,负责处理单个任务
def do_somthing_using(arguments):
 print arguments
#这个是工作进程,负责不断从队列取数据并处理
def working():
 while True:
 arguments = q.get()
 do_somthing_using(arguments)
 sleep(1)
 q.task_done()
#fork NUM个线程等待队列
for i in range(NUM):
 t = Thread(target=working)
 t.setDaemon(True)
 t.start()
#把JOBS排入队列
for i in range(JOBS):
 q.put(i)
#等待所有JOBS完成
q.join()

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