国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Maison développement back-end Tutoriel Python [Python] Web Crawler (5)?: détails d'utilisation de urllib2 et des techniques d'exploration de sites Web

[Python] Web Crawler (5)?: détails d'utilisation de urllib2 et des techniques d'exploration de sites Web

Jan 21, 2017 pm 02:04 PM

J'ai mentionné une introduction simple à urllib2 plus t?t, et voici quelques détails sur la fa?on d'utiliser urllib2.


1. Paramètres du proxy

urllib2 utilisera la variable d'environnement http_proxy pour définir le proxy HTTP par défaut.

Si vous souhaitez contr?ler explicitement le proxy dans votre programme sans être affecté par les variables d'environnement, vous pouvez utiliser un proxy.

Créez un nouveau test14 pour implémenter une démo de proxy simple?:

import urllib2  
enable_proxy = True  
proxy_handler = urllib2.ProxyHandler({"http" : 'http://some-proxy.com:8080'})  
null_proxy_handler = urllib2.ProxyHandler({})  
if enable_proxy:  
    opener = urllib2.build_opener(proxy_handler)  
else:  
    opener = urllib2.build_opener(null_proxy_handler)  
urllib2.install_opener(opener)

Un détail à noter ici est que l'utilisation de urllib2.install_opener() définira l'ouvreur global de urllib2.

Ceci sera très pratique pour une utilisation ultérieure, mais il ne peut pas fournir un contr?le plus détaillé, comme vouloir utiliser deux paramètres proxy différents dans le programme.

Une meilleure approche consiste à ne pas utiliser install_opener pour modifier les paramètres globaux, mais à appeler directement la méthode open de l'ouvreur au lieu de la méthode globale urlopen.


2. Paramètre de délai d'attente
Dans les anciennes versions de Python (avant Python 2.6), l'API de urllib2 n'expose pas le paramètre de délai d'attente. Pour définir la valeur du délai d'attente, vous ne pouvez modifier que la valeur globale. Délai d'expiration de la valeur Socket.

import urllib2  
import socket  
socket.setdefaulttimeout(10) # 10 秒鐘后超時  
urllib2.socket.setdefaulttimeout(10) # 另一種方式

Après Python 2.6, le délai d'attente peut être défini directement via le paramètre timeout de urllib2.urlopen().

import urllib2  
response = urllib2.urlopen('http://www.google.com', timeout=10)

3. Ajouter un en-tête spécifique à la requête HTTP

Pour ajouter un en-tête, vous devez utiliser l'objet Request :

import urllib2  
request = urllib2.Request('http://www.baidu.com/')  
request.add_header('User-Agent', 'fake-client')  
response = urllib2.urlopen(request)  
print response.read()

Pour certains en-têtes Portez une attention particulière au fait que le serveur vérifiera ces en-têtes
User-Agent : Certains serveurs ou Proxy utiliseront cette valeur pour déterminer si la requête est faite par le navigateur
Content-Type : Lors de l'utilisation l'interface REST, le serveur vérifiera. Cette valeur est utilisée pour déterminer comment le contenu du corps HTTP doit être analysé. Les valeurs courantes sont?:
application/xml?: utilisez
application/json lors de l'appel de XML RPC, tel que RESTful/SOAP?: utilisez
application/x-www-form-urlencoded lors de l'appel de JSON RPC?: utilisez
lorsque le navigateur soumet un formulaire Web. Lors de l'utilisation du service RESTful ou SOAP fourni par le serveur, un paramètre Content-Type incorrect entra?nera le refus du service par le serveur



4.Redirect

urllib2 redirigera automatiquement les codes de retour HTTP 3XX par défaut, sans configuration manuelle. Pour détecter si une action de redirection a eu lieu, il suffit de vérifier si l'URL de la Réponse et l'URL de la Requête sont cohérentes.

import urllib2  
my_url = 'http://www.google.cn'  
response = urllib2.urlopen(my_url)  
redirected = response.geturl() == my_url  
print redirected  
  
my_url = 'http://rrurl.cn/b1UZuP'  
response = urllib2.urlopen(my_url)  
redirected = response.geturl() == my_url  
print redirected
Si vous ne souhaitez pas rediriger automatiquement, en plus d'utiliser la bibliothèque httplib de niveau inférieur, vous pouvez également personnaliser la classe HTTPRedirectHandler.


