begin process at 2008 05 15 14:40:50
1 172 680 membres
292 nouveaux aujourd'hui
13 967 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

WWWEXTRACT : RÉCUPÉRATION D'INFORMATIONS D'UNE PAGE HTML


Information sur la source

Catégorie :Réseau & internet Classé sous : pygtk, gtk, pages web, informations web, urllib Niveau : Initié Date de création : 09/05/2008 Date de mise à jour : 13/05/2008 16:28:33 Vu : 516

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

Description

Salut à tous,

J'ai codé ce petit programme pour récupérer diverses informations sur des pages Web.
Il est fonctionnel, mais il reste beaucoup de travail pour bien compter les informations, et quelques adaptations à faire.
J'ai utilisé PyGTK pour faire l'interface, un excellent bind de GTK pour Python.
La source a été developpée sous Linux, mais elle reste fonctionnelle sous Windows & co.
Voilà, rien d'autre à ajouter.

Source

  • #!/usr/bin/python
  • #-*- coding: utf-8 -*-
  • import urllib
  • import string
  • import re
  • from time import strftime
  • import os
  • try:
  • import gtk
  • except:
  • print "Ce programme ne peut fonctionner sans PyGTK, veuillez le télécharger et l'installer"
  • def Recuperation(arg): ### Fonction qui va récupérer les informations ###
  • urlRecue = urlEntry.get_text()
  • if urlRecue != "":
  • urlCorrect = urlRecue[0:7]
  • if urlCorrect == "http://": ### Ajout du "http://" si besoin
  • urlRecue2 = urlRecue
  • else:
  • urlRecue2 = "http://"+urlRecue
  • Url = urllib.urlopen(urlRecue2)
  • if Url != 0:
  • strPage = Url.read()
  • titrePage = re.findall('<title>+[^\"]+</title>', strPage) # Regex contenant le titre de page
  • titrePage = (titrePage[0])
  • titrePage = titrePage[7:len(titrePage)-8] # Commencer à partir de 7 (= <title>) et allez jusqu'à taille "titre" -8 (8 = </title>)
  • nbrImage = strPage.count('<img ') #Nombre d'image dans la page
  • nbrJsInterne = strPage.count('<script') #Js INTERNE a la page
  • if nbrJsInterne > 0:
  • contientJsInterne = "Oui"
  • else:
  • contientJsInterne = "Non"
  • nbrLiens = strPage.count('<a ') # Nombre de liens dans la page
  • typePage = strPage.count('//W3C//DTD XHTML 1.0')
  • typePage2 = strPage.count('HTML 4.01 Transitional')
  • listeLiens = re.findall('<a href=(.*?)>.*?</a>', strPage) # Regex contenant la cible des liens de la page
  • for Lien in listeLiens:
  • Liens = Lien # Contient les liens de la page
  • ### Fonctionnalitée pas encore implantée ;-) ###
  • if typePage > 0:
  • typePage = "XHTML"
  • elif typePage2 > 0:
  • typePage = "HTML"
  • else:
  • typePage = "Doctype non valide"
  • Informations = "Type de document : "+str(typePage)+"\nNom de page : "+titrePage+"\nNombre d'images : "+str(nbrImage)+"\nContient du Js interne à la page : "+contientJsInterne+"\nNombres de liens : "+str(nbrLiens)
  • txtBuffer = txtViewInfos.get_buffer()
  • txtBuffer.set_text(Informations)
  • activerLog = rdioEnregistrerLog.get_active()
  • if activerLog == True:
  • try: ### Si le log existe, on le supprime pour en écrire un nouveau
  • os.remove('log.txt') # Supprimer le log precedant
  • except: ### Si le log n'existe pas -> gérer erreur
  • pass
  • fichierLog = open('log.txt','a')
  • fichierLog.write('Enregistré le '+strftime("%d/%m/%Y")+' à '+strftime('%H:%M:%S'))
  • fichierLog.write('\n'+Informations)
  • fichierLog.close()
  • else:
  • ### Afficher boite de dialogue "error"
  • dialogError = gtk.MessageDialog(pWindow, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR , gtk.BUTTONS_OK, "Merçi de taper une adresse valide")
  • dialogError.run()
  • dialogError.destroy()
  • ### Création de l'interface graphique ###
  • pWindow = gtk.Window(gtk.WINDOW_TOPLEVEL)
  • pWindow.set_title("WwWExtract")
  • pWindow.set_default_size(247, 227)
  • pWindow.set_position(gtk.WIN_POS_CENTER)
  • pWindow.connect("destroy", gtk.main_quit)
  • ## --------------------------------------------------- ##
  • pTable = gtk.Table(6, 2, True) ### Table principale contenant tout les widgets ###
  • pWindow.add(pTable)
  • labelAdresse = gtk.Label("Veuillez taper l'adresse de la page : ")
  • urlEntry = gtk.Entry()
  • btnRecuperer = gtk.Button("Récupérer les infos")
  • rdioEnregistrerLog = gtk.CheckButton(label="Enregistrer log (appelé log.txt)")
  • txtViewInfos = gtk.TextView()
  • ## --------------------------------------------------- ##
  • pTable.attach_defaults(labelAdresse, 0, 3, 0, 1)
  • pTable.attach(urlEntry, 0, 3, 0, 3, gtk.EXPAND | gtk.FILL, gtk.EXPAND, 17, 0)
  • pTable.attach(rdioEnregistrerLog, 0, 3, 0, 7, gtk.EXPAND, gtk.EXPAND, 0, 0)
  • pTable.attach(btnRecuperer, 1, 2, 0, 5, gtk.EXPAND, gtk.EXPAND, 0, 0)
  • pTable.attach(txtViewInfos, 0, 3, 4, 7, gtk.EXPAND | gtk.FILL, gtk.EXPAND | gtk.FILL, 8, 8)
  • btnRecuperer.connect("clicked", Recuperation)
  • pWindow.show_all()
  • gtk.main()
