2017-03-02 1 views
1

Je suis en train d'explorer certaines pages Web et d'analyser certaines données, mais l'un des sites semble bloquer mes requêtes. La version du code utilisant Python 3 avec urllib.requests fonctionne bien. Mon problème est que j'ai besoin d'utiliser Python 2.7, et je ne peux pas obtenir de réponse en utilisant urllib2Comment puis-je recréer une urllib.requests dans Python 2.7?

Ces demandes ne devraient-elles pas être identiques?

Python version 3:

def fetch_title(url): 
    req = urllib.request.Request(
     url, 
     data=None, 
     headers={ 
      'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36' 
     } 
    ) 
    html = urllib.request.urlopen(req).read().encode('unicode-escape').decode('ascii') 

    return html 

Python version 2.7:

import urllib2 

opener = urllib2.build_opener() 
opener.addheaders = [(
      'User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36' 
     )] 
response = opener.open('http://website.com') 

print response.read() 
+0

je reçois une réponse des deux versions, mais je reçois la pleine page de contenu avec urllib.requests et je reçois une version bloquée du site avec la version urllib2 –

Répondre

1

Le code suivant devrait fonctionner essentiellement avec Python 2.7, vous pouvez créer un dictionnaire avec vos en-têtes souhaités et formater votre demande d'une manière qui fonctionnera correctement avec urllib2.urlopen en utilisant urllib2.Request.

import urllib2 

def fetch_title(url): 
    my_headers = { 
     "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36" 
    } 
    return urllib2.urlopen(urllib2.Request(url, headers=my_headers)).read() 
+0

En général, les meilleures réponses donnent un aperçu à * pourquoi * ou * comment * quelque chose fonctionne. Les réponses sont bien mais vous pouvez faire beaucoup pour éduquer avec une petite explication. Une sorte de chose «Enseigner à un homme à pêcher». –

+0

Salut, merci d'être revenu et d'avoir amélioré votre réponse. Avoir 10 points :) –