En python3 dans, urllib et urllib2 deux bibliothèques dans une bibliothèque, urllib unifiée.
urllib bibliothèque est construite bibliothèque de demande HTTP python, comprenant quatre modules principaux:
- demande: la base, la requête HTTP est le module le plus important pour la demande de transmission analogique.
- Erreur: module de gestion des exceptions.
- analyser: un module d'outil, une URL beaucoup de traitement, la résolution, la résolution, etc. combinés.
- robotparser: utilisé pour identifier le fichier robots.txt du site pour déterminer le site vous pouvez monter
Module 1.Demande: envoyer une demande
Demande module d'envoi peut être réalisé et obtenu en réponse à la demande. Principalement dans les méthodes suivantes:
1.urlopen ()
Avec la méthode de base urlopen () peut être réalisée requête GET page de base. Par exemple, avec Baidu, par exemple:
import urllib.request
response=urllib.request.urlopen("http://www.baid.com")
print(response.read().decode("utf-8"))
Exécutez le morceau ci-dessus code pour obtenir les résultats suivants:
Donc, nous arrivons à la variable de réponse ce qui est, imprimez-ce qu'il peut voir est un type de « <class « http.client.HTTPResponse »> » classe d'objets, les principaux attributs msg, la version, l'état, la raison, etc. les principales méthodes sont lues (), readinto (), getHeader (nom), getHeaders () et autres. Obtenez cet objet que nous pouvons appeler ces méthodes et propriétés.
Par exemple, dans le dessus dudit exemple de site Baidu nous avons quelques cas où l'appel comme suit:
Si vous souhaitez créer un lien pour passer certains paramètres comment faire fonctionner tout d'abord regarder le document dans l'interprétation de la fonction urlopen ():
* Urllib.request.urlopen (url, data = Aucun, timeout = <object objet à 0x000000000049D760>, , cafile = Aucun, capath = Aucun, cadefault = False, contexte = Aucun)
Nous pouvons voir, il y a plusieurs autres paramètres, en plus d'URL. Nous avons introduit un par un.
- paramètres de données
paramètre optionnel, mais si vous voulez ajouter le paramètre octets méthode besoin () est converti en format de flux d'octets du contenu. Ajoutez ce paramètre de la méthode de requête GET devient POST. Par exemple, les données = octets (urllib.parse.urlencode ({ 'monde': 'bonjour'}), encoding = 'utf-8')
- paramètre de délai d'attente
réglage délai d'attente, tel que le réglage de la temporisation = 1, si la demande cette fois-ci n'a pas été dépassée en réponse à une exception est levée.
2.Demande ()
urlopen () est la plus demande de base d'une bibliothèque, vous pouvez obtenir le contenu le plus simple, mais ne peut rien faire des requêtes plus complexes, telles que l'ajout de contenu en-têtes, nous avons besoin de construire une méthode de demande plus puissant. Regardez l'utilisation de la demande:
import urllib.request
request = urllib.request.Request("https://www.baidu.com")
response = urllib.request.urlopen(request)
print(response.read().decode("utf-8"))
Dans le code ci - dessus, bien que la même méthode utilisée est la demande de transmission urlopen, mais pas le paramètre est une URL, mais une classe de demande d'objet. L' utilisation demande , nous pouvons être plus souple et plus pratique dans lequel les paramètres de configuration.
Demander l'apparence de l' interface API comme:
urllib.request.Request (url, data = Aucun, en-têtes = {}, origin_req_host = Aucun, invérifiable = False, method = Aucun)
- url: Paramètre requis, l'URL de la requête
- Données: octets Type de flux d'octets
- têtes: navigateur dictionnaire déguisé en général utilisé, en l'absence de ce paramètre, le serveur reconnaît que vous visitez avec Python, nous allons vous juger tirez le reptile noir, un anti reptiles
- origin_req_host: demander l' hôte du parti ou IP
- invérifiables: Indique si la demande est invérifiable, par défaut False. Ce qui signifie que l'utilisateur n'a pas le droit de recevoir du contenu demandé.
- Méthode: la demande en utilisant des méthodes telles que GET, POST, PUT, etc.
Module 2.error: gestion des exceptions
dans urllib module définit l'exception d'erreur est généré par le module de demande, si anormale, le module de demande de réponse renvoie une exception.
1.URLError
urllib erreur à partir du module, OSError héritée de la classe, l'erreur de module classe de base exception, le traitement d'exception peut être déclenché de ce fait par le module de demande. Il y a une raison de la propriété, ce sont les mauvaises raisons.
2.HTTPError
sous-classe URLError, gestion des erreurs spécialisées requêtes HTTP, telles que la demande ne parvient, il a trois propriétés:
- code: renvoie un code d'état HTTP, tels que la page 404 commune n'existe pas
- raison: Renvoie la cause de l'erreur
- têtes: renvoie la tête demandée
Voici un code de gestion des exceptions plus commune est écrit:
from urllib import request, error
try:
respons = request.urlopen("www.aaaa.com")
except error.HTTPError as e:
print(e.reason, e.code, e.headers)
except error.HTTPError as e:
print(e.reason)
else:
print("Request Successfully")
Parce que HTTPError est une sous-classe de URLError, de sorte que vous pouvez d'abord capturer HTTPError, acquis son statut, sinon, passez à l'erreur capture URLError, la sortie des raisons. Enfin, la logique de traitement dans des conditions normales d'autre.
Module 3.parse: le lien Parsing
le module d'analyse du fichier définit l'URL de l'interface standard, l'extraction, la combinaison et la conversion des différentes parties de l'URL du lien.
1.urlparse ()
Regardez un exemple, exécutez le code suivant:
from urllib.parse import urlparse
result = urlparse("https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_pc_1")
print(type(result),"\n", result)
Pour atteindre les résultats suivants:
<class 'urllib.parse.ParseResult'>
ParseResult (scheme = 'https', Netloc = 'voice.baidu.com', path = '/ act / newpneumonia / newpneumonia /', params = '', query = 'from = osari_pc_1' , fragment = '')
Comme on peut le voir, le résultat est un objet d'une classe Parse, comprenant en régime, Netloc, chemin, params, requête, fragment six parties. Comme on peut le voir par rapport avec le lien URL d'origine à un format URL standard est la suivante:
schéma: // Netloc / chemin; params requête # fragment
Parmi eux, « // » dans le schéma avant au nom de l'accord, le premier « / » symbole devant un Netloc, à savoir le nom de domaine, suivi du chemin, qui est, le chemin d'accès; « ; » suivi par params, au nom du paramètre, suivi par une requête « ? » , du type généralement utilisé URL GET; « # » suivi de l'ancre pour le positionnement de la position de traction vers le bas dans la page dans la page Web. L'URL rencontrera cette règle générale, l'utilisation urlparse () ils peuvent être fendit.
urllib.parse.ParseResult un type ancestral, vous pouvez être assurés par une liste.
2.urlunparse ()
A savoir urlparse () l'opération inverse.
3.urlsplit ()
Et le urlparse () est params similaires résolvent pas partie distincte, dans le trajet, à savoir une longueur de 5
4.urljoin ()
urljoin ( "base_url", "new_url")
Les deux url base_url et new_url épissées, le principe est base_url seulement trois éléments: schéma, Netloc, chemin. Si ce lien n'existe pas en trois ans, base_url est utilisé dans la reconstitution automatique, exist Ruoguo, new_url dans le contenu correspondant est utilisé. base_url intérieur params, requête, fragment ne peut pas se permettre le rôle Rehe.
5.urlencoden ()
Directement sur l'utilisation:
from urllib.parse import urlencode
params = {
'name':'Merry',
'age':18
}
base_url = "https://www.baidu.com?"
url = base_url + urlencode(params)
print(url)
La sortie est: https://www.baidu.com?name=Merry&age=18 fonction encode () est le premier dictionnaire de paramètres en un paramètre de séquence requête GET.
6.quote ()
from urllib.parse import quote
key = "你好"
url = "www.baidu.com/s?wd=" + quote(key)
print(url)
www.baidu.com/s?wd=%E4%BD%A0%E5%A5%BD
Cette fonction se contentera de passer le maquillage format URL codé, cette fonction résoudre le problème des déchets avec des paramètres URL chinois qui peuvent être causés. Quelle est la unquote de marche arrière ()
De plus, la fonction urlsplit (), parse_qs (), parse_qsl () et similaires, non décrit en détail.