#!/usr/bin/python
#-*- coding: utf-8 -*- 
import urllib
import string
import re
from time import strftime
import os
try:
	import gtk
except:
	print "Ce programme ne peut fonctionner sans PyGTK, veuillez le télécharger et l'installer"

def Recuperation(arg): ### Fonction qui va récupérer les informations ###
	urlRecue = urlEntry.get_text()
	if urlRecue != "":
		urlCorrect = urlRecue[0:7]
		if urlCorrect == "http://": ### Ajout du "http://" si besoin
			urlRecue2 = urlRecue
		else:
			urlRecue2 = "http://"+urlRecue
		Url = urllib.urlopen(urlRecue2)
		if Url != 0:
			strPage = Url.read()
			titrePage = re.findall('<title>+[^\"]+</title>', strPage) # Regex contenant le titre de page
			titrePage = (titrePage[0])
			titrePage = titrePage[7:len(titrePage)-8] # Commencer à partir de 7 (= <title>) et allez jusqu'à taille "titre" -8 (8 = </title>)
			nbrImage = strPage.count('<img ') #Nombre d'image dans la page
			nbrJsInterne = strPage.count('<script') #Js INTERNE a la page
			if nbrJsInterne > 0:
				contientJsInterne = "Oui"
			else:
				contientJsInterne = "Non"
			nbrLiens = strPage.count('<a ') # Nombre de liens dans la page
			typePage = strPage.count('//W3C//DTD XHTML 1.0')
			typePage2 = strPage.count('HTML 4.01 Transitional')
			listeLiens = re.findall('<a href=(.*?)>.*?</a>', strPage) # Regex contenant la cible des liens de la page
			for Lien in listeLiens:
				Liens = Lien # Contient les liens de la page
				### Fonctionnalitée pas encore implantée ;-) ###
			if typePage > 0:
				typePage = "XHTML"
			elif typePage2 > 0:
				typePage = "HTML"
			else:
				typePage = "Doctype non valide"
			Informations =  "Type de document : "+str(typePage)+"\nNom de page : "+titrePage+"\nNombre d'images : "+str(nbrImage)+"\nContient du Js interne à la page : "+contientJsInterne+"\nNombres de liens : "+str(nbrLiens)
			txtBuffer = txtViewInfos.get_buffer()
			txtBuffer.set_text(Informations)
			activerLog = rdioEnregistrerLog.get_active()
			if activerLog == True:
				try: ### Si le log existe, on le supprime pour en écrire un nouveau
					os.remove('log.txt') # Supprimer le log precedant
				except: ### Si le log n'existe pas -> gérer erreur
					pass
				fichierLog = open('log.txt','a')
				fichierLog.write('Enregistré le '+strftime("%d/%m/%Y")+' à '+strftime('%H:%M:%S'))
				fichierLog.write('\n'+Informations)
				fichierLog.close()
	else:
		### Afficher boite de dialogue "error"
		dialogError = gtk.MessageDialog(pWindow, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR , gtk.BUTTONS_OK, "Merçi de taper une adresse valide")
		dialogError.run()
		dialogError.destroy()