import urllib2  
class RedirectHandler(urllib2.HTTPRedirectHandler):  
    def http_error_301(self, req, fp, code, msg, headers):  
        print "301"  
        pass  
    def http_error_302(self, req, fp, code, msg, headers):  
        print "303"  
        pass  
  
opener = urllib2.build_opener(RedirectHandler)  
opener.open('http://rrurl.cn/b1UZuP')
5. Cookie

urllib2 gère également les cookies automatiquement. Si vous avez besoin d'obtenir la valeur d'un élément de cookie, vous pouvez le faire?:

import urllib2  
import cookielib  
cookie = cookielib.CookieJar()  
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))  
response = opener.open('http://www.baidu.com')  
for item in cookie:  
    print 'Name = '+item.name  
    print 'Value = '+item.value
Après l'exécution, la valeur du cookie pour visiter Baidu sera affichée?:

[Python] Web Crawler (5)?: détails dutilisation de urllib2 et des techniques dexploration de sites Web

6 .Utilisez les méthodes HTTP PUT et DELETE

urllib2 ne prend en charge que les méthodes HTTP GET et POST Si vous souhaitez utiliser HTTP PUT et DELETE, vous ne pouvez utiliser que la bibliothèque httplib de niveau inférieur. Malgré cela, nous pouvons toujours permettre à urllib2 d'émettre des requêtes PUT ou DELETE de la manière suivante?:

import urllib2  
request = urllib2.Request(uri, data=data)  
request.get_method = lambda: 'PUT' # or 'DELETE'  
response = urllib2.urlopen(request)
7 Obtenez le code de retour HTTP

Pour 200 OK, tant que vous le pouvez. récupérez le code de retour HTTP en utilisant la méthode getcode() de l'objet de réponse renvoyé par urlopen. Mais pour les autres codes retour, urlopen lèvera une exception. à ce stade, il est nécessaire de vérifier l'attribut de code de l'objet d'exception?:

import urllib2  
try:  
    response = urllib2.urlopen('http://bbs.csdn.net/why')  
except urllib2.HTTPError, e:  
    print e.code
8. Journal de débogage

Lorsque vous utilisez urllib2, vous pouvez ouvrir le journal de débogage via la méthode suivante. , afin que vous puissiez envoyer et recevoir des paquets. Le contenu sera imprimé sur l'écran, ce qui est pratique pour le débogage. Parfois, vous pouvez enregistrer le travail de capture de paquets

import urllib2  
httpHandler = urllib2.HTTPHandler(debuglevel=1)  
httpsHandler = urllib2.HTTPSHandler(debuglevel=1)  
opener = urllib2.build_opener(httpHandler, httpsHandler)  
urllib2.install_opener(opener)  
response = urllib2.urlopen('http://www.google.com')
De cette fa?on, vous pouvez voir le. contenu du paquet de données transmis :

[Python] Web Crawler (5)?: détails dutilisation de urllib2 et des techniques dexploration de sites Web


9. Traitement du formulaire

Il est nécessaire de remplir le formulaire lorsque connexion. Comment remplir le formulaire ?

Utilisez d'abord l'outil pour intercepter le contenu du formulaire à remplir.

Par exemple, j'utilise généralement le plug-in Firefox httpfox pour voir quels paquets j'ai envoyés.
En prenant verycd comme exemple, recherchez d'abord la requête POST que vous avez envoyée et les éléments du formulaire POST.
Vous pouvez voir que pour verycd, vous devez renseigner le nom d'utilisateur, le mot de passe, continueURI, fk, login_submit Parmi eux, fk est généré de manière aléatoire (en fait, pas trop aléatoire, il semble qu'il soit généré en encodant simplement l'heure. ). Il doit être obtenu à partir de la page Web, ce qui signifie que vous devez d'abord visiter la page Web et utiliser des outils tels que des expressions régulières pour intercepter l'élément fk dans les données renvoyées. Comme son nom l'indique, continueURI peut être écrit de manière informelle, tandis que login_submit est fixe, comme le montre le code source. Il y a aussi un nom d'utilisateur et un mot de passe, qui sont évidents?:

