Récuperer des infos depuis des sites web

Fermé
CCM - 27 mai 2008 à 10:57
-CCM- Messages postés 927 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 16 juin 2013 - 16 juil. 2008 à 17:06
Bonjour,

Je souhaite automatiser un système de récupération de données:

Je voudrais récupérer des données, des parties de pages web, provenant de plusieurs sites web.
J'ai vu des post semblables mais en ce qui me concerne c'est un peu plus délicat et totalement different.

Les données se trouvent sur des pages avec des liens du type " http://www.undomaine.dh/notes/995217.php"
Le nom de la page php " 995217.php " varie à chaque fois et il n'est pas prévisible.

Voyez vous une solutions?

Merci à vous.

36 réponses

Merci, j'avais déjà mis la main sur ton code depuis ce post, j'avais commencer a réfléchir dessus :

http://www.commentcamarche.net/forum/affich 2327323 web service recuperer des donnees web

address = 'http://www.sebsauvage.net/rss/updates.xml'
document = xml.dom.minidom.parse(urllib.urlopen(address))


Il faudra rendre la variable "address" dynamique pour ne pas la rentrer en dur.
Je doit faire en sorte ,que les url varient automatiquement en fonction des pages.
J'ai une vingtaine de flux rss, chaque flux contient 5 articles.

J'ai donc une centaine de liens. Et le lendemain, rebelotte, les url changent a nouveau...

Il faut donc mettre au point un script qui va récupérer les liens de ma page web igoogle (contenant tout les flux RSS) , supprimer les liens inutile du type https://accounts.google.com/ServiceLogin?passive=1209600&continue=https%3A%2F%2Faccounts.google.com%2FManageAccount&followup=https%3A%2F%2Faccounts.google.com%2FManageAccount .... et ensuite passé a la moulinette chaque lien trouvé dans le script de récupération de données.
Sachant qu'il existe pour un site , certain nom de champs
for item in document.getElementsByTagName('item'):

Qu'il n'existera plus sur un autre site.... Sa me donnera un code de 200 lignes environ si l'on compte tout les champs pour chaque sites? A repasé autant de fois qu'il y aura de lien sur ma page Igoogle.
Soit j'ai tout faux, soit je vais dans la bonne direction ?
0
J'ajoute que
sur ma page igoogle, j'ai un lien par exemple qui pointe vers --> https://www.securityfocus.com/bid/28392
Et le code source de cette même page le lien est le suivant --> href="#" onclick="return _del('7',25,'url=http://www.securityfocus.com/rss/vulnerabilities.xml')

