Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

importer une variable d'une page internet

4 réponses
Avatar
huitredelombre
Bonjour, bonjour, tout est dans le titre, par exemple:

En tant que président de la republique, j'aimerais pouvoir m'assurer rapidement que le compteur du site :http://www.planetoscope.com/Animaux/476-kilos-de-dejections-canines-produits-a-paris.html n'est pas dépasser les 600000.

Pour cela, je suis bien obligé de mettre le compteur en variable, mais je ne sais pas comment m'y prendre :(

Je suppose que c'est une question fréquemment posée, pourtant j'ai bien du chercher 3h heures sur internet sans trouver de réponse (faut dire que je ne sais pas quel mot clef technique du programmeur utiliser)


Je precise que je voudrais un truc générale permettant d'intégré en variable un texte ciblé d'une page internet ( parce qu'en vrai je suis pas président de la république et je m'en fiche des déjections canine de Paris)
Merci

4 réponses

Avatar
Laurent Pointal
huitredelombre wrote:

Bonjour, bonjour, tout est dans le titre, par exemple:

En tant que président de la republique, j'aimerais pouvoir m'assurer
rapidement que le compteur du site
:http://www.planetoscope.com/Animaux/476-kilos-de-dejections-canines-produits-a-paris.html
n'est pas dépasser les 600000.

Pour cela, je suis bien obligé de mettre le compteur en variable, mais je
ne sais pas comment m'y prendre :(

Je suppose que c'est une question fréquemment posée, pourtant j'ai bien du
chercher 3h heures sur internet sans trouver de réponse (faut dire que je
ne sais pas quel mot clef technique du programmeur utiliser)


Je precise que je voudrais un truc générale permettant d'intégré en
variable un texte ciblé d'une page internet ( parce qu'en vrai je suis pas
président de la république et je m'en fiche des déjections canine de
Paris) Merci



Pour le cas particulier de ta page, les compteurs sont calculés en fonction
du temps… il suffit donc de reprendre l'algorithme javascript :-)

D'une façon plus générale, il faut jouer avec urllib (urllib2) afin de
télécharger le contenu du document HTML, puis avec soit un parser xml, soit
beautifulsoup, pour récupérer le contenu qui t'intéresse.

http://sametmax.com/parser-du-html-avec-beautifulsoup/

http://apprendre-python.com/page-beautifulsoup-html-parser-python-library-xml

https://docs.python.org/3/library/urllib.html

…sauf que dans ton cas, ce contenu étant rendu via JavaScript, il faudrait
faire tourner un moteur JavaScript qui mette à jour le document avant
d'aller récupérer ce qui t'intéresse. Là je ne connais pas.
Peut-être en pilotant un browser web… ou encore en ayant un petit script
JavaScript qui fasse l'export du DOM une fois celui-ci peuplé par le
JavaScript… faut creuser.


A+
Laurent.
Avatar
huitredelombre
Le mardi 27 Janvier 2015 à 17:44 par huitredelombre :
Bonjour, bonjour, tout est dans le titre, par exemple:

En tant que président de la republique, j'aimerais pouvoir m'assurer
rapidement que le compteur du site
:http://www.planetoscope.com/Animaux/476-kilos-de-dejections-canines-produits-a-paris.html
n'est pas dépasser les 600000.

Pour cela, je suis bien obligé de mettre le compteur en variable, mais
je ne sais pas comment m'y prendre :(

Je suppose que c'est une question fréquemment posée, pourtant
j'ai bien du chercher 3h heures sur internet sans trouver de réponse
(faut dire que je ne sais pas quel mot clef technique du programmeur utiliser)