# -*- coding: utf-8 -*-  
import urllib  
import urllib2  
postdata=urllib.urlencode({  
    'username':'汪小光',  
    'password':'why888',  
    'continueURI':'http://www.verycd.com/',  
    'fk':'',  
    'login_submit':'登錄'  
})  
req = urllib2.Request(  
    url = 'http://secure.verycd.com/signin',  
    data = postdata  
)  
result = urllib2.urlopen(req)  
print result.read()
10. Se déguiser en navigateur pour accéder

Certains sites Web sont dégo?tés par la visite des robots, ils rejettent donc les demandes des robots
à l'heure actuelle, nous devons nous déguiser en navigateur, ce qui peut être réalisé en modifiant l'en-tête dans le package http

#…  
  
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'  
}  
req = urllib2.Request(  
    url = 'http://secure.verycd.com/signin/*/http://www.verycd.com/',  
    data = postdata,  
    headers = headers  
)  
#...
11 Gérer "l'anti-hotlinking"

Certains sites l'ont fait-. appelé paramètres anti-hotlinking. En fait, pour parler franchement, c'est très simple


c'est de vérifier si le site référent est le sien dans l'en-tête de la requête. vous avez envoyé.

Il suffit donc de mettre les en-têtes comme Changez simplement le référent vers le site Web. Prenez cnbeta comme exemple?:

#...
headers = {
    'Referer':'http://www.cnbeta.com/articles'
}
#...


. Les en-têtes sont une structure de données dict. Vous pouvez insérer n'importe quel en-tête.

Par exemple, certains sites Web aiment lire le X-Forwarded-For dans l'en-tête pour voir leur véritable adresse IP. Vous pouvez directement modifier le X-Forwarde-For.

Ce qui précède est [Python] Web Crawler (5)?: détails d'utilisation de urllib2 et des techniques d'exploration de sites Web. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (m.miracleart.cn)?!


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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

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.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

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)

Sujets chauds

Tutoriel PHP
1502
276
Python Seaborn JointPlot Exemple Python Seaborn JointPlot Exemple Jul 26, 2025 am 08:11 AM

Utilisez le plot conjoint de Seaborn pour visualiser rapidement la relation et la distribution entre deux variables; 2. Le tracé de diffusion de base est implémenté par sn.jointplot (data = pointes, x = "total_bill", y = "Tip", kind = "dispers"), le centre est un tracé de dispersion et l'histogramme est affiché sur les c?tés supérieur et inférieur et droit; 3. Ajouter des lignes de régression et des informations de densité à un kind = "reg" et combiner marginal_kws pour définir le style de tracé de bord; 4. Lorsque le volume de données est important, il est recommandé d'utiliser "Hex"

Python List to String Conversion Exemple Python List to String Conversion Exemple Jul 26, 2025 am 08:00 AM

Les listes de cha?nes peuvent être fusionnées avec la méthode join (), telles que '' .join (mots) pour obtenir "HelloworldFrompython"; 2. Les listes de nombres doivent être converties en cha?nes avec MAP (STR, nombres) ou [STR (x) Forxinnumbers] avant de rejoindre; 3. Toute liste de types peut être directement convertie en cha?nes avec des supports et des devis, adaptées au débogage; 4. Les formats personnalisés peuvent être implémentés par des expressions de générateur combinées avec join (), telles que '|' .join (f "[{item}]" ForIteminitems)

Python Connexion à SQL Server PyoDBC Exemple Python Connexion à SQL Server PyoDBC Exemple Jul 30, 2025 am 02:53 AM

Installez PYODBC: utilisez la commande PiPInstallpyodbc pour installer la bibliothèque; 2. Connectez SQLServer: utilisez la cha?ne de connexion contenant le pilote, le serveur, la base de données, l'UID / PWD ou TrustEd_Connection via la méthode pyoDBC.Connect () et prendre en charge l'authentification SQL ou l'authentification Windows respectivement; 3. Vérifiez le pilote installé: exécutez pyodbc.Drivers () et filtrez le nom du pilote contenant ?SQLServer? pour vous assurer que le nom du pilote correct est utilisé tel que ?ODBCDriver17 pour SQLServer?; 4. Paramètres clés de la cha?ne de connexion