### Création de l'interface graphique ###
pWindow = gtk.Window(gtk.WINDOW_TOPLEVEL)
pWindow.set_title("WwWExtract")
pWindow.set_default_size(247, 227)
pWindow.set_position(gtk.WIN_POS_CENTER)
pWindow.connect("destroy", gtk.main_quit)
## --------------------------------------------------- ##
pTable = gtk.Table(6, 2, True) ### Table principale contenant tout les widgets ###
pWindow.add(pTable)
labelAdresse = gtk.Label("Veuillez taper l'adresse de la page : ")
urlEntry = gtk.Entry()
btnRecuperer = gtk.Button("Récupérer les infos")
rdioEnregistrerLog = gtk.CheckButton(label="Enregistrer log (appelé log.txt)")
txtViewInfos = gtk.TextView()
## --------------------------------------------------- ##
pTable.attach_defaults(labelAdresse, 0, 3, 0, 1)
pTable.attach(urlEntry, 0, 3, 0, 3, gtk.EXPAND | gtk.FILL, gtk.EXPAND, 17, 0)
pTable.attach(rdioEnregistrerLog, 0, 3, 0, 7, gtk.EXPAND, gtk.EXPAND, 0, 0)
pTable.attach(btnRecuperer, 1, 2, 0, 5, gtk.EXPAND, gtk.EXPAND, 0, 0)
pTable.attach(txtViewInfos, 0, 3, 4, 7, gtk.EXPAND | gtk.FILL, gtk.EXPAND | gtk.FILL, 8, 8)
btnRecuperer.connect("clicked", Recuperation)
pWindow.show_all()
gtk.main()

Conclusion

N'hésitez pas à commenter et à rapporter des bug.

Merçi.
13 mai 2008 16:28:33 :
Modifications de l'interface, ajout de la détection de plusieurs choses (Titre de page, doctype, ect...), divers améliorations, possibilité d'enregistrer dans un log, ect
  • signaler à un administrateur
    Commentaire de xeolin le 13/05/2008 18:39:51 7/10

    Bonne source, illisible a la fin mais commentee.

    C'est une tres mauvaise habitude d'utiliser != (L.15) dans ce cas, tu deverais commencer par ecrire l'exeption et non le code lui-meme, c'est plus facile pour lire, ecrire et debuger le code.

    Sinon l'idee est bonne meme si deja postee, je donne un 7/10.

  • signaler à un administrateur
    Commentaire de jojo930 le 14/05/2008 07:29:23

    Salut XEOLIN, et merçi de ton commentaire.

    En effet, j'ai justement corrigé ça peut après ton commentaire, méa culpa.
    Par contre, que pourrais-je faire pour améliorer la lisibilité du code, à la fin ?

Ajouter un commentaire

Discussions en rapport avec ce code source

Wx ou GTK ? par kedare

probleme d'execution par albatof

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS