Crawler Python : résumé de quelques techniques de robots d'exploration couramment utilisées
Les robots d'exploration ont également de nombreux processus de réutilisation au cours du processus de développement. Résumons-les ici pour enregistrer certaines choses à l'avenir.
1. Exploration de base des pages Web
méthode d'obtention
import urllib2 url "http://www.baidu.com" respons = urllib2.urlopen(url) print response.read()
méthode de publication
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 une IP proxy
Dans le processus de développement des robots d'exploration, les IP sont souvent rencontré. En cas de blocage, vous devez utiliser l'adresse IP du proxy
Il existe une classe ProxyHandler dans le package urllib2, via laquelle 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. Traitement des cookies
Les cookies sont stockés sur le site local de l'utilisateur. terminal par certains sites Web afin d'identifier l'identité de l'utilisateur et d'effectuer un suivi de session. Données (généralement cryptées), python fournit le module cookielib pour le traitement des cookies. La fonction principale du module cookielib est de fournir des objets pouvant stocker des cookies, afin qu'ils soient stockés. peut être utilisé avec le module urllib2 pour accéder aux ressources Internet
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 est utilisé pour gérer les valeurs des cookies HTTP, stocker les cookies générés par les requêtes HTTP et ajouter aux requêtes HTTP sortantes l'objet cookie. 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
Copier le code Le code est le suivant :
cookie = "PHPSESSID=91rurfqm2329bopnosfu4fvmu7 ; kmsign= 55d2c12c9b1e3; KMUID=b6Ejc1XSwPq9o756AxnBAg="
request.add_header("Cookie", cookie)
4. Se déguiser en navigateur
Certains sites Web sont Visite anti-crawlers, donc toutes les demandes adressées aux robots seront rejetées. Par conséquent, l'erreur HTTP 403 : interdit se produit souvent lors de l'utilisation d'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
1).User-Agent Some Server. ou le proxy vérifiera cette valeur pour déterminer s'il s'agit d'une requête
initiée par le navigateur. 2).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
L'outil le plus puissant pour l'analyse de pages est bien sûr les expressions régulières. Ceci est différent pour différents utilisateurs sur différents sites Web, il n'est donc pas nécessaire de trop expliquer. Voici deux meilleures URL :
Test en ligne d'expressions régulières : http://tool.oschina.net/regex/
La seconde est la bibliothèque d'analyse. Il en existe deux couramment utilisées : lxml et BeautifulSoup. de ces deux Site Web :
lxml : http://my.oschina.net/jhao104/blog/639448
BeautifulSoup : http://cuiqingcai.com/1319.html
Pour ces deux bibliothèques, mon évaluation est qu'il s'agit toutes deux de bibliothèques de traitement HTML/XML. Beautifulsoup est implémenté uniquement en python, ce qui est inefficace, mais a des fonctions pratiques. Par exemple, il peut obtenir le code source d'un HTML. nœud via la recherche de résultats ; encodage en langage lxmlC, 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 elles sont transcodées ? 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 la ligne 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 généralement, le serveur ne vous enverra pas de données compressées à moins que vous ne disiez 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') 1 opener = urllib2.build_opener() f = opener.open(request)
C'est la clé : créez un objet Request et ajoutez un Accept -encoding en-tête pour indiquer au serveur Pouvez-vous accepter les données compressées gzip
puis décompresser 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 il peut être vu. 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个线程等待 alert(“Hello CSDN”); 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 représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'apprentissage de chacun, et j'espère également que tout le monde soutiendra le. Site Web chinois PHP.
Pour plus d'articles liés aux compétences du robot d'exploration Python, veuillez faire attention au site Web PHP chinois !