Première connaissance de la bibliothèque urllib du crawler python

bibliothèque urllib

La bibliothèque urllib est l'une des bibliothèques de requêtes réseau les plus élémentaires de Python, qui peut simuler le comportement du navigateur, envoyer une requête au serveur spécifié et enregistrer les données renvoyées par le serveur

fonction urlopen

Dans la bibliothèque urllib de Python3, toutes les méthodes liées aux requêtes réseau sont collectées sous le module urllib.request. Voyons d'abord l'utilisation de base de la fonction urlopen:

from urllib import request
resp = request.urlopen("http://baidu.com")
print(resp.read())

En fait, utilisez le navigateur pour accéder à Baidu et cliquez avec le bouton droit pour afficher le code source. Vous constaterez que les données que nous avons imprimées tout à l'heure sont exactement les mêmes. En d'autres termes, les trois lignes de code ci-dessus nous ont aidés à explorer tout le code sur la page d'accueil de Baidu. -Le code python correspondant à une requête ur basique est vraiment simple.
Ce qui suit explique en détail la fonction urlopen:

  1. url: l'url demandée. .
  2. données: la date demandée, si cette valeur est définie, elle deviendra une post-demande.
  3. Valeur de retour proche: La valeur de retour est un objet HTRsponste htptctient. Cet objet est un objet de descripteur de fichier. Il y a lecture (taille). ligne rouge. readlines et méthodes getcode.

fonction urlretrieve

Cette fonction peut facilement enregistrer un fichier sur la page Web au niveau local. Le code suivant peut facilement télécharger la page d'accueil de Baidu sur le site local:

from urllib import request
request.urlretrieve("http://baidu.com", 'index.html')

fonction urlencode

Lors de l'envoi d'une demande avec un navigateur, si l'URL contient du chinois ou d'autres caractères spéciaux. Ensuite, le navigateur commencera automatiquement le codage. Si vous utilisez le code pour envoyer la demande, vous devez l'encoder manuellement. À ce stade, vous devez utiliser la fonction urlencode pour l'implémenter. urlencode peut convertir les données du dictionnaire en données encodées URL.
L'exemple de code est le suivant:

from urllib import parse
data = {'name':'张三','age': 10}
q = parse.urlencode(data)		#q.encode('utf-8')将会把unicode字符编程二进制的unicode,前面加上了b
print(q)	#name=%E5%BC%A0%E4%B8%89&age=10

parse.quote ne peut être utilisé que pour l'encodage de chaînes

fonction parse_qs

Vous pouvez décoder les paramètres d'URL encodés,

from urllib import parse
qs = 'name=%E5%BC%A0%E4%B8%89&age=10'
print(parse.parse_qs(qs)) #{'name': ['张三'], 'age': ['10']}

urlparse et urlsplit

Parfois, j'obtiens une URL et je souhaite diviser les différents composants de cette URL. À ce moment, vous pouvez utiliser urlparse ou urlsplit pour fractionner. Exemple de code ajouté:

from urllib import request,parse
url = 'https://www.baidu.com/s?wd=github'
result = parse.urlsplit(url) 
#parse.urlparse(url)
print('schema',result.scheme)	#schema https
print('netloc',result.netloc)	#netloc www.baidu.com
print('path',result.path)	#path /s
print('query',result.query)	#query wd=github

request.Request 类

Si vous souhaitez ajouter des en-têtes de demande lors de la demande, vous devez utiliser request, Request class pour atteindre. Par exemple, pour ajouter un User-Agent, l'exemple de code est le suivant:

from urlib import request
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'
}
req = request.Request('http://baidu.com', headers=headers)
resp = request.urlopen(req)
print(resp.read())

Processeur ProxyHandler (paramètres proxy)

De nombreux sites Web détectent le nombre de visites d'une adresse IP pendant une certaine période (via les statistiques de trafic, les journaux système, etc.). Si le nombre de visites ne ressemble pas à une personne normale, il interdira l'accès à cette adresse IP.
Nous pouvons donc configurer certains serveurs proxy et changer un proxy à chaque fois pendant une certaine période. Même si l'IP est interdite, nous pouvons toujours changer une autre IP pour continuer l'exploration.
Le serveur proxy est défini dans urllib via ProxyHandler. Le code suivant montre comment utiliser un ouvre-porte personnalisé pour utiliser un proxy:

