Maison >développement back-end >Tutoriel Python >[Python] Web crawler (2) : utilisez urllib2 pour explorer le contenu Web via l'URL spécifiée
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
Appuyez sur F5 pour voir les résultats de l'opération :
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 : 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. 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 : 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. 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), 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). 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) ! import urllib2
req = urllib2.Request('http://www.baidu.com')
response = urllib2.urlopen(req)
the_page = response.read()
print the_page
req = urllib2.Request('ftp://example.com/')
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() #读取反馈的内容
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)
Cette identité peut Rendre le site confus, ou tout simplement ne pas fonctionner. 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()