J’ai essayé plein de trucs avec lynx wget curl, mais je n’arrive à rien de propre.
Si une bonne âme pouvait jeter un oeil la dessus ce serait bien sympa.
for money in soup.findAll(‘table’)[10].findAll(‘tr’):
tds=money.findAll(‘td’)
print tds[0].string, ‘=>’, tds[1].string[/code]
Faut changer la variable url pour télécharger la page (j’ai eu des problèmes de très grosses lenteur au bout d’un moment pour télécharger leur page. J’y connais rien dis-moi si c’est d’autres parties de la pages dont tu as besoin (je pense au tableau du haut).
Salut,
Rien à dire, c’est beau et efficace!
J’ai essayé d’insérer un envoie du résultat par mail, mais python et moi ça fait trois…
J’ai donc simplement ajouté une tâche cron, et j’ai les taux directe ds ma boite mail.
Une dernière chose, puisque tu es bien disposé…
Tu pourrais aussi me sortir la date (c’est « imprimé » sur le site): Cours des devises en date du 23/11/12
C’est parfait, merci.
Tu vas nous rendre fainéants à nous mâcher le travail comme ça…
Par contre, j’avoue ne pas bien comprendre comment tu trouve les numéros de tables dans lesquelles tu va chercher les infos.
J’ai bien cherché en éditant le code de la page, mais je n’ai pas trouvé.
[code]html_file = urllib.urlopen(url) # je télécharge la page
soup = BeautifulSoup(html_file) # je donne la page à manger à beautifulSoup
tables = soup.findAll(‘table’) # je recherche toutes les balises
(récurssivement)
print tables[4].findAll(‘p’)[1].string # dans la 5ème (on compte à partir de 0) je cherche toutes les balises
et je prends ce qui est dans la seconde
for money in tables[10].findAll(‘tr’): # dans la 11ème
je cherche tout les tr (les lignes du tableau)
tds=money.findAll(‘td’) # je cherche chaque colone
print tds[0].string, ‘=>’, tds[1].string # j’affiche la première et la dernière[/code]
C’est probablement sous optimal, mais c’est rapide à coder. Pour trouver j’y suis allé en mode exploration et j’ai regardé où ce qu’il y avait dans chaque table, puis chaque
, etc (en ayant en tête que ce que je voulais était dans tel ou tel balise qui se trouvait dans une table…). Rien de bien sorcier.
Détails des problèmes, notez que TRANSILIEN ne signale PAS tous les problèmes surtout sur le RER D.
EOF
cd $DIR
NO=
for i in A B C D E ; do
PANNE=$(grep "Etat du trafic RER *$i" /tmp/tRER | sed -e 's|^.*tat du trafic RER.*">\(.*\).*$|\1|' | recode -d u8..h4)
if [ ! -z "$PANNE" ] ; then
echo $PANNE" " >> /var/www/RER.html
if [ -z $NO ] ; then
date >> PannesRER
NO=Yes
fi
echo $PANNE>> PannesRER
fi
done
cat >> /var/www/RER.html <<EOF
EOF
[/code]
[code]#!/bin/sh
echo Content-type: text/html
echo ""
PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/usr/local/mupad/share/bin
if [ -z $1 ] ; then
NUM=7
else
NUM=$1
fi
cat <<EOF
EOF
USER=francois wget -q "http://www.transilien.com/gare/pagegare/filterListeTrains?codeTR3A=MFA&destination=PARIS+GARE+DE+LYON&ligne=&nomGare=MAISONS+ALFORT+ALFORTVILLE&x=38&y=10" -O - | html2text -nobs -ascii| grep "D]" | grep -v "\[D\]" | (while read LIGNE ; do
if (echo $LIGNE | grep -q -v "Voir") ; then
DEST=$DEST" "$(echo $LIGNE | sed -e 's/^.*D] *//' | sed -e 's/^.*\[RER *//')
else
TRAIN=$(echo $LIGNE | sed -e '1,$s/.*D\] *//' | sed -e'1,$s/\[RER *//' | sed -e '1,$s|^ *\([A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9]\) *\([^ ]*\) *\(.*\) *Voir.*\(..\)$|\1|')
HORAIRE=$(echo $LIGNE | sed -e '1,$s/.*D\] *//' | sed -e'1,$s/\[RER *//' | sed -e '1,$s|^ *\([A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9]\) *\([^ ]*\) *\(.*\) *Voir.*\(..\)$|\2|')
DEST=$DEST" "$(echo $LIGNE | sed -e '1,$s/.*D\] *//' | sed -e'1,$s/\[RER *//' | sed -e '1,$s|^ *\([A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9]\) *\([^ ]*\) *\(.*\) *Voir.*\(..\)$|\3|')
VOIE=$(echo $LIGNE | sed -e '1,$s/.*D\] *//' | sed -e'1,$s/\[RER *//' | sed -e '1,$s|^ *\([A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9]\) *\([^ ]*\) *\(.*\) *Voir.*\(..\)$|\4|')
fi
if (echo $LIGNE | grep -q "^D]") ; then
echo "
Mon dieux, ne me parle pas du RER, pas aujourd’hui. Entre les deux jours de MiniDebConf j’ai voulu aller à Versaille voir mon neveu, manque de bol ce week end pas RER pour Porchefontaine et personne à la RATP capable de me dire comment me débrouiller… Au final 2h aller 2h retour. Les transports en commun franciliens c’est un monde de fou.
Enfin bref pour mieux comparer voici une version python/BeautifulSoup de ton dernier script :
#!/usr/bin/python
from BeautifulSoup import BeautifulSoup
import urllib
print 'Content-type: text/html'
print
url='http://www.transilien.com/gare/pagegare/filterListeTrains?codeTR3A=MFA&destination=PARIS+GARE+DE+LYON&ligne=&nomGare=MAISONS+ALFORT+ALFORTVILLE&x=38&y=10'
html_file = urllib.urlopen(url)
soup = BeautifulSoup(html_file)
print """<html>
<body>
<table>"""
main_table = soup.findAll('table', 'etat_trafic')[0]
for ligne in main_table.findAll('tr')[1:-1]:
tds=[ td.string.strip() for td in ligne.findAll('td') if td.string != None]
print '<tr><td>',tds[0],'</td><td>',tds[1],'</td><td>',tds[2],'</td><td>',tds[3],'</td></tr>'
print """</table>
</body>
</html>"""
J’ai beau aimer les expressions régulières je préfère la version python
BeautifullSoup est une référence dans le domaine, j’ai juste profité de l’occasion pour l’essayer (et elle vaut sa réputation). Je m’éttais dis que je regarderais ce qu’il y a en perl, mais je ne l’ai pas fait avant que tu en parle. Sur cpan j’ai pas vu de module qui sort vraiment du lot, j’ai l’impression qu’il n’y a pas eu l’émergence d’un véritable équivalent (mais il faudrait que je regarde de plus près).
[quote=“MisterFreez”]Une petite explication de texte ?
…
C’est probablement sous optimal, mais c’est rapide à coder. Pour trouver j’y suis allé en mode exploration et j’ai regardé où ce qu’il y avait dans chaque table, puis chaque
, etc (en ayant en tête que ce que je voulais était dans tel ou tel balise qui se trouvait dans une table…). Rien de bien sorcier.[/quote]
Merci pour l’explication, j’avais déjà un peu cherché du coup.
J’ai quand même encore une question, pour trouver le n° de table, tu compte chaque
?
Je pourrais faire un srcipt avec juste ça pour trouver toutes les tables (sans avoir à ouvrir le html et compter…) ?tables = soup.findAll('table')