Python pandas fondre l'exemple Python pandas fondre l'exemple Jul 27, 2025 am 02:48 AM

pandas.melt () est utilisé pour convertir les données de format larges en format long. La réponse consiste à définir de nouveaux noms de colonne en spécifiant id_vars conserver la colonne d'identification, Value_Vars Sélectionnez la colonne à fondre, var_name et valeur_name, 1.id_vars = 'name' signifie que la colonne de nom reste inchangée, 2.Value_vars = [Math ',' English ',' Science '. du nom de colonne d'origine, 4.value_name = 'score' définit le nouveau nom de colonne de la valeur d'origine et génère enfin trois colonnes, notamment le nom, le sujet et le score.

Python django forme l'exemple Python django forme l'exemple Jul 27, 2025 am 02:50 AM

Définissez d'abord un formulaire ContactForm contenant le nom, la bo?te aux lettres et les champs de message; 2. De l'avis, la soumission du formulaire est traitée en jugeant la demande de poste, et après la vérification, nettoyée_data est obtenue et la réponse est retournée, sinon le formulaire vide sera rendu; 3. Dans le modèle, utilisez {{form.as_p}} pour rendre le champ et ajouter {% csrf_token%} pour empêcher les attaques CSRF; 4. Configurer le routage d'URL vers Point / Contact / vers la vue Contact_View; Utilisez Modelform pour associer directement le modèle pour obtenir un stockage de données. Djangoforms implémente le traitement intégré de la vérification des données, le rendu HTML et les invites d'erreur, qui convient au développement rapide des fonctions de forme s?re.

Optimisation de Python pour les opérations liées à la mémoire Optimisation de Python pour les opérations liées à la mémoire Jul 28, 2025 am 03:22 AM

PythonCanBeoptimizedFormemory-Boundoperations AdreductoverHeadHroughGenerators, EfficientDatastructures et ManagingObjectliFetimes.first, useGeneratorsInSteadofListStoproceSlargedataseSeItematatime, EvitingLoadingEnteryToMeToMeMory.

Qu'est-ce que l'arbitrage statistique dans les crypto-monnaies? Comment fonctionne l'arbitrage statistique? Qu'est-ce que l'arbitrage statistique dans les crypto-monnaies? Comment fonctionne l'arbitrage statistique? Jul 30, 2025 pm 09:12 PM

L'introduction à l'arbitrage statistique L'arbitrage statistique est une méthode commerciale qui capture l'inadéquation des prix sur le marché financier basé sur des modèles mathématiques. Sa philosophie principale découle de la régression moyenne, c'est-à-dire que les prix des actifs peuvent s'écarter des tendances à long terme à court terme, mais reviendront éventuellement à leur moyenne historique. Les traders utilisent des méthodes statistiques pour analyser la corrélation entre les actifs et rechercher des portefeuilles qui changent généralement de manière synchrone. Lorsque la relation de prix de ces actifs est anormalement déviée, des opportunités d'arbitrage se présentent. Sur le marché des crypto-monnaies, l'arbitrage statistique est particulièrement répandu, principalement en raison de l'inefficacité et des fluctuations drastiques du marché lui-même. Contrairement aux marchés financiers traditionnels, les crypto-monnaies fonctionnent 24h / 24 et leurs prix sont très susceptibles de briser les nouvelles, les sentiments des médias sociaux et les améliorations technologiques. Cette fluctuation des prix constante crée fréquemment un biais de prix et fournit aux arbitrageurs un

Python iter et exemple suivant Python iter et exemple suivant Jul 29, 2025 am 02:20 AM

Iter () est utilisé pour obtenir l'objet Iterator, et Next () est utilisé pour obtenir l'élément suivant; 1. Utilisez Iterator () pour convertir des objets itérables tels que les listes en itérateurs; 2. Appelez Next () pour obtenir des éléments un par un et déclenchez l'exception de l'arrêt lorsque les éléments sont épuisés; 3. Utilisez Suivant (iterator, par défaut) pour éviter les exceptions; 4. Les itérateurs personnalisés doivent implémenter les méthodes __iter __ () et __Next __ () pour contr?ler la logique d'itération; L'utilisation de valeurs par défaut est un moyen courant de parcourir la traversée et l'ensemble du mécanisme est concis et pratique.

See all articles