101 votes

Changement d'agent utilisateur sur urllib2.urlopen

Comment puis-je télécharger une page web avec un agent utilisateur autre que celui par défaut sur urllib2.urlopen ?

118voto

jcoon Points 5693

I répondu à a question similaire il y a quelques semaines.

Il y a un exemple de code dans cette question, mais en gros vous pouvez faire quelque chose comme ceci : (Notez la capitalisation de User-Agent à partir de RFC 2616 , article 14.43).

opener = urllib2.build_opener()
opener.addheaders = [('User-Agent', 'Mozilla/5.0')]
response = opener.open('http://www.stackoverflow.com')

103voto

Paolo Points 508
headers = { 'User-Agent' : 'Mozilla/5.0' }
req = urllib2.Request('www.example.com', None, headers)
html = urllib2.urlopen(req).read()

Ou, un peu plus court :

req = urllib2.Request('www.example.com', headers={ 'User-Agent': 'Mozilla/5.0' })
html = urllib2.urlopen(req).read()

61voto

Paolo Bergantino Points 199336

Configuration de l'agent utilisateur du préféré de tous Plongez dans Python .

L'histoire courte : Vous pouvez utiliser Demande.add_header pour le faire.

Vous pouvez également transmettre les en-têtes sous forme de dictionnaire lors de la création de la demande elle-même, comme l'indiquent les documents :

en-têtes doit être un dictionnaire, et sera traité comme si add_header() a été appelé avec chaque clé et valeur comme arguments. Ceci est souvent utilisé pour "usurper" l'identité de l'utilisateur. User-Agent qui est utilisé par un navigateur pour s'identifier - certains serveurs HTTP n'autorisent que les demandes provenant de navigateurs courants, par opposition aux scripts. Par exemple, Mozilla Firefox peut s'identifier en tant que "Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11" alors que urllib2 La chaîne de caractères par défaut de l'agent de l'utilisateur est "Python-urllib/2.6" (sur Python 2.6).

14voto

Jay Dave Points 577

Pour python 3, urllib est divisé en 3 modules...

import urllib.request
req = urllib.request.Request(url="http://localhost/", headers={'User-Agent':' Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0'})
handler = urllib.request.urlopen(req)

9voto

fijiaaron Points 1064

Tout cela devrait fonctionner en théorie, mais (avec Python 2.7.2 sous Windows au moins) chaque fois que vous envoyez un en-tête User-agent personnalisé, urllib2 n'envoie pas cet en-tête. Si vous n'essayez pas d'envoyer un en-tête User-agent, il envoie l'en-tête par défaut Python / urllib2

Aucune de ces méthodes ne semble fonctionner pour ajouter l'agent utilisateur, mais elles fonctionnent pour les autres en-têtes :

opener = urllib2.build_opener(proxy)
opener.addheaders = {'User-agent':'Custom user agent'}
urllib2.install_opener(opener)

request = urllib2.Request(url, headers={'User-agent':'Custom user agent'})

request.headers['User-agent'] = 'Custom user agent'

request.add_header('User-agent', 'Custom user agent')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X