Forum Programmation.python script python impossible de ce co à un site

Posté par  . Licence CC By‑SA.
Étiquettes :
0
30
mar.
2016

Bonjour à tous

je débute en python, mais pour un stage je dois faire un petit script qui récupère des info sur une page web, les restructures et les affiches selon le besoin.
Jusque là pas de soucis, le problème que je rencontre c'est que la page nécessite une identification et comme le script et destiné à plusieurs pc je ne dois pas avoir besoin d'installer de librairies pour le faire fonctionner.

j'ai fais quelque chose que l'on peut sûrement optimiser mais impossible de récupérer les données, je m'explique :
Si je demande un affichage brut de la page je vois qu'il me retourne l'url suivi de :443
Pourtant dans les logs du site il indique logged in.

Je suppose qu'il y a un soucis avec les cookies ? Genre il ce connecte mais comme il gère mal les cookies au changement de page il n'est plus identifié…
Ou alors j'ai vraiment rien compris ><

Du coup je vous donne la partie connexion et test d'affichage:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import re, cookielib, urllib, urllib2

tab0=[] #tableau de travail
i=0 #compteur


username = 'UserTest'
password = 'MdpTest00'



# On active le support des cookies pour urllib2
cookiejar = cookielib.CookieJar()
urlOpener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))

# On envoie login/password au site qui nous renvoie un cookie de session
values = {'username':username, 'password':password }
data = urllib.urlencode(values)
request = urllib2.Request("https://network.societé.org/", data)
url = urlOpener.open(request)  # Notre cookiejar reçoit automatiquement les cookies
print url

# Test récupérartion des données
htmlSource = urllib.urlopen("https://network.societé.org/devices/").read(100)#900000000)
url = urlOpener.open(request)
basesList = re.findall('<base .*? />',htmlSource)
print htmlSource

Si vous avez des idées je vous en serai reconnaissant :)

  • # Port 443

    Posté par  . Évalué à 2.

    Salut 443 est le port tcp utilisé pour le https ta page est sécurisé, regarde la manière dont tu te connectes à cette adresse ou bien la fonction request n'est peut être pas suffisante.
    Pour rappel pour lire les informations d'une page Web en connexion normal :import urllib
    page=urllib.urlopen('http://python.org')
    strpage=page.read()

  • # outils modernes

    Posté par  (site web personnel) . Évalué à 6.

    je ne dois pas avoir besoin d'installer de librairies pour le faire fonctionner.

    Oui enfin, il y a quand même des outils comme BeautifulSoup et Requests qui font tout ça avec très peu de lignes

    http://www.crummy.com/software/BeautifulSoup/
    quand je vois

    basesList = re.findall('<base .*? />',htmlSource)
    je pense à la phrase "on ne parse pas du HTML avec des expressions régulières !"

    http://docs.python-requests.org/en/master/

    regarde https://gist.github.com/kennethreitz/973705
    les 2 codes font la même chose

    ウィズコロナ

  • # rep

    Posté par  . Évalué à 1.

    @Theamazeer oui c'est une idée je vais voir ce que je trouve à ce sujet

    @palm123 je suis d'accord avec toi mais ce n'est pas moi qui fixe le "cahier des charges" :/
    effectivement il y a une belle différence entre les deux codes :) je testerai sûrement après pour moi même.

    • [^] # Re: rep

      Posté par  (site web personnel) . Évalué à 4. Dernière modification le 30 mars 2016 à 15:17.

      Un stage où l'on t'interdit d'utiliser des bibliothèques libres pour faire ton job mieux, de façon plus efficace et avec un code plus simple ? Faut m'expliquer là … Ou alors ils ne veulent pas de dépendances, mais là ça devient galère.

      • [^] # Re: rep

        Posté par  (Mastodon) . Évalué à 4.

        Pas de dépendances ? virtualenv ! Tu peux n'installer que celle là si elle n'est pas sur le/les serveurs concernés. Ensuite tu crées un venv dédié à ton script, et tu installes des dépendances dont tu as besoin dans ce venv à coup de :

        $ pip install bs4
        $ pip install requests

        Un coup de requests et bs4, et le tour est joué. Tu peux même utiliser des cookies (pour la session) avec requests, avec le https géré nativement en prime… ! et je n'ai jamais rien trouvé de mieux que bs pour récupérer des données dans une page HTML.

        Tu peux aller jusqu'à faire un script à base de fabric pour déployer ton application sur le / les serveurs concernés, à travers ssh. fabric ne s'installe que sur le client, et te permet d'effectuer des opérations côté serveur de façon transparente.

        Bon courage !

  • # Il y a toujours une solution

    Posté par  . Évalué à 0.

    Bonjour essaies toutes ces suggestions et si tu ne trouves aucune issue à ton problème, je te suggère de trouver des tutoriels sur internet. Ils pourront bien te donner des pistes et aussi des solutions. Ainsi, tu peux apprendre à maitriser le langage Python et même le C en général.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.