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.
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()
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()
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
Portez une attention particulière à certains en-têtes. Le serveur vérifiera ces en-têtes :
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()
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
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()
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!