from urllib import request
#设置代理,传入字典
handler = request.ProxyHandler({'http':'proxyip})
opener = request.build_opener(handler)  
#这个网址可以测试ip来源                                
req = request.Request("http://httpbin.org/ip")
resp = opener.open(req)
print(resp.read())                                

Les agents couramment utilisés sont:

  • IP gratuite de Westthorn: http://www.xicidaili.com/
  • Agent express: http://ww.kuaidaili.com/
  • Agent Cloud: http://www.daliyun.com/

Qu'est-ce qu'un cookie:

Dans un site Web, les requêtes http sont apatrides. En d'autres termes, même après la première connexion au serveur et la connexion réussie, la deuxième demande au serveur ne peut toujours pas savoir de quel utilisateur il s'agit. L'émergence de cookies est de résoudre ce problème. Après la première connexion, le serveur renvoie certaines données (cookies) au navigateur, puis le navigateur est enregistré localement. Lorsque l'utilisateur envoie la deuxième demande, la dernière Les données des cookies dont l'enregistrement est demandé sont automatiquement transmises au serveur, et le serveur
peut déterminer quel utilisateur utilise actuellement les données portées par le navigateur . La quantité de données stockées par les cookies est limitée. Différents navigateurs ont des tailles de stockage différentes, mais généralement pas plus de 4 Ko. Par conséquent, l'utilisation de cookies ne peut stocker que de petites quantités de données.

Format des cookies

Set-Cookie: NAME=VALUE: Expires/Max-age=DATE: Path=PATH: Domain=DOMAIN NAME: SECURE

Signification du paramètre:

  • NOM: Le nom du cookie.
  • VALEUR: La valeur du cookie.
  • Expire: le délai d'expiration du cookie.
  • Chemin: Le chemin du cookie.
  • Domaine: nom de domaine du cookie.
  • SÉCURISÉ: si cela fonctionne uniquement sous le protocole https.

Utilisez la bibliothèque cookielib et HTTPCookieProcessor pour simuler la connexion:

Le cookie fait référence au fichier texte stocké dans le navigateur de l'utilisateur afin d'identifier l'identité de l'utilisateur et le suivi de session. Le cookie peut conserver les informations de connexion jusqu'à la prochaine session de l'utilisateur avec le serveur.
Prenons Renren.com comme exemple. Sur Renren.com, pour accéder à la page d'accueil d'une personne, vous devez vous connecter avant de pouvoir y accéder. Se connecter signifie simplement avoir des informations sur les cookies. Ensuite, si nous voulons accéder par code, nous devons avoir les informations de cookie correctes pour y accéder. Il existe deux solutions, la première consiste à utiliser un navigateur pour y accéder, puis à copier les informations sur les cookies et à les placer dans les en-têtes.

from urllib import request
login_url = 'http://www...'
headers = {
    'User-Agent':'.......'
}
req = request.Request(url = login_url, headers = headers)
resp = request.urlopen(req)
with open('index.html', 'w', encode='utf-8') as fp:
    fp.write(resp.read().decode('utf-8'))

Mais copier des cookies à partir du navigateur chaque fois que vous visitez une page qui nécessite des cookies est gênant. Le traitement des cookies en Python se fait généralement via la classe de processeur HTTPCookieProcessor du module http.cookiejar et du module urllib. La fonction principale du module http.cookiejar est de fournir des objets pour stocker des cookies. La fonction principale du processeur HTTPCookieProcessor est de traiter ces objets cookie et de construire un objet gestionnaire.

http.cookiejar 模块

Les principales classes de ce module sont CookieJar, FileCookieJar, MoillaCookieJar. Les fonctions de LWPCookidJaro sont les suivantes:

  1. CookieJar: un objet qui gère les valeurs des cookies HTTP, stocke les cookies générés par les requêtes HTTP et ajoute des cookies aux requêtes HTTP sortantes. L'intégralité du cookie est stocké en mémoire et le cookie sera perdu après la récupération de place de l'instance CookieJar.
  2. FileCookieJar (nom de fichier, delayload = None, policy = None): dérivé de CookieJar, utilisé pour créer des instances FileCookieJar, récupérer des informations sur les cookies et stocker des cookies dans des fichiers. flename est le nom du fichier où le cookie est stocké. Lorsque la charge différée a la valeur True, prend en charge l'accès différé au fichier, c'est-à-dire, ne lisez le fichier ou stockez les données dans le fichier que lorsque cela est nécessaire.
  3. MoillaCookieJar (nom de fichier, delayload = None, policy = None): dérivé de FileCookieJar, créez une instance FileCookieJar compatible avec le navigateur Moilla cookies.txt.
  4. LWPCookieJar (flename, delayload = None, policy = None): dérivé de FileCookieJar pour créer une instance FileCookieJa compatible avec le format de fichier standard libwww-per Set-Cookie3.
    Utilisez http.cookiejar et demandez .HTTPCookieProcessor pour vous connecter à Renren. L'exemple de code pertinent est le suivant:

Insérez la description de l'image ici
Enregistrer les cookies localement

Vous pouvez utiliser la méthode de sauvegarde de cookiejar, vous devez spécifier le nom du fichier

from urllib import request
from http.cookiejar import MozillaCookieJar
cookiejar = MozillaCookieJar('cookie.txt')
cookiejar.load(ignore_discard=True)				#过期的cookie也进行存储
handler = request.HTTPCookieProcessor(cookiejar)
opener = request.build_opener(handler)

resp = opener.open('http://httpbin.org/cookies')
for cookie in cookiejar:
    print(cookie)
Publié 8 articles originaux · gagné 3 · vues 186

Je suppose que tu aimes

Origine blog.csdn.net/qq_42641075/article/details/105456236
conseillé
Classement