En gros je ne récupère pas les liens de mes pages !! :(
0
clic_droitSAsertAquoi
28 mai 2008 à 15:41
Debut de mon code

#!/usr/bin/python
# -*- coding: iso-8859-1 -*-
import urllib, sys, xml.dom.minidom

eeye = ‘https://www.beyondtrust.com/resources’
red = ‘http://www.red-database-security.com/advisory/published_alerts.xml’
securityfocus = ‘https://www.securityfocus.com/rss/vulnerabilities.xml’
securitydotnews = ‘http://securitydot.net/rss/news.xml’
securitydotvuln = ‘http://securitydot.net/rss/vulnerabilities.xml’
securitylab = ‘https://www.securitylab.ru/_services/export/rss/notification.php’
idefens = ‘http://labs.idefense.com/rss/intelligence.rss.php?type=vulnerabilities’
zdi = ‘http://feeds.feedburner.com/ZDI-Published-Advisories’
idg = ‘http://feeds.feedburner.com/idg_fr/rt2/virus-alertes/rss’

doceeye = xml.dom.minidom.parse(urllib.u'rlopen(eeye))
docred = xml.dom.minidom.parse(urllib.urlopen(red))
docsecurityfocus = xml.dom.minidom.parse(urllib.urlopen(securityfocus))
docsecuritydotnews = xml.dom.minidom.parse(urllib.urlopen(securitydotnews))
docsecuritydotvuln = xml.dom.minidom.parse(urllib.urlopen(securitydotnews))
docsecuritylab = xml.dom.minidom.parse(urllib.urlopen(securitylab))
docidefens = xml.dom.minidom.parse(urllib.urlopen(idefens))
doczdi = xml.dom.minidom.parse(urllib.urlopen(zdi))
docidg = xml.dom.minidom.parse(urllib.urlopen(idg))



for item in doceeye.getElementsByTagName('item'):
    titre = item.getElementsByTagName('title')[0].firstChild.data
    description = item.getElementsByTagName('desc')[0].firstChild.data
    date = item.getElementsByTagName('date')[0].firstChild.data
    produit = item.getElementsByTagName('product')[0].firstChild.data
    print "Titre: %s" % titre.encode('latin-1','replace')

for item in docred.getElementsByTagName('item'):
    titre = item.getElementsByTagName('title')[0].firstChild.data
    description = item.getElementsByTagName('desc')[0].firstChild.data
    date = item.getElementsByTagName('date')[0].firstChild.data
    produit = item.getElementsByTagName('product')[0].firstChild.data
    print "Titre: %s" % titre.encode('latin-1','replace')

for item in dosecurityfocus.getElementsByTagName('item'):
    titre = item.getElementsByTagName('title')[0].firstChild.data
    description = item.getElementsByTagName('desc')[0].firstChild.data
    date = item.getElementsByTagName('date')[0].firstChild.data
    produit = item.getElementsByTagName('product')[0].firstChild.data
    print "Titre: %s" % titre.encode('latin-1','replace')

for item in docdotnews.getElementsByTagName('item'):
    titre = item.getElementsByTagName('title')[0].firstChild.data
    description = item.getElementsByTagName('desc')[0].firstChild.data
    date = item.getElementsByTagName('date')[0].firstChild.data
    produit = item.getElementsByTagName('product')[0].firstChild.data
    print "Titre: %s" % titre.encode('latin-1','replace')


Voila mes premières ligne de python... qu'en pense tu?
Où est-ce que tu va récupérer les noms des items? (ici j'ai mit des noms au pif (date product, title, desc ...)
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655
28 mai 2008 à 16:05
Grosso-modo, c'est ça.

Mais c'est bien d'utiliser des tableaux plutôt que de recopier le code à chaque fois.


Où est-ce que tu va récupérer les noms des items?

Le nom des logiciels impactés ne fait pas partie de la norme RSS.
RSS ne permet que de donner titre, résumé, lien, date (grosso-modo).

Après chaque site de sécurité possède ses pages propre, avec des structures différentes pour chaque.
Chaque site fait à sa sauce, et tu ne pourra pas faire autrement que de faire des développements spécialisés pour chaque site.

(Chaque site diffuse peut-être un flux dans un format particulier, avec plus de détails. Ou pire: ils n'ont pas de flux plus détaillé: il faudra aller interpréter leurs pages HTML pour en extraire le contenu.)


Bon courage !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
RSS ne permet que de donner titre, résumé, lien, date (grosso-modo).

Donc il faut que je laisse tomber les RSS, trop pauvre en informations.... Il faudrai que je me rende sur les sites directement.

Après chaque site de sécurité possède ses pages propre, avec des structures différentes pour chaque.

Le problème c'est comme je l'avais expliqué tout à l'heure, on ne connais pas les URL exacte pour extraire des informations.
Les urls sont du type
www.securityblablabla.com/vulnerabilite/xpsp2/bugNum97812.html 
et varient a chaque page!
Sa sous entendrais qu'il faut que j'aille consulter la page, que je prenne l'url, que je developpe un petit agent pour cette page spécifique et ce pour chaque page !! Non?
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655
28 mai 2008 à 16:44
Je suggère:
Que tu utilise le flux RSS du site.
Pour chaque nouvel ITEM: aller cherche la page HTML indiquée dans le LINK,
puis extraire de cette page HTML ce qui t'intéresse (n°version, etc.)
0
-CCM- Messages postés 927 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 16 juin 2013 84
28 mai 2008 à 16:48
Mes flux rss ne me retournent aucun LINK ! Je n'ai pas l'adresse des articles qui apparait dans la source de ma page contenant les flux.
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655
28 mai 2008 à 16:58
Si je prend celui-là:
http://www.red-database-security.com/advisory/published_alerts.xml

Je vois:

<item>	  
  <title>SQL Injection in SYS.KUPV$FT_INT in Oracle 10g. Rel. 1</title>
  <pubDate>17 Jan 2006 18:00:00 GMT</pubDate>

  <link>http://www.red-database-security.com/advisory/oracle_sql_injection_kupv$$ft_int.html</link>
  </item>
	<item>	  
  <title>Event 10053 logs TDE wallet password in cleartext</title>
  <pubDate>17 Jan 2006 13:00:00 GMT</pubDate>
  <link>http://www.red-database-security.com/advisory/oracle_tde_wallet_password.html</link>
  </item>

  <item>	  
  <title>Transparent Data Encryption stores key unencrypted in the SGA</title>
  <pubDate>17 Jan 2006 13:00:00 GMT</pubDate>
  <link>http://www.red-database-security.com/advisory/oracle_tde_unencrypted_sga.html</link>
  </item>


Il y a bien des balises link.
Idem pour les autres.

Tu as peut-être entré LINK en majuscules ?
0
-CCM- Messages postés 927 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 16 juin 2013 84
28 mai 2008 à 17:05
Il faudra m'expliquer comment tu fais pour afficher les link..
moi je fais clic droit - afficher la source et j'ai ce genre de code html :
<div id="m_1_b" class="modboxin"  style="height:px;"><script>var FEED1 = {has_entries : false,is_fetching: false,url:"http://www.red-database-security.com/advisory/published_alerts.xml",num_items:3};</script><div id="ftl_1_0" class="uftl"><a href='javascript:void(0)' title="" id='ft_1_0' class='fmaxbox' onclick='_IG_FR_toggle(1, 0)'></a><a href="http://www.red-database-security.com/advisory/oracle_sql_injection_kupv$$ft.html" title="">SQL Injection in SYS.KUPV$FT in Oracle 10g. Rel. 1</a><br><div id="fb_1_0" class='fpad fb' style='display:none'><div id=fb_1_1633096192306216205 >Informations temporairement indisponibles.</div></div></div><div id="ftl_1_1" class="uftl"><a href='javascript:void(0)' title="" id='ft_1_1' class='fmaxbox' onclick='_IG_FR_toggle(1, 1)'></a><a href="http://www.red-database-security.com/advisory/oracle_sql_injection_kupv$$ft_int.html" title="">SQL Injection in SYS.KUPV$FT_INT in Oracle 10g. Rel. 1</a><br><div id="fb_1_1" class='fpad fb' style='display:none'>


Comment fait tu apparaitre les link ??? Merci
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655
28 mai 2008 à 17:07
euh... tu as quoi comme navigateur ?

http://www.red-database-security.com/advisory/published_alerts.xml
quand je fais "voir le code source", j'obtiens ce que j'ai montré plus haut.

Je n'obtient pas du HTML mais de l'XML.

Je te suggère de changer de navigateur. Prend Firefox.
0
-CCM- Messages postés 927 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 16 juin 2013 84
28 mai 2008 à 17:14
heuuu J'ai bien firefox .....
Le code source de la page :

http://www.red-database-security.com/advisory/published_alerts.xml 


c'est :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><title>Personnalisez votre page d&#39;accueil</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><link this.base_iframe_url == ""; };this.is_zipped = is_zipped;};var remote_modules = [];_IG_RegisterOnloadHandler(function() {for (var i=0;i<remote_modules.length;i++){var rm=remote_modules[i];var          ........          href="/support/?ctx=web&hl=">Aide</a> - <a href="/intl/fr/about.html">À propos de Google</a> - <a href="https://www.google.com">iGoogle in English</a><br><br><br><br><span class="copyr">&copy;2008 Google</span></div></td></tr></table></form></body></html>


pour ma part ...
Enfaite sa me renvoi sur cette page : https://www.google.com
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655
28 mai 2008 à 21:39
Quand la page http://www.red-database-security.com/advisory/published_alerts.xml
est affichée, comme recupère-tu le code source ?

Enregistrer-sous, ou bien clic-droit > voir le code source.
0
Salut,
je ne sais pas comment tu te débrouille pour afficher la page.
Quand je clic sur le lien sa me redirige sur https://www.google.com

si je rentre l'url dans ma barre d'adresse sa me redirige aussi vers https://www.google.com

ouvrir dans un nouvel onglet, c'est pareil... redirection... Comment ouvre tu cette page? il n'y a pas de redirection vers un lecteur rss dans ton cas?
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655 > CCM
30 mai 2008 à 10:01
tu as dû cocher un truc dans Firefox pour utiliser automatiquement Google pour afficher le flux.

Va dans les options de firefox et sélectionne ça:
https://imageshack.com/
0
-CCM- Messages postés 927 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 16 juin 2013 84
30 mai 2008 à 10:33
Ah ok, j'en étais sur que sa venais d'un lecteur rss qui se mettait en route automatiquement.
La sa va mieux, j'affiche la page avec mes link.

Recuperer les flux rss. (j'ai ma liste"statique" de flux)
------recuperer tout mes link, (recuperer les link qui sont "dynamiques")
---------------pour chaque link
---------------recuperer les données (l'emplacement des données est different d'un site a un autre)
------fin des link de la page
fin des pages
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655
30 mai 2008 à 10:40
Ton algo me semble ok.

Pour extraire des infos d'une page HTML, il y a plusieurs méthodes (expressions régulières, BeautifulSoup, etc.)
Le choix est libre.

Quelques exemples:
https://sebsauvage.net/python/snyppets/index.html#getlinks1
https://sebsauvage.net/python/snyppets/index.html#getlinks2
https://sebsauvage.net/python/snyppets/index.html#getlinks3
https://sebsauvage.net/python/snyppets/index.html#getlinks4
0
-CCM- Messages postés 927 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 16 juin 2013 84
30 mai 2008 à 12:01
import re, urllib
securityfocus =	‘https://www.securityfocus.com/rss/vulnerabilities.xml’
linksListsecurityfocus = re.findall('<a href=(.*?)>.*?</a>',securityfocus)
for link in linksList:
    titre = item.getElementsByTagName('title')[0].firstChild.data
    identifiant = item.getElementsByTagName('???')[0].firstChild.data
    CVE = item.getElementsByTagName('???')[0].firstChild.data
    print "Titre: %s" % titre.encode('latin-1','replace')
    print "Identifiant: %s" % identifiant.encode('latin-1','replace')
    print "CVE: : %s" % cve.encode('latin-1','replace')


Qu'en pense tu ?
Par contre je ne trouve pas de balise pour retrouver les autres infos :

<span class="title">International Components for Unicode Library (libicu) Multiple Memory Corruption Vulnerabilities</span><br/><br/>
	<table cellpadding="4" cellspacing="0" border="0">
		
				<span class="label">Bugtraq ID:</span> 
			
				27455
		
				<span class="label">Class:</span> 
			
				Unknown
			
		<tr valign="top">
			
				<span class="label">CVE:</span> 
			
					CVE-2007-4770<br/>
				
					CVE-2007-4771<br/>
				 		
				<span class="label">Remote:</span> 
			
				Yes
			
				<span class="label">Local:</span> 
			
				No
			
				<span class="label">Published:</span> 
			
				Jan 25 2008 12:00AM
			


title pour le titre , ok, mais pour le "Bugtraq ID", le "CVE" la "Published date" , il n'y a pas de item...ou de class, comment faire ?
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655
30 mai 2008 à 12:23
securityfocus = ‘https://www.securityfocus.com/rss/vulnerabilities.xml
linksListsecurityfocus = re.findall('<a href=(.*?)>.*?</a>',securityfocus)


euh... dans les fichiers RSS, les liens sont les balises <link>, et pas <a href...>.


Par contre je ne trouve pas de balise pour retrouver les autres infos :

HTML n'utilisant que des balises "générale" (sans signification sémantique comme RSS), il faut ruser.

Par exemple pour récupérer le bugtraqID, il faut:
rechercher la balise <span> contenant le texte "Bugtraq ID:", puis prendre le texte qui suit la balise </span>, jusqu'au premier <span> suivant trouvé.

Ce cera donc à toi d'étudier la structure de chaque site pour extraire ce qu'iintéresse de leur page HTML
(en priant pour que la structure de leur page ne change pas trop souvent).
0
-CCM- Messages postés 927 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 16 juin 2013 84
16 juil. 2008 à 17:06
Merci .
0