2010-07-09 4 views
2

J'essaye de gratter une page (la page d'admin de mon routeur) mais l'appareil semble servir une page différente à urllib2 qu'à mon navigateur. Quelqu'un a-t-il déjà trouvé ça? Comment puis-je le contourner?urllib2 renvoie une page différente que le navigateur fait?

ce code 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() 

(sortie html est éliminé par démarquage)

+1

P r o v e i t. –

Répondre

0

Utilisez Wireshark pour voir ce que la demande de votre navigateur ressemble, et ajoutez les pièces manquantes afin que votre La requête est la même.

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

1

Plus simple que Wireshark peut être d'utiliser Firebug pour voir la forme de la demande en cours, puis émuler la même chose dans votre code.

5

Avec firebug surveillez les en-têtes et les cookies envoyés au serveur. Puis avec urllib2.Request et cookielib émuler la même demande. EDIT: Vous pouvez également utiliser mechanize.

+1

Mechanize est une jolie bibliothèque! – Zolomon

0

Probablement cela ne fonctionne pas parce que vous n'avez pas fourni les informations d'identification pour la page d'administration

Utilisez mechanize pour charger la page de connexion et remplissez le nom d'utilisateur/mot de passe.

Ensuite, vous devriez avoir un ensemble de cookies pour vous permettre de continuer à la page d'administration.

Il est beaucoup plus difficile d'utiliser simplement urllib2. Vous devrez gérer vous-même les cookies si vous choisissez de vous en tenir à cet itinéraire.

0

dans mon cas, il a été l'un des éléments suivants:

1) Le site vould compris que l'accès était pas d'un navigateur, donc je dû simuler un navigateur en python comme ça:

# 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, lire le message suivant: https://stackoverflow.com/a/11460633/2160507

Questions connexes