Je precise que je voudrais un truc générale permettant
d'intégré en variable un texte ciblé d'une page internet (
parce qu'en vrai je suis pas président de la république et je
m'en fiche des déjections canine de Paris)
Merci


Je te remercie de ta réponse, je regarde tes liens, et je mène mes recherches, et je reposterai une question si j bloque plus tard, Merci encore.
Avatar
6nicozhan9
On Tuesday, January 27, 2015 at 5:44:22 PM UTC+1, huitredelombre wrote:
Bonjour, bonjour, tout est dans le titre, par exemple:

En tant que président de la republique, j'aimerais pouvoir m'assurer ra pidement
que le compteur du site
:http://www.planetoscope.com/Animaux/476-kilos-de-dejections-canines-prod uits-a-paris.html
n'est pas dépasser les 600000.

Pour cela, je suis bien obligé de mettre le compteur en variable, mais je ne
sais pas comment m'y prendre :(

Je suppose que c'est une question fréquemment posée, pourtant j'ai bi en du
chercher 3h heures sur internet sans trouver de réponse (faut dire que je ne
sais pas quel mot clef technique du programmeur utiliser)


Je precise que je voudrais un truc générale permettant d'intégré en variable un
texte ciblé d'une page internet ( parce qu'en vrai je suis pas présid ent de la
république et je m'en fiche des déjections canine de Paris)
Merci



Bonsoir, bonjour,

Je viens de tomber un peu par hasard et par curiosité sur cette page. J'a i succinctement cherché une solution, mais c'est loin d'être évident ce que tu souhaites faire.

Si tu veux récupérer le contenu d'une variable gérée avec du JavaSc ript, dans ton exemple, j'aurai simplement pris le calcul suivant :
nombre de déjections par seconde = 5850*1000/(365*24*3600)

C'est un exemple je sais, mais cela t'évite de te prendre la tête à v ouloir récupérer le contenu d'une page HTML.

Après il y a des modules disponibles comme te l'a proposé Laurent, il y en a une autre notamment : HTMLParser

Par ailleurs, rien ne t'empêche de parser manuellement, je trouve ça pl us flexible (meilleur en terme de performance, car aucune appelle de lib ex térieure pour parser le contenu)

Un exemple simple, imaginons qu'on veuille récupérer le titre du jour d 'un site nommé http://monsite.fr dont le code source de la page serait :
<!doctype>
<html><head></head>
<body></body>
<div><p id="bibi">Koukou</p></div>
<div><p id="titre_du_jour">Plein de neiges aujourd'hui !</p></div>
<div><p id="bobo">blablabla</p></div>
</html>

Là, on voit que le contenu qu'on souhaite récupérer, est comprise ent re les balises <p> </p> ayant pour ID, "titre_du_jour".

Il suffirait de faire :

import urllib2 as get
data = get.urlopen('http://monsite.fr').read()

data = data.split('id="titre_du_jour">')[1].split('</p>')[0]

La fonction split() permet découper la chaîne de caractère data (qui est notre contenu que nous avons récupéré via urllib2). Je lui demand e de découper le texte en deux morceaux. Le premier avant le 'id="titre _du_jour">' et le seconde qui se trouve après. Ensuite je dis que je ne s ouhaite récupérer que le second morceau en rajoutant l'indice [1], puis j'applique un autre split, qui effectue une découpe à chaque fois qu'i l rencontre un '</p>'. Et dès la première découpe, on obtient notre f ameux titre, j'indique à Python de ne récupérer que cette partie là en rajoutant l'indice [0].

Voilà, c'est fait un long pavé. En espérant que ça puisse t'aider.
Avatar
Pierre Maurette
huitredelombre :
Bonjour, bonjour, tout est dans le titre, par exemple:

En tant que président de la republique, j'aimerais pouvoir m'assurer
rapidement que le compteur du site
http://www.planetoscope.com/Animaux/476-kilos-de-dejections-canines-produits-a-paris.html


n'est pas dépasser les 600000.

Pour cela, je suis bien obligé de mettre le compteur en variable, mais je ne
sais pas comment m'y prendre :(

Je suppose que c'est une question fréquemment posée, pourtant j'ai bien du
chercher 3h heures sur internet sans trouver de réponse (faut dire que je ne
sais pas quel mot clef technique du programmeur utiliser)


Je precise que je voudrais un truc générale permettant d'intégré en variable
un texte ciblé d'une page internet ( parce qu'en vrai je suis pas président
de la république et je m'en fiche des déjections canine de Paris)



Oublions la possible inutilité de la manip, la possibilité d'utiliser
le code JS, voire le fait qu'il s'agit d'un widget JS téléchargeable.
Et prenons la question comme un *exercice*, à savoir récupérer à partir
du site /planetoscope.com/ la valeur numérique en question la plus
actuelle.
J'ai fait un test à partir de ce qui est installé sur ma machine, en
Python 3.
La récupération du code HTML est aisée, tout autant que celle de la
valeur dans ce code:

from urllib import request as urllib2
from bs4 import BeautifulSoup

html =
urllib2.urlopen(r'http://www.planetoscope.com/Animaux/476-kilos-de-dejections-canines-produits-a-paris.html').read()
soupe = BeautifulSoup(html)
print(soupe("div", id="afficherStat476")[0].string)

Vous avez dans un premier temps trouvé le tag contenant, soit en lisant
le code html, soit en faisant:

# même chose
print(soupe.find('div', text='Chargement ...'))

Malheureusement, le HTML provenant de urllib/urllib2 est "mort". JS ne
tournant pas, vous n'aurez rien d'autre que "Chargement ..." dans votre
formulaire. Bien entendu aucune temporisation ne fera tourner le JS, ce
n'est pas une solution. Il faut donc disposer de code "vivant", c'est à
dire du code HTML fourni par le moteur d'un navigateur. Il est
certainement possible de se connecter à Firefox, mais je n'ai jamais
pratiqué. En revanche, j'ai un moteur WebKit dans PyQT4 (PySide le fait
également). On peut utilise le machin sans GUI, mais j'ai préféré
l'intégrer dans une interface minimale. Je vous fais grâce du fichier
généré par Designer et de la triperie, voici juste quelques lignes
significatives, je vous envoie les deux fichiers si ça vous intéresse.
Je ne sais pas comment vous comptez consommer le résultat, pour le test
j'ai juste affiché la valeur (int) la plus actuelle dans un lineEdit.
On charge un QtWebKit.QWebView par la bonne URL, ensuite on lit et
traite la valeur d'abord dès qu'elle est valide (fin du chargement de
la page) puis ensuite toutes les 3 ou 5 secondes (QTimer). Notez que je
pourrais n'utiliser que le timer, c'est juste un peu moins élégant
(gasp!), et que je n'ai pas trouvé de signal synchronisant les fins de
rafraichissement. Ça peut donner:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

