[Python] Web crawler (2) : utilisez urllib2 pour explorer le contenu Web via l'URL spécifiée

黄舟
Libérer: 2017-01-21 13:47:43
original
1611 Les gens l'ont consulté

Numéro de version : Python2.7.5, Python3 a des changements majeurs, veuillez rechercher un autre tutoriel.

L'exploration dite de page Web consiste à lire les ressources réseau spécifiées dans l'adresse URL à partir du flux réseau et à les enregistrer localement.
Semblable à l'utilisation d'un programme pour simuler la fonction du navigateur IE, l'URL est envoyée au serveur en tant que contenu de la requête HTTP, puis les ressources de réponse du serveur sont lues.


En Python, nous utilisons le composant urllib2 pour explorer les pages Web.
urllib2 est un composant de Python qui obtient des URL (Uniform Resource Locators).

Il fournit une interface très simple sous la forme de la fonction urlopen.

Le code d'application urllib2 le plus simple ne nécessite que quatre lignes.

Créons un nouveau fichier urllib2_test01.py pour expérimenter le rôle de urllib2 :

import urllib2  
response = urllib2.urlopen('http://www.baidu.com/')  
html = response.read()  
print html
Copier après la connexion

Appuyez sur F5 pour voir les résultats de l'opération :

[Python] Web crawler (2) : utilisez urllib2 pour explorer le contenu Web via lURL spécifiée


Nous pouvons ouvrir la page d'accueil de Baidu, faire un clic droit et sélectionner Afficher le code source (soit Firefox, soit Google Chrome), et vous constaterez que le le contenu est exactement le même.

En d'autres termes, les quatre lignes de code ci-dessus affichent tous les codes reçus par le navigateur lorsque nous visitons Baidu.

C'est l'exemple le plus simple de urllib2.


En plus de "http:", l'URL peut également être remplacée par "ftp:", "file:", etc.

HTTP est basé sur le mécanisme de requête et de réponse :

Le client fait une requête et le serveur fournit une réponse.


urllib2 utilise un objet Request pour mapper la requête HTTP que vous effectuez.

Dans sa forme d'utilisation la plus simple, vous créerez un objet Request avec l'adresse que vous souhaitez demander.

En appelant urlopen et en transmettant l'objet Request, un objet de réponse à la demande associé sera renvoyé. .

Cet objet de réponse est comme un objet fichier, vous pouvez donc appeler .read() dans Response.

Créons un nouveau fichier urllib2_test02.py pour en faire l'expérience :

import urllib2    
req = urllib2.Request('http://www.baidu.com')    
response = urllib2.urlopen(req)    
the_page = response.read()    
print the_page
Copier après la connexion

Vous pouvez voir que le contenu de sortie est le même que celui de test01.

urllib2 utilise la même interface pour gérer tous les en-têtes d'URL. Par exemple, vous pouvez créer une requête FTP comme ci-dessous.

req = urllib2.Request('ftp://example.com/')
Copier après la connexion

Vous permet de faire deux choses supplémentaires lors des requêtes HTTP.


1. Envoyer des données de formulaire

Je pense que ce contenu sera familier à tous ceux qui ont travaillé sur le Web

Parfois. vous souhaitez envoyer des données à une URL (généralement, l'URL est connectée à un script CGI [Common Gateway Interface] ou à une autre application WEB).

En HTTP, ceci est souvent envoyé à l'aide de la célèbre requête POST.

Cela est généralement effectué par votre navigateur lorsque vous soumettez un formulaire HTML.

Tous les POST ne proviennent pas de formulaires, vous pouvez utiliser POST pour soumettre des données arbitraires à votre propre programme.

Pour les formulaires HTML généraux, les données doivent être encodées dans un formulaire standard. Transmettez-le ensuite à l’objet Request en tant que paramètre de données.

L'encodage fonctionne en utilisant les fonctions urllib au lieu de urllib2.

Créons un nouveau fichier urllib2_test03.py pour avoir une idée :

import urllib    
import urllib2    
  
url = 'http://www.someserver.com/register.cgi'    
    
values = {'name' : 'WHY',    
          'location' : 'SDU',    
          'language' : 'Python' }    
  
data = urllib.urlencode(values) # 编码工作  
req = urllib2.Request(url, data)  # 发送请求同时传data表单  
response = urllib2.urlopen(req)  #接受反馈的信息  
the_page = response.read()  #读取反馈的内容
Copier après la connexion


Si aucun paramètre de données n'est envoyé, urllib2 utilise la méthode de requête GET.

La différence entre les requêtes GET et POST est que les requêtes POST ont généralement des "effets secondaires",

Elles changeront l'état du système d'une manière ou d'une autre (comme soumettre des tas d'ordures à votre porte).

Les données peuvent également être envoyées en les codant dans l'URL de la requête Get elle-même.

import urllib2    
import urllib  
  
data = {}  
  
data['name'] = 'WHY'    
data['location'] = 'SDU'    
data['language'] = 'Python'  
  
url_values = urllib.urlencode(data)    
print url_values  
  
name=Somebody+Here&language=Python&location=Northampton    
url = 'http://www.example.com/example.cgi'    
full_url = url + '?' + url_values  
  
data = urllib2.open(full_url)
Copier après la connexion

De cette manière, la transmission Get des données Data est réalisée.



2. Définissez les en-têtes sur la requête http

Certains sites n'aiment pas être accessibles par des programmes (non- accès humain), ou envoyer différentes versions de contenu à différents navigateurs.

L'urllib2 par défaut s'identifie comme "Python-urllib/x.y" (x et y sont les numéros de version majeure et mineure de Python, comme Python-urllib/2.7),

Cette identité peut Rendre le site confus, ou tout simplement ne pas fonctionner.

Le navigateur confirme son identité via l'en-tête User-Agent. Lorsque vous créez un objet de requête, vous pouvez lui donner un dictionnaire contenant les données d'en-tête.

L'exemple suivant envoie le même contenu que ci-dessus, mais se simule comme Internet Explorer.

(Merci de le rappeler à tous, cette démo n'est plus disponible, mais le principe est toujours le même).

import urllib    
import urllib2    
  
url = 'http://www.someserver.com/cgi-bin/register.cgi'  
  
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'    
values = {'name' : 'WHY',    
          'location' : 'SDU',    
          'language' : 'Python' }    
  
headers = { 'User-Agent' : user_agent }    
data = urllib.urlencode(values)    
req = urllib2.Request(url, data, headers)    
response = urllib2.urlopen(req)    
the_page = response.read()
Copier après la connexion

Ce qui précède est un robot d'exploration Web [Python] (2) : utiliser urllib2 pour explorer le contenu Web via l'URL spécifiée. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php. cn) !


Étiquettes associées:
source:php.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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!