2010-10-13 12 views
0

Comment commencer sur une seule page Web, disons à la racine de DMOZ.org et indexer chaque URL attachée à elle. Puis stocker ces liens dans un fichier texte. Je ne veux pas le contenu, juste les liens eux-mêmes. Un exemple serait génial.Comment je ferais un simple extracteur d'URL en Python?

+3

Pourquoi avez-vous besoin de cela en python? 'wget' peut le faire sans réinventer la roue – Daenyth

+0

Je programme sur le meilleur OS, Windows, pas Linux :). –

+0

Plusieurs niveaux. Une profondeur indéterminée. –

Répondre

2

Ceci, par exemple, serait imprimer des liens sur this very related (but poorly named) question:

import urllib2 
from BeautifulSoup import BeautifulSoup 

q = urllib2.urlopen('https://stackoverflow.com/questions/3884419/') 
soup = BeautifulSoup(q.read()) 

for link in soup.findAll('a'): 
    if link.has_key('href'): 
     print str(link.string) + " -> " + link['href'] 
    elif link.has_key('id'): 
     print "ID: " + link['id'] 
    else: 
     print "???" 

Sortie:

Stack Exchange -> http://stackexchange.com 
log in -> /users/login?returnurl=%2fquestions%2f3884419%2f 
careers -> http://careers.stackoverflow.com 
meta -> http://meta.stackoverflow.com 
... 
ID: flag-post-3884419 
None -> /posts/3884419/revisions 
... 
+0

Vous devriez utiliser 'if 'href' dans le lien:' plutôt que 'link.has_key'. 'has_key' est obsolète et retiré de python 3. – Daenyth

+0

Pour moi (Py 2.6.5, BS 3.0.8)' 'href' dans link' renvoie 'False', même si' link ['href'] 'me donnera une URL. Cependant, je ne sais pas grand-chose sur le fonctionnement des dictionnaires. ''href' dans zip (* link.attrs) [0]' semble fonctionner, mais est moche. –

0

Si vous insistez pour réinventer la roue, utilisez un analyseur html comme BeautifulSoup pour récupérer toutes les balises. This answer à une question similaire est pertinente.