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 Theamazeer . É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 palm123 (site web personnel) . Évalué à 6.
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 Zinzin . É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 notimeu . É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 François GUÉRIN (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 doly . É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.