2 votes

urllib2 renvoie une page différente de celle du navigateur ?

J'essaie de récupérer une page (la page d'administration de mon routeur) mais l'appareil semble servir une page différente à urllib2 et à mon navigateur. quelqu'un a-t-il déjà rencontré ce problème ? Comment puis-je contourner le problème ?

voici le code que j'utilise :

>>> from BeautifulSoup import BeautifulSoup
>>> import urllib2
>>> page = urllib2.urlopen("http://192.168.1.254/index.cgi?active_page=9133&active_page_str=page_bt_home&req_mode=0&mimic_button_field=btn_tab_goto:+9133..&request_id=36590071&button_value=9133")
>>> soup = BeautifulSoup(page)
>>> soup.prettify()

(la sortie html est supprimée par markdown)

5voto

Mykola Kharechko Points 866

Avec firebug observez les en-têtes et les cookies envoyés au serveur. Ensuite, avec urllib2.Request y cookielib émuler la même demande.

EDIT : Vous pouvez également utiliser mécaniser .

1voto

Sanjay Points 156

Plus simple à utiliser que Wireshark Firebug pour voir la forme de la demande qui est faite, et ensuite émuler la même chose dans votre code.

0voto

Nicolas Raoul Points 13912

Utilice Wireshark pour voir à quoi ressemble la requête de votre navigateur, et ajoutez les parties manquantes pour que votre requête soit identique.

Pour modifier les en-têtes urllib2, essayez cette .

0voto

gnibbler Points 103484

Il est probable que cela ne fonctionne pas parce que vous n'avez pas fourni d'informations d'identification pour la page d'administration.

Utilice mécaniser pour charger la page de connexion et remplir le nom d'utilisateur et le mot de passe.

Un cookie doit alors être installé pour vous permettre de continuer à accéder à la page d'administration.

C'est beaucoup plus difficile en utilisant seulement urllib2. Vous devrez gérer les cookies vous-même si vous choisissez cette voie.

0voto

user2160507 Points 61

Dans mon cas, il s'agissait de l'un des éléments suivants :

1) Le site web devait comprendre que l'accès ne se faisait pas à partir d'un navigateur, je devais donc simuler un navigateur en python comme cela :

# Build a opener to fake a browser... Google here I come!
opener = urllib2.build_opener()
# To fake the browser
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
#Read the page
soup = BeautifulSoup(opener.open(url).read())

2) Le contenu de la page a été rempli dynamiquement par javascript. Dans ce cas, lisez le post suivant : https://stackoverflow.com/a/11460633/2160507

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