Python suivre les redirections et puis de télécharger la page?
J'ai le script python ci et il fonctionne à merveille.
import urllib2
url = 'http://abc.com' # write the url here
usock = urllib2.urlopen(url)
data = usock.read()
usock.close()
print data
cependant, certains de l'URL je donne, il peut rediriger 2 fois ou plus. Comment puis-je avoir python attendre pour les redirections pour terminer avant de charger les données.
Par exemple, lorsque vous utilisez le code ci-dessus avec
http://www.google.com/search?hl=en&q=KEYWORD&btnI=1
qui est le equvilant de frapper l'im lucky bouton sur une recherche google, j'obtiens:
>>> url = 'http://www.google.com/search?hl=en&q=KEYWORD&btnI=1'
>>> usick = urllib2.urlopen(url)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 400, in open
response = meth(req, response)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 513, in http_response
'http', request, response, code, msg, hdrs)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 438, in error
return self._call_chain(*args)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 372, in _call_chain
result = func(*args)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 521, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 403: Forbidden
>>>
J'ai essayé de le (url, des données, des temps d'arrêt) cependant, je ne sais pas quoi y mettre.
EDIT:
J'ai effectivement trouvé si je n'ai pas de redirection et de l'utilisation de l'en-tête du premier lien, je peux récupérer l'emplacement de la prochaine rediriger et de l'utiliser comme mon dernier lien
- êtes-vous familier avec
HTTPRedirectHandler
- Je n'étais pas. Juste googlé. Je peux voir comment faire ne PAS suivre. Cependant, je ne peux pas le forcer À suivre
- Je sais, ça fait un moment, mais pouvez-vous creuser profondément dans la mémoire de voûte et de me dire comment vous avez résolu ce problème? merci!
Vous devez vous connecter pour publier un commentaire.
Vous pourriez être mieux avec les Demandes de la bibliothèque qui a la meilleure Api pour contrôler la redirection de manutention:
http://docs.python-requests.org/en/latest/user/quickstart/#redirection-and-history
Demandes:
http://pypi.python.org/pypi/requests/ (urllib de remplacement pour les humains)
Utilisation
requests
que l'autre réponse unis, voici un exemple. La redirection sera enr.url
. Dans l'exemple ci-dessous lehttp
est redirigé vershttps
Pour la TÊTE:
Pour OBTENIR:
Note de TÊTE, vous devez spécifier
allow_redirects
mais si vous n'en avez pas, vous pouvez l'obtenir dans les en-têtes, mais ce n'est pas conseillé.À téléchargement de la page, vous devez OBTENIR, vous pouvez alors accéder à la page en utilisant soit
r.content
Faire, vous devez absolument le faire de cette façon? Comment sur l'utilisation de quelque chose comme sergé ( http://twill.idyll.org/) - fait ce que vous voulez faire est très facile (et c'est Python).