__author__ = 'Pierre Maurette'
__company__ = 'La balise en carton'

import sys
print('Bonjour...n%s' % sys.version)

from bs4 import BeautifulSoup
from PyQt4 import QtGui, QtCore, QtSql, QtWebKit
from PyQt4.QtCore import QT_VERSION_STR, QTimer
from PyQt4.Qt import PYQT_VERSION_STR, SIGNAL
import signal

sys.path.insert(0, '.qtStuff')
import scrap

class MainWindow(QtGui.QMainWindow, scrap.Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
self.url =
r'http://www.planetoscope.com/Animaux/476-kilos-de-dejections-canines-produits-a-paris.html'
self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
self.setWindowTitle(u'Python: {0:d}.{1:d}.{2:d} QT: {3:s}
PYQT: {4:s}'.format(*sys.version_info[:3] + (QT_VERSION_STR,
PYQT_VERSION_STR)))
signal.signal( signal.SIGINT, signal.SIG_DFL )
self.webView.connect(self.webView, SIGNAL( 'loadFinished(bool)'
), self.get_7_put_1_de_valeur)
self.timer = QTimer()
self.timer.timeout.connect(self.get_7_put_1_de_valeur)
self.goBtn.clicked.connect(self.zyva)

def zyva(self):
self.webView.load(QtCore.QUrl(self.url))

def get_7_put_1_de_valeur(self):
try:

self.lineEdit.setText(str(int(BeautifulSoup(self.webView.page().mainFrame().toHtml())("div",
id="afficherStat476")[0].string.replace(' ', ''))))
except ValueError or IndexError:
pass
self.timer.start(3000)

if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
mw = MainWindow()
mw.show()
app.exec_()

On peut n'utiliser que le timer, on fait alors l'économie de la
tuyauterie /signal/:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

__author__ = 'Pierre Maurette'
__company__ = 'La balise en carton'

import sys
print('Bonjour...n%s' % sys.version)

from bs4 import BeautifulSoup
from PyQt4 import QtGui, QtCore, QtSql, QtWebKit
from PyQt4.QtCore import QT_VERSION_STR, QTimer
from PyQt4.Qt import PYQT_VERSION_STR, SIGNAL

sys.path.insert(0, '.qtStuff')
import scrap

class MainWindow(QtGui.QMainWindow, scrap.Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
self.url =
r'http://www.planetoscope.com/Animaux/476-kilos-de-dejections-canines-produits-a-paris.html'
self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
self.setWindowTitle(u'Python: {0:d}.{1:d}.{2:d} QT: {3:s}
PYQT: {4:s}'.format(*sys.version_info[:3] + (QT_VERSION_STR,
PYQT_VERSION_STR)))
self.timer = QTimer()
self.timer.timeout.connect(self.get_7_put_1_de_valeur)
self.goBtn.clicked.connect(self.zyva)

def zyva(self):
self.webView.load(QtCore.QUrl(self.url))
self.timer.start(5000)

def get_7_put_1_de_valeur(self):
try:

self.lineEdit.setText(str(int(BeautifulSoup(self.webView.page().mainFrame().toHtml())("div",
id="afficherStat476")[0].string.replace(' ', ''))))
except ValueError or IndexError:
pass

if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
mw = MainWindow()
mw.show()
app.exec_()

--
Pierre Maurette